شرح صفوف ومحتوى الفقرة
بدلاً من تكرار أوامر المنح الفردية لعشرات المطورين أو الخدمات، يوفر خادم 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';