MySQL: إدارة مستخدمي MySQL والتحكم في الأذونات
آخر تحديث: 2026-08-26
يُعد التحكم في الوصول أساس أمن قواعد البيانات — فلا يمكن للمستخدمين المختلفين الوصول إلا إلى البيانات التي تم التصريح لهم بالوصول إليها.
يتناول هذا الدرس إدارة المستخدمين والأذونات.
graph TB
A[MySQL Permission Levels] --> B[Global Permissions<br/>*.*]
A --> C[Database Permissions<br/>mydb.*]
A --> D[Table Permissions<br/>mydb.users]
A --> E[Column Permissions<br/>mydb.users col]
B --> B1[ALL/CREATE/RELOAD...]
C --> C1[SELECT/INSERT/UPDATE/DELETE]
D --> D1[SELECT/ALTER/INDEX...]
E --> E1[SELECT col1, col2]
1. ما ستتعلمه
- CREATE USER: إنشاء مستخدم
- تفويض GRANT
- REVOKE إلغاء الأذونات
- مستوى الإذن (عام/قاعدة البيانات/الجدول/العمود)
- إدارة الأدوار (8.0+)
2. قصة حقيقية
(1) المشكلة: خطأ في الحساب الرئيسي يؤدي إلى كارثة كبرى
كان فريق التطوير يتصل دائمًا بقاعدة بيانات الإنتاج باستخدام حساب «root» — فقد كان ذلك أمرًا مريحًا، ولكن في أحد الأيام، نفذ أحد المطورين عن غير قصد الأمر DROP TABLE users، فتلاشت بيانات 3 ملايين مستخدم في لحظة. استغرق استعادة النسخة الاحتياطية أربع ساعات، وخلال تلك الفترة توقفت الخدمة تمامًا، مما أدى إلى خسائر مباشرة تجاوزت المليون.
(2) حلول لنظام الأذونات
تطبيق مبدأ «أقل امتياز ممكن»: منح كل دور الأذونات الضرورية فقط. يُمنح المطورون حق الوصول للقراءة فقط بالإضافة إلى حق الوصول للقراءة/الكتابة إلى مستودعات التطوير؛ ويتمتع موظفو العمليات بأذونات إدارية لمستودعات محددة؛ ويقتصر الوصول إلى حساب الجذر على مسؤولي قواعد البيانات (DBAs) الذين يستخدمون المضيف الحصين (bastion host).
| البعد | استخدام الجذر دائمًا | مبدأ أقل الامتيازات |
|---|---|---|
| خطر إجراء عمليات غير مقصودة | مرتفع للغاية (يمكن حذف أي جدول) | منخفض للغاية (أذونات مقيدة) |
| التعافي من الكوارث | صعب (تأثير واسع النطاق) | سهل (تأثير محدود) |
| سجل التدقيق | تعذر تحديد هوية المشغل | التتبع حسب المستخدم |
| مستوى الأمان | ❌ | ✅ |
3. إدارة المستخدمين
▶ مثال: إنشاء مستخدم
-- Create a Local User
CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'DevPass123!';
-- Create a user who is allowed to connect remotely
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'RemotePass123!';
-- Create a user allowed to connect from a specific IP
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'AppPass123!';
▶ مثال: تعديل وحذف المستخدمين
-- Change Password
ALTER USER 'dev_user'@'localhost' IDENTIFIED BY 'NewPass123!';
-- Delete User
DROP USER 'dev_user'@'localhost';
-- View All Users
SELECT user, host FROM mysql.user;
4. تفويض GRANT
▶ مثال: إدارة الأذونات
-- Grant All Privileges (Administrator)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
-- Grant Permissions to a Specific Database
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'dev_user'@'localhost';
-- Grant Permissions on a Specific Table
GRANT SELECT ON mydb.users TO 'readonly'@'localhost';
-- Grant Permissions on Specific Columns
GRANT SELECT (username, email) ON mydb.users TO 'limited'@'localhost';
-- Refresh Permissions
FLUSH PRIVILEGES;
5. مستويات الأذونات
| المستوى | الصيغة | الوصف |
|---|---|---|
| عالمي | *.* |
جميع الجداول في جميع قواعد البيانات |
| قاعدة البيانات | mydb.* |
جميع الجداول الموجودة في قاعدة بيانات معينة |
| جدول | mydb.users |
جدول محدد |
| عمود | mydb.users(email) |
عمود محدد |
6. REVOKE: إلغاء الأذونات
-- Revoke All Permissions
REVOKE ALL PRIVILEGES ON *.* FROM 'dev_user'@'localhost';
-- Revoke Specific Permissions
REVOKE INSERT, DELETE ON mydb.* FROM 'dev_user'@'localhost';
FLUSH PRIVILEGES;
7. أذونات العرض
-- View Current User Permissions
SHOW GRANTS;
-- View a Specific User's Permissions
SHOW GRANTS FOR 'dev_user'@'localhost';
8. إدارة المستخدمين (MySQL 8.0+)
-- Create a role
CREATE ROLE 'app_read', 'app_write';
-- Grant privileges to roles
GRANT SELECT ON mydb.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON mydb.* TO 'app_write';
-- Assign Roles to Users
GRANT 'app_read', 'app_write' TO 'dev_user'@'localhost';
-- Activate role
SET DEFAULT ROLE ALL TO 'dev_user'@'localhost';
❓ أسئلة شائعة
'user'@'localhost' و'user'@'%'؟FLUSH PRIVILEGES بعد GRANT؟GRANT مباشرةً. ولا يلزم إلا عند تعديل جدول mysql.user مباشرةً.📖 ملخص
- إنشاء مستخدم: ينشئ مستخدمًا، مع تحديد المضيف وكلمة المرور
- GRANT تمنح الإذن؛ REVOKE تلغي الإذن
- مستوى الأذونات: عام → قاعدة البيانات → الجدول → العمود
- الأدوار (8.0+) أذونات إدارة الدُفعات
- FLUSH PRIVILEGES تُجدد الأذونات
📝 تمارين
-
سؤال أساسي (مستوى الصعوبة: ⭐): أنشئ مستخدمًا للقراءة فقط لا يمكنه سوى الاستعلام عن قاعدة البيانات
mydb. -
تمرين متقدم (مستوى الصعوبة: ⭐⭐): قم بإنشاء دور وقم بتعيينه لمستخدم.
-
سؤال التحدي (مستوى الصعوبة: ⭐⭐⭐): صمم نظام أذونات يمنح المطورين حق الوصول للقراءة والكتابة، ويمنح موظفي العمليات حق الوصول للقراءة فقط، ويمنح المسؤولين حق الوصول الكامل.