العودة إلى المدونة

كيفية استخدام الأدوار وإدارة الصلاحيات في PostgreSQL

كيفية استخدام الأدوار وإدارة الصلاحيات في PostgreSQL

PostgreSQL هو نظام إدارة قواعد بيانات مفتوح المصدر يستخدم بدوره SQL. إنه أداة قوية للغاية تُستخدم لإدارة التطبيقات واستضافة بيانات الويب على VPS. في هذا البرنامج التعليمي، ستتعلم كيفية إدارة الأذونات في PostgreSQL. سيساعدك هذا على منح أدوار تطبيقك الأذونات المطلوبة. سنقوم بتنفيذ هذا البرنامج التعليمي باستخدام PostgreSQL على Ubuntu 18.04 خادم سحابي على CloudSigma.

تثبيت PostgreSQL

لتنزيل وتثبيت PostgreSQL، قم بتشغيل الأوامر التالية:

سيقوم برنامج التثبيت بإنشاء مستخدم افتراضي – “Postgres” للعمل من خلاله. سنستخدم هذا المستخدم في معظم هذا البرنامج التعليمي. يمكنك تسجيل الدخول إلى هذا المستخدم باستخدام هذا الأمر:

الآن بعد أن تم تثبيت PostgreSQL، ستتعلم كيف يتعامل مع الأذونات. يمكنك أيضًا متابعة برنامجنا التعليمي حول إعداد PostgreSQL على Ubuntu للحصول على دليل مفصل خطوة بخطوة لعملية التثبيت.

مفاهيم أذونات PostgreSQL

يدير Postgres الأذونات من خلال مفهوم “الأدوار.” مع الأدوار، لا يوجد فرق بين المستخدمين والمجموعات. الأدوار أكثر مرونة من نظام Unix التقليدي للمستخدمين والمجموعات. على سبيل المثال، يمكن أن يعمل الدور كعضو في دور آخر، ويرث أذوناته.

عرض الأدوار في PostgreSQL

لعرض الأدوار في PostgreSQL، تحتاج أولاً إلى تسجيل الدخول إلى موجه الأوامر باستخدام الأمر التالي:

ثم، قم بتشغيل ما يلي لعرض الأدوار:

show roles manage permissions in PostgreSQL

حتى الآن، هناك دور افتراضي واحد فقط يتمتع بجميع الصلاحيات.

كيفية إنشاء الأدوار في PostgreSQL

يمكنك إنشاء أدوار لـ Postgres إما من سطر الأوامر أو من داخل غلاف Postgres. يمكنك تجربة النهجين التاليين، واللذين ستتعرف بعدهما على كيفية إدارة الأذونات والوصول في PostgreSQL.

كيفية إنشاء الأدوار من داخل PostgreSQL

أسهل طريقة لإنشاء الأدوار هي من داخل موجه أوامر Postgres. يمكنك القيام بذلك باستخدام الأمر التالي:

للتحقق مما إذا كان قد تم إنشاؤه، قم بتشغيل الأمر:

create role from prompt

يوضح هذا أن الدور الجديد ليس لديه أذونات تسجيل دخول. ستتعلم كيفية تغيير ذلك لاحقًا في البرنامج التعليمي.

كيفية إنشاء الأدوار من سطر الأوامر

البديل للطريقة المذكورة أعلاه هو إنشاء المستخدم من سطر الأوامر. للخروج من موجه أوامر PostgreSQL، اكتب ما يلي:

يمكنك إنشاء دور يسمى “test” باستخدام الأمر التالي:

بمجرد تنفيذ الأمر أعلاه، قم بتسجيل الدخول إلى psql، واعرض قائمة الأدوار باستخدام الأوامر التالية:

creating user from commandline

يمكنك ملاحظة أن المستخدم الذي تم إنشاؤه بهذه الطريقة لا يمتلك نفس السمات.

كيفية حذف الأدوار في PostgreSQL

يمكنك بسهولة حذف الأدوار في PostgreSQL باستخدام الصيغة التالية:

يمكنك حذف الدور التجريبي الذي أنشأناه سابقًا باستخدام الأمر:

drop role

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

drop role fail

إذا كنت تريد ألا يظهر الأمر خطأً عندما لا يكون الدور موجودًا، يمكنك إضافة ‘IF EXISTS’ في الأمر:

يمكنك إعادة محاولة حذف الدور باستخدام هذا الأمر:

drop role if exists

كيفية تحديد الصلاحيات عند إنشاء الدور

حتى الآن، قمت بإنشاء الأدوار وحذفها. في هذا القسم، ستقوم بإنشاء أدوار بأذونات معدلة. يمكنك القيام بذلك عن طريق تحديد أذونات الدور باستخدام أمر الإنشاء:

لمشاهدة الخيارات المتاحة لذلك، يمكنك فتح المساعدة باستخدام هذا الأمر:

help create user

إذا كنت تريد إنشاء دور بأذونات تسجيل الدخول، يمكنك صياغة الأمر على النحو التالي:

create role with login manage permissions in PostgreSQL

كما رأينا سابقًا، إذا كنت تريد إنشاء أدوار بصلاحية تسجيل الدخول، يمكنك أيضًا استخدام الأمر التالي:

الاختلاف الوحيد بين الأمرين هو أن ‘CREATE USER’ يمنح صلاحية تسجيل الدخول للدور افتراضيًا.

كيفية تغيير امتيازات الأدوار في PostgreSQL

حتى الآن، قمت بتجربة كيفية إعطاء الصلاحيات أثناء إنشاء المستخدم. في هذا القسم، ستقوم بتعديل صلاحيات المستخدمين الذين تم إنشاؤهم بالفعل. صيغة أمر التعديل (alter) هي:

على سبيل المثال، إذا أردت، يمكنك تغيير صلاحيات تسجيل الدخول لـ demo_role إلى ‘تسجيل الدخول’ باستخدام هذا الأمر:

alter nologin

للسماح للمستخدم بتسجيل الدخول مرة أخرى، يمكنك تعديل الصلاحيات باستخدام الأمر التالي:

كيفية تسجيل الدخول كمستخدم مختلف في PostgreSQL

يسمح لك PostgreSQL بتسجيل الدخول محليًا فقط بشكل افتراضي إذا كان اسم المستخدم الخاص بك يطابق اسم مستخدم النظام. للتغلب على هذا، يمكنك إما تغيير نوع تسجيل الدخول أو تكوين PostgreSQL لاستخدام واجهة شبكة الاسترجاع (loopback). ستقوم هذه الواجهة بتغيير نوع الاتصال إلى اتصال عن بعد، حتى لو كان الاتصال محليًا.

في هذا القسم، ستقوم بتجربة الخيار الثاني. كبداية، يمكنك تعيين كلمة مرور المستخدم، حتى تصبح عملية المصادقة ممكنة.

قم بتعيين كلمة مرور ‘demo_user’ باستخدام الأمر التالي:

عند مطالبتك بذلك، أدخل كلمة المرور وأكدها. بمجرد الانتهاء، يمكنك الخروج من واجهة PostgreSQL والعودة إلى مستخدم جهازك العادي:

يتطلب منك PostgreSQL تسجيل الدخول باسم مستخدم يطابق اسم مستخدم نظام التشغيل الخاص بك وأيضًا الاتصال بقاعدة البيانات بنفس اسم المستخدم. نظرًا لأنك لا تفعل ذلك في هذه الحالة، فسيتعين عليك تحديد الخيارات التي تريد استخدامها صراحةً. يمكنك استخدام الصيغة التالية:

user: اسم المستخدم الذي تريد الاتصال به
DB: قاعدة بيانات موجودة لديك صلاحية الوصول إليها
-h 127.0.0.1: يحدد لـ PostgreSQL أنك ستتصل عبر واجهة شبكة بالجهاز المحلي. يتيح لنا هذا الخيار المصادقة حتى لو لم يكن اسم المستخدم مطابقًا لاسم مستخدم النظام.
-W: يشير لـ PostgreSQL إلى أنك ستدخل كلمة مرور

لتسجيل الدخول باستخدام “test_user” الخاص بنا، يمكننا تنفيذ الأمر التالي:

postgresql login through network interface manage permissions in PostgreSQL

بمجرد إدخال كلمة المرور، سيتم تسجيل دخولك إلى واجهة الأوامر (shell). في مثالنا، نستخدم قاعدة البيانات ‘postgres’، وهي قاعدة البيانات الافتراضية التي يتم إعدادها تلقائيًا أثناء التثبيت.

في هذه الجلسة، وبناءً على المستخدم الذي اخترت تسجيل الدخول به، ستواجه مشكلة تتمثل في عدم امتلاكك للصلاحيات المناسبة لتنفيذ إجراءات مختلفة. سبب هذه المشكلة هو أنك لم تمنح المستخدم بالفعل صلاحيات كافية لإدارة الأمور.

في القسم التالي، ستمنح الصلاحيات المطلوبة للمستخدمين. أولاً، ستحتاج إلى إعادة تغيير المستخدم إلى مستخدم إداري:

إدارة الصلاحيات في PostgreSQL: كيفية منح الصلاحيات في PostgreSQL

في PostgreSQL، إذا تم إنشاء قاعدة بيانات أو جدول بواسطة دور معين، فإن هذا الدور فقط هو الذي يملك صلاحيات تعديله. والاستثناء من ذلك هو الأدوار التي تمتلك صلاحيات المستخدم الخارق (superuser). في هذا القسم، ستقوم بمنح صلاحيات لأدوار أخرى. يمكنك منح صلاحيات لأدوار أخرى باستخدام عبارة ‘GRANT’. الصيغة هي:

يمكنك إنشاء جدول بسيط لتنفيذ الأمر:

لرؤية الجدول الذي تم إنشاؤه، قم بتشغيل الأمر:

create table manage permissions in PostgreSQL

الآن بعد أن أصبح لديك جدول demo، يمكنك منح الصلاحيات على جدول ‘demo’ إلى ‘demo_role.’ يمكنك منح الدور صلاحية ‘UPDATE’ باستخدام هذا الأمر:

يمكنك منح جميع الصلاحيات لدور ما عن طريق تحديد الصلاحية كـ ‘ALL’:

إذا كنت تريد منح صلاحية معينة لجميع الأدوار في النظام، يمكنك استخدام الكلمة المفتاحية ‘public’ بدلاً من اسم الدور مثل الأمر التالي:

يمكنك عرض جميع الصلاحيات الممنوحة باستخدام الأمر التالي:

granted permissions

إدارة الصلاحيات في PostgreSQL: كيفية إزالة الصلاحيات في PostgreSQL

يمكنك بسهولة إزالة صلاحيات دور ما باستخدام الأمر ‘REVOKE’. وهو مشابه جداً لأمر المنح:

كما هو الحال مع GRANT، يمكننا استخدام الكلمات المفتاحية – ‘ALL’ و ‘PUBLIC’ لمنح جميع الصلاحيات أو منح الصلاحيات لجميع الأدوار:

كيفية استخدام أدوار المجموعات في PostgreSQL

لتمكين التحكم الواسع في الصلاحيات، تتميز الأدوار بمرونة كافية تسمح بتجميعها مع أدوار أخرى. على سبيل المثال، يمكنك إنشاء دور – ‘temporary_role’ ثم إضافة ‘demo_role’ و ‘test_user’ إلى ذلك الدور:

الآن يمكنك إدارة صلاحيات هذين الدورين بمجرد إدارة صلاحيات الدور ‘temporary_role’. يتيح ذلك إدارة أسهل للصلاحيات. يمكنك رؤية معلومات عضوية الدور باستخدام هذا الأمر:

role - group manage permissions in PostgreSQL

يمكن لأي عضو في المجموعة التصرف كالمجموعة باستخدام الأمر ‘set role’. وبما أن المستخدم ‘postgres’ هو مستخدم خارق (superuser)، يمكنك استخدام ‘set role’ حتى لو لم تكن عضواً في المجموعة:

أي جداول تقوم بإنشائها الآن ستكون مملوكة لـ temporary_role:

للتحقق من ملكية الجدول، قم بتشغيل الأمر التالي:

create table with temporary_role

يمكنك أن ترى أن الدور ‘temporary_role’ يملك الجدول الجديد والتسلسل المرتبط بنوع البيانات التسلسلي (serial). للعودة إلى صلاحيات الدور الأصلية، قم بتشغيل الأمر التالي:

إذا كنت تريد أن يحصل الدور على جميع صلاحيات الدور الذي ينتمي إليه، يمكنك تحديد الخاصية ‘inherit’ باستخدام الأمر ‘alter role’:

باستخدام الأمر أعلاه، حصل ‘test_user’ على جميع صلاحيات الأدوار التي ينتمي إليها. لحذف دور، يمكنك استخدام الأمر ‘drop role’:

drop role manage permissions in PostgreSQL

يُرجع الأمر أعلاه خطأً لأن لدينا بعض الكائنات، مثل الجدول ‘hello’، التي تعتمد عليه. لحذفه، يمكنك نقل ملكية الجدول إلى دور آخر:

يمكنك التحقق من أن temporary_role لا يملك أي جداول الآن باستخدام الأمر التالي:

check ownerships

يمكنك حذف ‘temporary_role’ الآن لأنه لا يحتوي على أي تبعيات حالياً:

على الرغم من أن الأمر أعلاه سيقوم بحذف الدور temporary_users، إلا أنه لا يتم إزالة الأعضاء السابقين في مجموعة الأدوار.

الخلاصة

لقد أكملت البرنامج التعليمي، وتعرف الآن كيفية إدارة الأذونات في PostgreSQL. يمكنك إدارة الأذونات بسهولة. تضمن معرفة كيفية إدارة الأذونات وصول تطبيقاتك إلى قواعد البيانات المطلوبة مع عدم إمكانية الوصول إلى أي قاعدة بيانات أخرى يستخدمها تطبيق آخر.

حوسبة سعيدة!

author

Akshay Nagpal

المؤلف · CloudSigma

Preslav Dobrev هو مصمم إبداعي في CloudSigma، يركز على هوية أعمال متسقة باستخدام قنوات التسويق التقليدية والمبتكرة. هو بارع في دمج الرؤية الفنية مع التسويق الاستراتيجي لخلق سرد قصصي مؤثر للعلامة التجارية.

التعليقات

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