PostgreSQL هو نظام إدارة قواعد بيانات مفتوح المصدر يستخدم بدوره SQL. إنه أداة قوية للغاية تُستخدم لإدارة التطبيقات واستضافة بيانات الويب على VPS. في هذا البرنامج التعليمي، ستتعلم كيفية إدارة الأذونات في PostgreSQL. سيساعدك هذا على منح أدوار تطبيقك الأذونات المطلوبة. سنقوم بتنفيذ هذا البرنامج التعليمي باستخدام PostgreSQL على Ubuntu 18.04 خادم سحابي على CloudSigma.
تثبيت PostgreSQL
لتنزيل وتثبيت PostgreSQL، قم بتشغيل الأوامر التالية:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
سيقوم برنامج التثبيت بإنشاء مستخدم افتراضي – “Postgres” للعمل من خلاله. سنستخدم هذا المستخدم في معظم هذا البرنامج التعليمي. يمكنك تسجيل الدخول إلى هذا المستخدم باستخدام هذا الأمر:
|
1 |
sudo su - postgres |
الآن بعد أن تم تثبيت PostgreSQL، ستتعلم كيف يتعامل مع الأذونات. يمكنك أيضًا متابعة برنامجنا التعليمي حول إعداد PostgreSQL على Ubuntu للحصول على دليل مفصل خطوة بخطوة لعملية التثبيت.
مفاهيم أذونات PostgreSQL
يدير Postgres الأذونات من خلال مفهوم “الأدوار.” مع الأدوار، لا يوجد فرق بين المستخدمين والمجموعات. الأدوار أكثر مرونة من نظام Unix التقليدي للمستخدمين والمجموعات. على سبيل المثال، يمكن أن يعمل الدور كعضو في دور آخر، ويرث أذوناته.
عرض الأدوار في PostgreSQL
لعرض الأدوار في PostgreSQL، تحتاج أولاً إلى تسجيل الدخول إلى موجه الأوامر باستخدام الأمر التالي:
|
1 |
psql |
ثم، قم بتشغيل ما يلي لعرض الأدوار:
|
1 |
\du |

حتى الآن، هناك دور افتراضي واحد فقط يتمتع بجميع الصلاحيات.
كيفية إنشاء الأدوار في PostgreSQL
يمكنك إنشاء أدوار لـ Postgres إما من سطر الأوامر أو من داخل غلاف Postgres. يمكنك تجربة النهجين التاليين، واللذين ستتعرف بعدهما على كيفية إدارة الأذونات والوصول في PostgreSQL.
كيفية إنشاء الأدوار من داخل PostgreSQL
أسهل طريقة لإنشاء الأدوار هي من داخل موجه أوامر Postgres. يمكنك القيام بذلك باستخدام الأمر التالي:
|
1 |
CREATE ROLE demo_role; |
للتحقق مما إذا كان قد تم إنشاؤه، قم بتشغيل الأمر:
|
1 |
\du |

يوضح هذا أن الدور الجديد ليس لديه أذونات تسجيل دخول. ستتعلم كيفية تغيير ذلك لاحقًا في البرنامج التعليمي.
كيفية إنشاء الأدوار من سطر الأوامر
البديل للطريقة المذكورة أعلاه هو إنشاء المستخدم من سطر الأوامر. للخروج من موجه أوامر PostgreSQL، اكتب ما يلي:
|
1 |
\q |
يمكنك إنشاء دور يسمى “test” باستخدام الأمر التالي:
|
1 |
createuser test |
بمجرد تنفيذ الأمر أعلاه، قم بتسجيل الدخول إلى psql، واعرض قائمة الأدوار باستخدام الأوامر التالية:
|
1 2 |
psql \du |

يمكنك ملاحظة أن المستخدم الذي تم إنشاؤه بهذه الطريقة لا يمتلك نفس السمات.
كيفية حذف الأدوار في PostgreSQL
يمكنك بسهولة حذف الأدوار في PostgreSQL باستخدام الصيغة التالية:
|
1 |
DROP ROLE role_name; |
يمكنك حذف الدور التجريبي الذي أنشأناه سابقًا باستخدام الأمر:
|
1 |
DROP ROLE demo_role; |

إذا حاولنا حذف دور غير موجود، فسيؤدي ذلك ببساطة إلى حدوث خطأ. لرؤية ذلك، يمكنك محاولة حذف نفس الدور مرة أخرى:
|
1 |
DROP ROLE demo_role; |

إذا كنت تريد ألا يظهر الأمر خطأً عندما لا يكون الدور موجودًا، يمكنك إضافة ‘IF EXISTS’ في الأمر:
|
1 |
DROP ROLE IF EXISTS role_name; |
يمكنك إعادة محاولة حذف الدور باستخدام هذا الأمر:
|
1 |
DROP ROLE IF EXISTS demo_role; |
كيفية تحديد الصلاحيات عند إنشاء الدور
حتى الآن، قمت بإنشاء الأدوار وحذفها. في هذا القسم، ستقوم بإنشاء أدوار بأذونات معدلة. يمكنك القيام بذلك عن طريق تحديد أذونات الدور باستخدام أمر الإنشاء:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
لمشاهدة الخيارات المتاحة لذلك، يمكنك فتح المساعدة باستخدام هذا الأمر:
|
1 |
\h CREATE ROLE |

