أذونات مستخدم PostgreSQL

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

في PostgreSQL ، كل شيء مبني على مفهوموظيفة.

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

لا يوجد مستخدمون في PostgreSQL ، فقط أدوار.

عن طريق الركضpsql postgresفي جهازك الطرفي ، ستقوم تلقائيًا بتسجيل الدخول باستخدام اسم مستخدم macOS الخاص بك إلى PostgreSQL ، وبالتالي الوصول إلى الدور الذي تم إنشاؤه.

في حالتي ، فإنflaviocopesتم إنشاء الدور ، ويمكنني رؤيته باستخدام ملف\duيأمر:

نرى؟ لدي ما يليسمات الأدواربشكل افتراضي:

  • Superuser
  • Create role
  • Create DB
  • Replication
  • Bypass RLS

ولست عضوًا في أي دور آخر (المزيد حول هذا لاحقًا)

خلق دور جديد

يتم إنشاء دور جديد باستخدامCREATE ROLEيأمر:

CREATE ROLE <role>;

على سبيل المثال:

CREATE ROLE testing;

حصلنا على دور جديد ، معCannot loginسمة الدور. لن يتمكن المستخدم الذي تم إنشاؤه حديثًا من تسجيل الدخول.

يمكنك المحاولة عن طريق كتابة\qالأمر ، ثمpsql postgres -U testing، لكنك سترى هذا الخطأ:

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

CREATE ROLE <role> WITH LOGIN;

إذا أزلنا هذا الدور باستخدام:

DROP ROLE <role>;

و أضفWITH LOGINهذا الوقت:

DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

يمكننا أن نرى أنtestingيمكن تسجيل الدخول ، لأننا لا نملكCannot loginسمة الدور هذه المرة:

حاول بإضافة الأمر\qللانسحاب ، وبعد ذلكpsql postgres -U testing:

لاحظ أن ملفاستدعىتغير من=#إلى=>لأننا لا نملكSuperuserسمة الدور الآن.

إضافة كلمة مرور للدور

في السابقCREATE ROLEالأمر أنشأنا دورًا بدون كلمة مرور. بالطبع من المهم جدًا أن يكون لديك كلمات مرور (آمنة). يمكنك إضافة كلمة مرور باستخدام ملفPASSWORDالكلمة الأساسية:

CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

إنشاء مستخدم

طريقة بديلة لتحديد الأدوار معLOGINالسمة المضافة تلقائيًا (الإنشاء الفعال للمستخدمين الذين يمكنهم تسجيل الدخول) هي استخدامCREATE USER:

CREATE USER <role> PASSWORD '<password>';

إضافة سمة دور إلى دور

يمكن إضافة سمة الدور لاحقًا إلى الدور باستخدامALTER ROLEيأمر.

لنفترض أننا أنشأنا دورًا بدون سمة LOGIN:

CREATE ROLE <username> PASSWORD '<password>';

يمكننا إضافته باستخدام:

ALTER ROLE <role> WITH LOGIN;

سمات الدور المضمنة

لقد رأيناLOGINدور السمة بالفعل ، للسماح لدور بتسجيل الدخول.

ولكن ما هي سمات الدور المضمنة الأخرى التي يمكننا استخدامها؟

  • LOGIN/NOLOGIN: اسمح (أو لا تسمح) بتسجيل الدخول إلى PostgreSQL
  • SUPERUSER/NOSUPERUSER: السماح (أو عدم السماح) بأذونات المستخدم المتميز. سيتجاوز المستخدم المتميز لقاعدة البيانات فحوصات الأذونات الأخرى ، باستثناءLOGIN(يجب أن تمنح بشكل منفصل).
  • CREATEDB/NOCREATEDB: تسمح (أو لا تسمح) بالقدرة على إنشاء قواعد بيانات جديدة
  • CREATEROLE/NOCREATEROLE: السماح (أو عدم السماح) بالقدرة على إنشاء أدوار جديدة
  • CREATEUSER/NOCREATEUSER: السماح (أو عدم السماح) بالقدرة على إنشاء مستخدمين جدد
  • INHERIT/NOINHERIT: تسمح (أو لا تسمح) بالقدرة على جعل الامتيازات قابلة للتوريث
  • REPLICATION/NOREPLICATION: منح (أو لا) أذونات النسخ (موضوع متقدم لن نغطي)

أدوار المجموعة

في PostgreSQL ، لا توجد مجموعات من المستخدمين.

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

سترث الأدوار أذونات الأدوار الممنوحة لهم ، إذا كان لهذه الأدوار سمة INHERIT.

أنشئ دورًا جماعيًا

لإنشاء دور مجموعة ، اكتب

CREATE ROLE <groupname>;

بناء الجملة هو نفسه إنشاء الدور.

بمجرد إنشاء دور المجموعة ، يمكنك إضافة أدوار إلى دور المجموعة باستخدامGRANT:

GRANT <groupname> TO <role>

على سبيل المثال ، يمكننا إنشاء ملفflavioدور المستخدم ودور مجموعة "الموظف" وتعيين المستخدم إلى دور المجموعة:

CREATE USER flavio PASSWORD 'superSecret123
؛خلق وظيفةالموظف؛منحةالموظفإلىفلافيو.

يمكنك إزالة دور من دور مجموعة باستخدام:

REVOKE <groupname> FROM <username>

مثال:

REVOKE employee FROM flavio;

سمات دور المجموعة

بشكل افتراضي ، ستؤدي إضافة دور إلى دور المجموعةليساجعل الدور يرث السمات (الأذونات) من دور المجموعة.

تحتاج إلى إنشاء دور المجموعة باستخدامINHERITينسب.

افترض أنك أنشأت دور مجموعة الموظفين ، وقمت بتعيينهCREATEDBينسب:

CREATE ROLE employee WITH CREATEDB INHERIT;

الآن قم بإنشاء دور جديد باستخدامINHERIT:

CREATE ROLE flavio;
GRANT employee TO flavio;


المزيد من دروس قواعد البيانات: