MySQL: إدارة مستخدمي MySQL والتحكم في الأذونات

آخر تحديث: 2026-08-26

يُعد التحكم في الوصول أساس أمن قواعد البيانات — فلا يمكن للمستخدمين المختلفين الوصول إلا إلى البيانات التي تم التصريح لهم بالوصول إليها.

يتناول هذا الدرس إدارة المستخدمين والأذونات.

100%
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. ما ستتعلمه



2. قصة حقيقية

(1) المشكلة: خطأ في الحساب الرئيسي يؤدي إلى كارثة كبرى

كان فريق التطوير يتصل دائمًا بقاعدة بيانات الإنتاج باستخدام حساب «root» — فقد كان ذلك أمرًا مريحًا، ولكن في أحد الأيام، نفذ أحد المطورين عن غير قصد الأمر DROP TABLE users، فتلاشت بيانات 3 ملايين مستخدم في لحظة. استغرق استعادة النسخة الاحتياطية أربع ساعات، وخلال تلك الفترة توقفت الخدمة تمامًا، مما أدى إلى خسائر مباشرة تجاوزت المليون.

(2) حلول لنظام الأذونات

تطبيق مبدأ «أقل امتياز ممكن»: منح كل دور الأذونات الضرورية فقط. يُمنح المطورون حق الوصول للقراءة فقط بالإضافة إلى حق الوصول للقراءة/الكتابة إلى مستودعات التطوير؛ ويتمتع موظفو العمليات بأذونات إدارية لمستودعات محددة؛ ويقتصر الوصول إلى حساب الجذر على مسؤولي قواعد البيانات (DBAs) الذين يستخدمون المضيف الحصين (bastion host).

البعد استخدام الجذر دائمًا مبدأ أقل الامتيازات
خطر إجراء عمليات غير مقصودة مرتفع للغاية (يمكن حذف أي جدول) منخفض للغاية (أذونات مقيدة)
التعافي من الكوارث صعب (تأثير واسع النطاق) سهل (تأثير محدود)
سجل التدقيق تعذر تحديد هوية المشغل التتبع حسب المستخدم
مستوى الأمان


3. إدارة المستخدمين

▶ مثال: إنشاء مستخدم

SQL
-- 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!';
▶ جرّب الكود

▶ مثال: تعديل وحذف المستخدمين

SQL
-- 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

▶ مثال: إدارة الأذونات

SQL
-- 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: إلغاء الأذونات

SQL
-- 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. أذونات العرض

SQL
-- View Current User Permissions
SHOW GRANTS;

-- View a Specific User's Permissions
SHOW GRANTS FOR 'dev_user'@'localhost';


8. إدارة المستخدمين (MySQL 8.0+)

SQL
-- 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'@'%'؟
ج يسمح "localhost" بالاتصالات المحلية فقط، بينما يسمح "%" بالاتصالات من أي مضيف.
س هل يلزم وجود عبارة FLUSH PRIVILEGES بعد GRANT؟
ج لا يلزم ذلك عند استخدام GRANT مباشرةً. ولا يلزم إلا عند تعديل جدول mysql.user مباشرةً.
س ماذا أفعل إذا نسيت كلمة مرور الجذر؟
ج قم بتشغيل النظام متجاوزًا عملية التحقق من الصلاحيات، ثم قم بتغيير كلمة المرور، ثم أعد تشغيل النظام.
س ما المقصود بـ «WITH GRANT OPTION»؟
ج تتيح هذه الخيار للمستخدم منح امتيازاته الخاصة للآخرين. وينبغي توخي الحذر عند منح هذا الامتياز لمنع انتشار الامتيازات.
س ما الفرق بين الدور والمستخدم؟
ج الدور هو مجموعة من الأذونات؛ ولا يمكن استخدامه لتسجيل الدخول مباشرةً. بعد أن يقوم المستخدم بتسجيل الدخول، يستخدم الأمر SET ROLE لتفعيل الدور.

📖 ملخص


📝 تمارين

  1. سؤال أساسي (مستوى الصعوبة: ⭐): أنشئ مستخدمًا للقراءة فقط لا يمكنه سوى الاستعلام عن قاعدة البيانات mydb.

  2. تمرين متقدم (مستوى الصعوبة: ⭐⭐): قم بإنشاء دور وقم بتعيينه لمستخدم.

  3. سؤال التحدي (مستوى الصعوبة: ⭐⭐⭐): صمم نظام أذونات يمنح المطورين حق الوصول للقراءة والكتابة، ويمنح موظفي العمليات حق الوصول للقراءة فقط، ويمنح المسؤولين حق الوصول الكامل.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%