إذا كنت تريد إنشاء دور بأذونات تسجيل الدخول، يمكنك صياغة الأمر على النحو التالي:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

كما رأينا سابقًا، إذا كنت تريد إنشاء أدوار بصلاحية تسجيل الدخول، يمكنك أيضًا استخدام الأمر التالي:
|
1 |
CREATE USER role_name; |
الاختلاف الوحيد بين الأمرين هو أن ‘CREATE USER’ يمنح صلاحية تسجيل الدخول للدور افتراضيًا.
كيفية تغيير امتيازات الأدوار في PostgreSQL
حتى الآن، قمت بتجربة كيفية إعطاء الصلاحيات أثناء إنشاء المستخدم. في هذا القسم، ستقوم بتعديل صلاحيات المستخدمين الذين تم إنشاؤهم بالفعل. صيغة أمر التعديل (alter) هي:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
على سبيل المثال، إذا أردت، يمكنك تغيير صلاحيات تسجيل الدخول لـ demo_role إلى ‘تسجيل الدخول’ باستخدام هذا الأمر:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

للسماح للمستخدم بتسجيل الدخول مرة أخرى، يمكنك تعديل الصلاحيات باستخدام الأمر التالي:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
كيفية تسجيل الدخول كمستخدم مختلف في PostgreSQL
يسمح لك PostgreSQL بتسجيل الدخول محليًا فقط بشكل افتراضي إذا كان اسم المستخدم الخاص بك يطابق اسم مستخدم النظام. للتغلب على هذا، يمكنك إما تغيير نوع تسجيل الدخول أو تكوين PostgreSQL لاستخدام واجهة شبكة الاسترجاع (loopback). ستقوم هذه الواجهة بتغيير نوع الاتصال إلى اتصال عن بعد، حتى لو كان الاتصال محليًا.
في هذا القسم، ستقوم بتجربة الخيار الثاني. كبداية، يمكنك تعيين كلمة مرور المستخدم، حتى تصبح عملية المصادقة ممكنة.
قم بتعيين كلمة مرور ‘demo_user’ باستخدام الأمر التالي:
|
1 |
\password test |
عند مطالبتك بذلك، أدخل كلمة المرور وأكدها. بمجرد الانتهاء، يمكنك الخروج من واجهة PostgreSQL والعودة إلى مستخدم جهازك العادي:
|
1 2 |
\q exit |
يتطلب منك PostgreSQL تسجيل الدخول باسم مستخدم يطابق اسم مستخدم نظام التشغيل الخاص بك وأيضًا الاتصال بقاعدة البيانات بنفس اسم المستخدم. نظرًا لأنك لا تفعل ذلك في هذه الحالة، فسيتعين عليك تحديد الخيارات التي تريد استخدامها صراحةً. يمكنك استخدام الصيغة التالية:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
user: اسم المستخدم الذي تريد الاتصال به
DB: قاعدة بيانات موجودة لديك صلاحية الوصول إليها
-h 127.0.0.1: يحدد لـ PostgreSQL أنك ستتصل عبر واجهة شبكة بالجهاز المحلي. يتيح لنا هذا الخيار المصادقة حتى لو لم يكن اسم المستخدم مطابقًا لاسم مستخدم النظام.
-W: يشير لـ PostgreSQL إلى أنك ستدخل كلمة مرور
لتسجيل الدخول باستخدام “test_user” الخاص بنا، يمكننا تنفيذ الأمر التالي:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

بمجرد إدخال كلمة المرور، سيتم تسجيل دخولك إلى واجهة الأوامر (shell). في مثالنا، نستخدم قاعدة البيانات ‘postgres’، وهي قاعدة البيانات الافتراضية التي يتم إعدادها تلقائيًا أثناء التثبيت.
في هذه الجلسة، وبناءً على المستخدم الذي اخترت تسجيل الدخول به، ستواجه مشكلة تتمثل في عدم امتلاكك للصلاحيات المناسبة لتنفيذ إجراءات مختلفة. سبب هذه المشكلة هو أنك لم تمنح المستخدم بالفعل صلاحيات كافية لإدارة الأمور.
في القسم التالي، ستمنح الصلاحيات المطلوبة للمستخدمين. أولاً، ستحتاج إلى إعادة تغيير المستخدم إلى مستخدم إداري:
|
1 2 3 |
\q sudo su - postgres psql |
إدارة الصلاحيات في PostgreSQL: كيفية منح الصلاحيات في PostgreSQL
في PostgreSQL، إذا تم إنشاء قاعدة بيانات أو جدول بواسطة دور معين، فإن هذا الدور فقط هو الذي يملك صلاحيات تعديله. والاستثناء من ذلك هو الأدوار التي تمتلك صلاحيات المستخدم الخارق (superuser). في هذا القسم، ستقوم بمنح صلاحيات لأدوار أخرى. يمكنك منح صلاحيات لأدوار أخرى باستخدام عبارة ‘GRANT’. الصيغة هي:
|
1 |
GRANT permission_type ON table_name TO role_name; |
يمكنك إنشاء جدول بسيط لتنفيذ الأمر:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
لرؤية الجدول الذي تم إنشاؤه، قم بتشغيل الأمر:
|
1 |
\d |

