انتقل إلى محتوى الدرس

Role Based Access Control إدارة الأدوار الوظيفية Roles

تعلّم إدارة الصلاحيات والأدوار عبر GRANT و REVOKE وتطبيق مبدأ أقل الصلاحيات في MySQL 8 مع أمثلة SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

بدلاً من تكرار أوامر المنح الفردية لعشرات المطورين أو الخدمات، يوفر خادم MySQL 8 نظام التحكم بالوصول المبني على الأدوار (Role-Based Access Control — RBAC)، حيث يمثل الدور حزمة صلاحيات مسماة قابلة لإعادة الاستخدام:

  • CREATE ROLE IF NOT EXISTS 'app_read_only', 'app_writer';: ينشئ أدواراً وظيفية معيارية على مستوى الخادم.
  • GRANT SELECT ON shop_db.* TO 'app_read_only';: يمنح الصلاحيات للدور الوظيفي نفسه.
  • GRANT 'app_read_only' TO 'report_reader'@'localhost';: يُسند الدور الوظيفي إلى حساب المستخدم (أو عدة حسابات معاً).
  • SET DEFAULT ROLE ALL TO 'report_reader'@'localhost';: خطوة جوهرية؛ لأن الأدوار الممنوحة في MySQL 8 تكون غير مفعلة افتراضياً عند تسجيل الدخول ما لم يتم تفعيلها تلقائياً عبر SET DEFAULT ROLE أو داخل الجلسة عبر SET ROLE ALL.
  • SELECT CURRENT_ROLE();: يتحقق من الدور الوظيفي النشط حالياً في الجلسة.
+--------------------+
| CURRENT_ROLE()     |
+--------------------+
| `app_read_only`@`%` |
+--------------------+
SQL
CREATE ROLE IF NOT EXISTS 'app_read_only', 'app_writer';

GRANT SELECT ON shop_db.* TO 'app_read_only';
GRANT INSERT, UPDATE ON shop_db.* TO 'app_writer';

GRANT 'app_read_only' TO 'report_reader'@'localhost';
SET DEFAULT ROLE ALL TO 'report_reader'@'localhost';

SELECT CURRENT_ROLE();
DROP ROLE IF EXISTS 'app_writer';