في هذا الدرس 6تصفّح المواضيع
على خلاف الأنظمة التي تكتفي باسم المستخدم وحده، يعرّف خادم MySQL 8 هوية كل حساب كزوج متلازم يتكون من اسم المستخدم واسم المضيف بالصيغة القياسية 'user_name'@'host_name'. ولهذا فإن الحساب 'shop_app'@'localhost' والحساب 'shop_app'@'10.0.1.25' يُعدان حسابين منفصلين تماماً في جدول النظام mysql.user:
'user'@'localhost': يطابق الاتصالات المحلية الصادرة من نفس الخادم فقط.'user'@'10.0.1.%': يستخدم رمز المطابقة%لتقييد الاتصال بخوادم التطبيق الواقعة ضمن الشبكة الفرعية الداخلية10.0.1.xحصراً.'user'@'%': يسمح بالاتصال من أي عنوان IP (شائع في بيئات الحاويات السحابية ويجب حمايته بجدار ناري وشبكة خاصة).SELECT USER(), CURRENT_USER();: تعرض دالةUSER()الهوية التي أرسلها العميل عند الاتصال، بينما تعرضCURRENT_USER()الحساب الفعلي المسجل في جدول الصلاحيات الذي طابق الجلسة.
+--------------------+--------------------+
| client_connection | matched_account |
+--------------------+--------------------+
| root@localhost | root@localhost |
+--------------------+--------------------+SELECT USER() AS client_connection,
CURRENT_USER() AS matched_account;
SELECT User, Host, plugin, account_locked
FROM mysql.user
ORDER BY User, Host;
يُحظر هندسياً وأمنياً ربط تطبيقات الويب أو الخوادم الخلفية بحساب المدير العام 'root'؛ بل يجب إنشاء حساب مخصص لكل خدمة عبر الأمر القياسي CREATE USER:
CREATE USER IF NOT EXISTS 'shop_app'@'10.0.1.%': ينشئ الحساب إذا لم يكن موجوداً مسبقاً، مما يمنع توقف سكربتات الإعداد الآلي بالخطأ رقم1396.IDENTIFIED BY 'Str0ng#AppKey2026!': يمرر كلمة المرور إلى محرك التشفير الافتراضي في الخادم ليحفظ بصمتها المشفرة غير القابلة للعكس داخل العمودauthentication_string.- حساب جديد بلا صلاحيات افتراضية: يُنشأ الحساب الجديد في MySQL 8 بصلاحية الاتصال فقط (
USAGE)، أي أنه يستطيع تسجيل الدخول ولكنه لا يملك صلاحية قراءة أو تعديل أي جدول حتى تُمنح له الصلاحيات صراحةً (كما سنتعلم في الدرس القادم). - فصل الحسابات حسب الوظيفة: خصص حساباً مستقلاً لتطبيق الويب (
'shop_app') وحساباً منفصلاً للتقارير ('report_reader').
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)CREATE USER IF NOT EXISTS 'shop_app'@'10.0.1.%'
IDENTIFIED BY 'Str0ng#AppKey2026!';
CREATE USER IF NOT EXISTS 'report_reader'@'localhost'
IDENTIFIED BY 'R3adOnly#Pass99!';
محاكي إدارة حسابات المستخدمين والمصادقة في MySQL 8
يعتمد خادم MySQL 8.0 و8.4 إضافة المصادقة القياسية الحديثة caching_sha2_password بدلاً من الإضافة القديمة mysql_native_password التي كانت تعتمد على خوارزمية SHA-1 الضعيفة:
caching_sha2_password: تطبق خوارزمية التجزئة القوية SHA-256 مع آلاف الدورات لحماية بصمة كلمة المرور في جدولmysql.user، وتدمج معها ذاكرة تخزين مؤقت داخل الخادم لتسريع عمليات الاتصال المتكررة في أجزاء من المللي ثانية.IDENTIFIED WITH caching_sha2_password BY '...': يحدد صراحةً ربط الحساب ببروتوكول المصادقة القياسي الحديث.- مصادقة التحدي والاستجابة الآمنة: لا تُرسل كلمة المرور كنص صريح عبر الشبكة؛ بل يتحقق الخادم منها عبر بروتوكول التحدي والاستجابة المشفر أو عبر قناة TLS الآمنة.
SHOW VARIABLES LIKE 'default_authentication_plugin': يفحص إضافة المصادقة الافتراضية المعتمدة في الخادم.
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+SHOW VARIABLES LIKE 'default_authentication_plugin';
CREATE USER IF NOT EXISTS 'api_worker'@'127.0.0.1'
IDENTIFIED WITH caching_sha2_password
BY 'Sha2#SecureToken88!';
تتطلب الإدارة الأمنية الاحترافية لقواعد البيانات تدوير كلمات المرور دورياً وقفل الحسابات المشبوهة أو الخاملة فوراً دون حذفها، وذلك عبر الأمر القياسي ALTER USER:
ALTER USER 'shop_app'@'10.0.1.%' IDENTIFIED BY '...': يحدّث كلمة المرور فوراً في ذاكرة الخادم وجدول النظام دون الحاجة لإعادة تشغيل MySQL.PASSWORD EXPIRE INTERVAL 90 DAY: يفرض سياسة انتهاء صلاحية كلمة المرور كل 90 يوماً لحسابات الموظفين والمحللين (مع إبقاء حسابات تطبيقات الخادم الآلية على الوضعPASSWORD EXPIRE NEVERلمنع توقف الموقع فجأة).ALTER USER ... ACCOUNT LOCK;: يقفل الحساب فوراً ويمنع أي تسجيل دخول جديد بالخطأ رقم3118مع الاحتفاظ بجميع إعداداته لسجل المراجعة.ALTER USER ... ACCOUNT UNLOCK;: يعيد فتح الحساب المقفول بأمان عند انتهاء الفحص.
ALTER USER 'shop_app'@'10.0.1.%'
IDENTIFIED BY 'N3w#RotatedKey2026!'
PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'report_reader'@'localhost' ACCOUNT LOCK;
ALTER USER 'report_reader'@'localhost' ACCOUNT UNLOCK;
احرص على مراجعة جدول mysql.user دورياً لرصد أي حسابات مهملة أو مضيفات مفتوحة، واحذف الحسابات التي انتهت الحاجة إليها عبر الأمر القياسي DROP USER:
SELECT User, Host, account_locked, password_expired FROM mysql.user: يستعرض حالة القفل وصلاحية كلمات المرور لجميع الحسابات المسجلة.RENAME USER 'old'@'host' TO 'new'@'host': يغيّر اسم المستخدم أو المضيف مع الحفاظ الكامل على إعداداته.DROP USER IF EXISTS 'api_worker'@'127.0.0.1';: يحذف الحساب نهائياً من جداول النظام ويمسح سجلاته من الذاكرة النشطة في خطوة ذرية واحدة.- تحذير من التعديل اليدوي لجدول النظام: لا تستخدم أبداً أوامر
DELETE FROM mysql.userاليدوية، بل التزم دائماً بأوامرCREATE USERوALTER USERوDROP USERلتحديث ذاكرة الخادم تلقائياً.
+---------------+-----------+----------------+------------------+
| User | Host | account_locked | password_expired |
+---------------+-----------+----------------+------------------+
| report_reader | localhost | N | N |
| shop_app | 10.0.1.% | N | N |
+---------------+-----------+----------------+------------------+SELECT User, Host, account_locked, password_expired
FROM mysql.user
WHERE User IN ('shop_app', 'report_reader', 'api_worker');
DROP USER IF EXISTS 'api_worker'@'127.0.0.1';
يلخص الجدول المرجعي التالي أوامر إدارة حسابات المستخدمين والمصادقة في MySQL 8:
| العملية الإدارية | الصياغة القياسية في MySQL 8 | الهدف الأمني والعملي |
|---|---|---|
| إنشاء حساب | CREATE USER IF NOT EXISTS 'u'@'host' IDENTIFIED BY 'pass'; | تخصيص هوية مستقلة مقيدة بالمضيف |
| تدوير كلمة المرور | ALTER USER 'u'@'host' IDENTIFIED BY 'new_pass'; | تحديث بصمة SHA-256 فوراً دون إيقاف الخادم |
| كلمة المرور المزدوجة | ALTER USER 'u'@'host' IDENTIFIED BY 'new' RETAIN CURRENT PASSWORD; | تدوير كلمة المرور دون توقف خوادم التطبيق |
| قفل / فتح الحساب | ALTER USER 'u'@'host' ACCOUNT LOCK / UNLOCK; | تعليق أو استعادة الدخول لحظياً |
| حذف الحساب | DROP USER IF EXISTS 'u'@'host'; | إزالة الحسابات المنتهية من النظام بأمان |
ملخص الدرس: تعلمت في هذا الدرس كيف يعرّف MySQL 8 هوية المستخدم والمضيف معاً، وكيفية إنشاء الحسابات بأمر CREATE USER، ومصادقة caching_sha2_password، وتدوير كلمات المرور وقفل الحسابات وحذفها.
الخطوة التالية والدرس القادم: انتقل إلى الدرس التالي لتعلّم منح وسحب الصلاحيات والأدوار عبر GRANT وREVOKE ومبدأ أقل الصلاحيات.
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
يشكّل الجمع بين تحديد عنوان المضيف وأوامر CREATE USER ومصادقة caching_sha2_password وقفل الحسابات خط الدفاع الأول عن خادم MySQL 8. الخطوة التالية: انتقل الآن إلى درس «إدارة الصلاحيات والأدوار عبر GRANT و REVOKE ومبدأ أقل الصلاحيات في MySQL».
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 User Accounts حسابات المستخدمين
- تعلّم إدارة حسابات المستخدمين والمصادقة في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
- للمراجعة
- 02 User and Host Identity Pair هوية المستخدم والمضيف معاً
- المفهوم الهندسي الأساسي والصياغة التطبيقية لقسم هوية المستخدم والمضيف معاً في خادم MySQL 8.4.
- للمراجعة
- 03 Creating Accounts with CREATE USER إنشاء الحساب بـ CREATE USER
- المفهوم الهندسي الأساسي والصياغة التطبيقية لقسم إنشاء الحساب بـ CREATE USER في خادم MySQL 8.4.
- للمراجعة
- 04 Modern caching sha2 Authentication مصادقة التشفير القياسية الحديثة
- المفهوم الهندسي الأساسي والصياغة التطبيقية لقسم مصادقة التشفير القياسية الحديثة في خادم MySQL 8.4.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 SHA-256 SHA-256
- Secure Hash Algorithm 256-bit
- خوارزمية التجزئة التشفيرية بطول 256 بت المعتمدة في إضافة المصادقة الافتراضية caching_sha2_password في MySQL 8.
- للمراجعة
- 02 TLS TLS
- Transport Layer Security
- بروتوكول أمان طبقة النقل المشفر الذي يحمي مصادقة المستخدمين والبيانات المنقولة بين العميل وخادم MySQL.
- للمراجعة
- 03 CIDR CIDR
- Classless Inter-Domain Routing
- تدوين الشبكات الفرعية الذي يُمثَّل في حقل Host داخل MySQL لتقييد الاتصال بنطاق عناوين IP محدد.
- للمراجعة
- 04 DBA DBA
- Database Administrator
- مدير قواعد البيانات المسؤول عن إدارة الحسابات وسياسات الأمان والنسخ الاحتياطي وكفاءة الخادم.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ جمل SQL الواردة في قسم هوية المستخدم والمضيف معاً داخل بيئة MySQL 8 المحلية وتحقق من المخرجات.
-
جرّب الحالات الثلاث داخل محاكي إدارة حسابات المستخدمين والمصادقة في MySQL 8 في قسم إنشاء الحساب بـ CREATE USER وقارن سلوك المحرك.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي6 أسئلة تنتظرك +
كيف يحدد خادم MySQL 8 هوية حساب المستخدم بشكل فريد داخل جدول النظام mysql.user؟
يجمع MySQL بين اسم المستخدم واسم المضيف معاً في زوج واحد بالصيغة 'user_name'@'host_name'.
في خادم MySQL 8، يُعامل الحسابان 'shop_app'@'localhost' و 'shop_app'@'10.0.1.50' كحسابين مستقلين تماماً.
صواب؛ اختلاف جزء المضيف (Host) يجعل كلاً منهما حساباً منفصلاً في جدول mysql.user.
ما إضافة المصادقة الافتراضية المعتمدة في خادم MySQL 8.0 و 8.4؟
تُعد إضافة caching_sha2_password هي المصادقة الافتراضية القياسية في MySQL 8.
أي أمر SQL يوقف قدرة الحساب على تسجيل الدخول مؤقتاً دون حذف الحساب من قاعدة البيانات؟
يقوم الأمر ALTER USER ... ACCOUNT LOCK بقفل الحساب فوراً مع الاحتفاظ ببياناته.
أي أمر SQL يحذف حساب مستخدم انتهت الحاجة إليه بأمان دون خطأ إذا لم يكن موجوداً؟
يحذف الأمر DROP USER IF EXISTS الحساب وبيانات مصادقته بأمان.
يحصل المستخدم الجديد فور إنشائه بالأمر CREATE USER على صلاحيات كاملة على جميع قواعد البيانات تلقائياً.
خطأ؛ يُنشأ الحساب الجديد بصلاحية USAGE فقط (أي تسجيل الدخول دون أي صلاحية قراءة أو تعديل على الجداول).