الآن بعد أن أصبح لديك جدول demo، يمكنك منح الصلاحيات على جدول ‘demo’ إلى ‘demo_role.’ يمكنك منح الدور صلاحية ‘UPDATE’ باستخدام هذا الأمر:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
يمكنك منح جميع الصلاحيات لدور ما عن طريق تحديد الصلاحية كـ ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
إذا كنت تريد منح صلاحية معينة لجميع الأدوار في النظام، يمكنك استخدام الكلمة المفتاحية ‘public’ بدلاً من اسم الدور مثل الأمر التالي:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
يمكنك عرض جميع الصلاحيات الممنوحة باستخدام الأمر التالي:
|
1 |
\z |
إدارة الصلاحيات في PostgreSQL: كيفية إزالة الصلاحيات في PostgreSQL
يمكنك بسهولة إزالة صلاحيات دور ما باستخدام الأمر ‘REVOKE’. وهو مشابه جداً لأمر المنح:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
كما هو الحال مع GRANT، يمكننا استخدام الكلمات المفتاحية – ‘ALL’ و ‘PUBLIC’ لمنح جميع الصلاحيات أو منح الصلاحيات لجميع الأدوار:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
كيفية استخدام أدوار المجموعات في PostgreSQL
لتمكين التحكم الواسع في الصلاحيات، تتميز الأدوار بمرونة كافية تسمح بتجميعها مع أدوار أخرى. على سبيل المثال، يمكنك إنشاء دور – ‘temporary_role’ ثم إضافة ‘demo_role’ و ‘test_user’ إلى ذلك الدور:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO test_user; |
الآن يمكنك إدارة صلاحيات هذين الدورين بمجرد إدارة صلاحيات الدور ‘temporary_role’. يتيح ذلك إدارة أسهل للصلاحيات. يمكنك رؤية معلومات عضوية الدور باستخدام هذا الأمر:
|
1 |
\du |

يمكن لأي عضو في المجموعة التصرف كالمجموعة باستخدام الأمر ‘set role’. وبما أن المستخدم ‘postgres’ هو مستخدم خارق (superuser)، يمكنك استخدام ‘set role’ حتى لو لم تكن عضواً في المجموعة:
|
1 |
SET ROLE temporary_role; |
أي جداول تقوم بإنشائها الآن ستكون مملوكة لـ temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
للتحقق من ملكية الجدول، قم بتشغيل الأمر التالي:
|
1 |
\d |

يمكنك أن ترى أن الدور ‘temporary_role’ يملك الجدول الجديد والتسلسل المرتبط بنوع البيانات التسلسلي (serial). للعودة إلى صلاحيات الدور الأصلية، قم بتشغيل الأمر التالي:
|
1 |
RESET ROLE; |
إذا كنت تريد أن يحصل الدور على جميع صلاحيات الدور الذي ينتمي إليه، يمكنك تحديد الخاصية ‘inherit’ باستخدام الأمر ‘alter role’:
|
1 |
ALTER ROLE test_user INHERIT; |
باستخدام الأمر أعلاه، حصل ‘test_user’ على جميع صلاحيات الأدوار التي ينتمي إليها. لحذف دور، يمكنك استخدام الأمر ‘drop role’:
|
1 |
DROP ROLE temporary_users; |

يُرجع الأمر أعلاه خطأً لأن لدينا بعض الكائنات، مثل الجدول ‘hello’، التي تعتمد عليه. لحذفه، يمكنك نقل ملكية الجدول إلى دور آخر:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
يمكنك التحقق من أن temporary_role لا يملك أي جداول الآن باستخدام الأمر التالي:
|
1 |
\d |

يمكنك حذف ‘temporary_role’ الآن لأنه لا يحتوي على أي تبعيات حالياً:
|
1 |
DROP ROLE temporary_users; |
على الرغم من أن الأمر أعلاه سيقوم بحذف الدور temporary_users، إلا أنه لا يتم إزالة الأعضاء السابقين في مجموعة الأدوار.
الخلاصة
لقد أكملت البرنامج التعليمي، وتعرف الآن كيفية إدارة الأذونات في PostgreSQL. يمكنك إدارة الأذونات بسهولة. تضمن معرفة كيفية إدارة الأذونات وصول تطبيقاتك إلى قواعد البيانات المطلوبة مع عدم إمكانية الوصول إلى أي قاعدة بيانات أخرى يستخدمها تطبيق آخر.
حوسبة سعيدة!


التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.