الأدوار والامتيازات
امنح صلاحيات الوصول واسحبها باستخدام GRANT وREVOKE
الأدوار والامتيازات درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
ما الأدوار والامتيازات؟
في SQL، تمثل الأدوار مجموعات مسماة من الامتيازات يمكن إسنادها إلى المستخدمين. وتتحكم الامتيازات في الإجراءات التي يُسمح لمستخدم أو دور بتنفيذها على كائنات قاعدة البيانات، مثل الجداول وطرق العرض والدوال.
بدلًا من منح الأذونات لكل مستخدم على حدة، تنشئ دورًا بالامتيازات المطلوبة ثم تسند هذا الدور إلى عدة مستخدمين دفعة واحدة. وهذا يجعل إدارة التحكم في الوصول على نطاق واسع أسهل بكثير.
إنشاء دور
استخدم CREATE ROLE لتعريف دور جديد في PostgreSQL. ويمكن للدور أن يمثل مستخدمًا واحدًا أو مجموعة من المستخدمين، بحسب طريقة تهيئته.
تُنشأ الأدوار بلا أي امتيازات افتراضيًا، لذلك يجب أن تمنحها صراحةً صلاحية الوصول إلى الكائنات.
CREATE ROLE readonly_user;
CREATE ROLE app_writer;
CREATE ROLE db_admin;منح امتيازات الجداول
تمنح جملة GRANT دورًا أو مستخدمًا إذنًا لتنفيذ عمليات محددة على كائن في قاعدة البيانات. وتشمل امتيازات مستوى الجدول الشائعة SELECT وINSERT وUPDATE وDELETE.
يمكنك منح امتياز واحد أو عدة امتيازات دفعة واحدة، وذلك بفصلها بفواصل.
-- Grant SELECT only (read-only role)
GRANT SELECT ON employees TO readonly_user;
-- Grant multiple privileges
GRANT SELECT, INSERT, UPDATE ON orders TO app_writer;منح جميع الامتيازات
إذا كان الدور يحتاج إلى وصول كامل إلى جدول، فيمكنك استخدام GRANT ALL PRIVILEGES بدلًا من إدراج كل إذن على حدة. ويمنح ذلك كل امتياز قابل للتطبيق على الكائن المحدد.
توخَّ الحذر عند استخدام ALL PRIVILEGES، ولا تمنحه إلا للأدوار التي تحتاج فعلًا إلى تحكم كامل في الكائن.
-- Grant full access to db_admin on a table
GRANT ALL PRIVILEGES ON employees TO db_admin;
-- Or the shorthand form
GRANT ALL ON orders TO db_admin;سحب الامتيازات
تزيل جملة REVOKE الامتيازات الممنوحة سابقًا من دور أو مستخدم. وهذه هي الطريقة لتقييد الوصول عندما تتغير المتطلبات أو لا يعود الدور بحاجة إلى أذونات معينة.
بعد تنفيذ REVOKE، يفقد الدور المتأثر فورًا الامتياز المحدد على الكائن المسمى.
-- Remove UPDATE access from app_writer
REVOKE UPDATE ON orders FROM app_writer;
-- Remove all privileges from a role
REVOKE ALL PRIVILEGES ON employees FROM readonly_user;إسناد دور إلى مستخدم
في PostgreSQL، يُعد المستخدمون أدوارًا أيضًا؛ فالدور الذي يمتلك السمة LOGIN يمكنه الاتصال بقاعدة البيانات. وتُسند دور مجموعة إلى دور تسجيل الدخول باستخدام GRANT role TO user.
بعد الإسناد، يرث المستخدم جميع الامتيازات الخاصة بذلك الدور، مما يجعل إدارة الأذونات لعدة مستخدمين دفعة واحدة أمرًا مباشرًا.
-- Create a login user
CREATE ROLE alice WITH LOGIN PASSWORD 'secret123';
-- Assign the readonly role to alice
GRANT readonly_user TO alice;
-- Alice can now SELECT on tables granted to readonly_userسحب دور من مستخدم
لإزالة إسناد دور من مستخدم، استخدم REVOKE role FROM user. بعد ذلك، لن يعود المستخدم يرث الامتيازات التي كان هذا الدور يمنحها.
يفيد ذلك عندما يغيّر موظف مسؤولياته أو يغادر المؤسسة، إذ يمكنك سحب دوره دون المساس بتعريفات الامتيازات الخاصة بالدور نفسه.
-- Remove the readonly role from alice
REVOKE readonly_user FROM alice;
-- Alice no longer has SELECT on tables via that roleامتيازات مستوى المخطط
قبل أن يتمكن دور من الوصول إلى أي كائنات داخل مخطط، يحتاج إلى امتياز USAGE على ذلك المخطط. ومن دونه، حتى الدور الذي يمتلك SELECT على جدول محدد لن يتمكن من قراءة البيانات، لأنه لا يستطيع تحديد مسار المخطط.
احرص دائمًا على منح USAGE على المخطط إلى جانب الامتيازات الخاصة بالكائن.
-- Allow readonly_user to see inside the public schema
GRANT USAGE ON SCHEMA public TO readonly_user;
-- Then grant table-level privilege
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;الامتيازات الافتراضية للكائنات المستقبلية
عند إنشاء جداول جديدة في مخطط، لا تحصل الأدوار الحالية تلقائيًا على صلاحية الوصول إليها. استخدم ALTER DEFAULT PRIVILEGES لضمان إمكانية وصول دور آخر تلقائيًا إلى الكائنات المستقبلية التي ينشئها دور محدد.
يمنع ذلك مشكلة شائعة تصبح فيها الجداول الجديدة غير مرئية لأدوار التطبيق إلى أن يتذكر أحدهم تشغيل GRANT يدويًا.
-- Future tables created by the current user will be SELECTable by readonly_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;
-- Future tables will allow INSERT/UPDATE/DELETE for app_writer
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_writer;خيار WITH GRANT OPTION
افتراضيًا، لا يستطيع الدور الذي يتلقى امتيازًا تمرير هذا الامتياز إلى أدوار أخرى. وتسمح إضافة WITH GRANT OPTION للمستلم بمنح ذلك الامتياز للآخرين أيضًا.
استخدم هذا الخيار بحذر، إذ يعني أن الدور يصبح نقطة تفويض موثوقة للتحكم في الوصول، مما قد يعقّد التدقيق إذا أُفرط في استخدامه.
-- app_writer can now grant SELECT on orders to other roles
GRANT SELECT ON orders TO app_writer WITH GRANT OPTION;
-- app_writer can then do:
-- GRANT SELECT ON orders TO reporting_role;عرض الامتيازات الممنوحة
يخزّن PostgreSQL معلومات الامتيازات في عروض كتالوج النظام. ويمكنك الاستعلام عن information_schema.role_table_grants لمعرفة الأدوار التي مُنحت أي امتيازات على أي جداول.
كما يعرض أمر الشرطة المائلة العكسية \dp tablename في psql قائمة امتيازات الوصول إلى جدول بتنسيق موجز.
-- List all table-level grants in the current database
SELECT grantee, table_schema, table_name, privilege_type
FROM information_schema.role_table_grants
WHERE table_schema = 'public'
ORDER BY grantee, table_name;اختبار سريع
اختبر مدى فهمك للأدوار والامتيازات في SQL.
مراجعة: الأدوار والامتيازات
تعلمت في هذا الدرس كيفية إدارة SQL للتحكم في الوصول من خلال الأدوار والامتيازات:
- CREATE ROLE يعرّف دورًا جديدًا أو حساب مستخدم
- GRANT يسند امتيازات مثل SELECT وINSERT وUPDATE وDELETE وALL إلى دور على كائنات محددة
- REVOKE يزيل تلك الامتيازات
- GRANT role TO user يسند دور مجموعة إلى مستخدم يسجّل الدخول، بحيث يرث امتيازاته
- تحتاج الأدوار إلى USAGE على المخطط قبل أن تتمكن من الوصول إلى الكائنات الموجودة داخله
- ALTER DEFAULT PRIVILEGES يضمن إمكانية الوصول تلقائيًا إلى الكائنات المستقبلية
- WITH GRANT OPTION يتيح للمستلم تفويض الامتياز إلى طرف آخر
يُعد إبقاء الامتيازات محدودة وقائمة على الأدوار مبدأً أساسيًا في تصميم قواعد البيانات الآمنة؛ امنح فقط ما هو مطلوب، واسحب الامتيازات بسرعة عندما لا تعود ضرورية.
الأسئلة الشائعة
هل درس «الأدوار والامتيازات» مجاني؟
نعم — نص درس «الأدوار والامتيازات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «الأدوار والامتيازات»؟
امنح صلاحيات الوصول واسحبها باستخدام GRANT وREVOKE تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «الأدوار والامتيازات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الأدوار والامتيازات
- سياسات الأمان على مستوى الصفوف
- الأذونات على مستوى الأعمدة
- تدقيق الوصول