إدارة المستخدمين اليتامى في SQL Server أمر بالغ الأهمية لأمان قاعدة البيانات وإدارتها. يحدث المستخدمون اليتامى عندما يوجد مستخدم قاعدة بيانات دون تسجيل دخول مطابق في قاعدة بيانات الماستر. يمكن أن تؤدي هذه الفجوة إلى انقطاع الوصول وتسبب ثغرات أمنية محتملة. في هذه المقالة، سنستكشف ما هو المستخدمون اليتامى، وكيفية اكتشافهم، وطرق حلهم، بما في ذلك أمثلة وسيناريوهات محدثة.
خلفية
لت الاتصال بقاعدة بيانات SQL Server، يجب أن يكون لدى المستخدم تسجيل دخول صالح في قاعدة بيانات الماستر. يقوم هذا التسجيل بالمصادقة على المستخدم ويرتبط بمستخدم قاعدة البيانات للتفويض. يتم الحفاظ على هذا الربط باستخدام معرف الأمان (SID)، مما يضمن أن المستخدمين في قاعدة البيانات وتسجيلات الدخول في الخادم مرتبطة بشكل صحيح.
تتضمن الاستثناءات لقاعدة ربط تسجيل الدخول بالمستخدم:
- مستخدمو قاعدة البيانات المحتواة: يتم المصادقة عليهم على مستوى قاعدة البيانات، مما يلغي الاعتماد على تسجيلات الدخول في الخادم. تعزز هذه المستخدمون قابلية نقل قاعدة البيانات ولكنها تتطلب إعادة إنشاء منفصلة لكل قاعدة بيانات.
- حسابات الضيف: مفعلة بشكل افتراضي، تسمح بالوصول للمستخدمين دون ربط صريح ولكنها عادة ما تُحذر لأسباب أمنية.
- عضويات مجموعة Microsoft Windows: يمكن لأعضاء مجموعة Windows الوصول إلى قواعد البيانات إذا تمت إضافة المجموعة كمستخدمين.
يصبح مستخدم قاعدة البيانات يتيمًا عندما:
- يتم حذف تسجيل الدخول المقابل.
- يتم ترحيل قاعدة البيانات أو استعادتها دون تسجيلات الدخول المرتبطة.
- خريطة SID بين المستخدم وتسجيل الدخول غير صحيحة.
ما هم المستخدمون اليتامى؟
يحدث المستخدم اليتيم عندما:
- يوجد مستخدم قاعدة البيانات، لكن تسجيل الدخول المقابل في قاعدة بيانات الماستر غير موجود.
- يختلف SID مستخدم قاعدة البيانات عن SID تسجيل الدخول.
تؤدي هذه السيناريوهات إلى تعطيل المصادقة والتفويض، مما يؤدي إلى أخطاء أو وصول مقيد.
كشف المستخدمين اليتامى
لـ SQL Server
استخدم الاستعلام التالي لتحديد المستخدمين اليتامى:
SELECT dp.type_desc, dp.sid, dp.name AS user_name
FROM sys.database_principals AS dp
LEFT JOIN sys.server_principals AS sp
ON dp.sid = sp.sid
WHERE sp.sid IS NULL
AND dp.authentication_type_desc = 'INSTANCE';
لـ Azure SQL Database أو Synapse Analytics
1. استرجع SIDs لتسجيلات الدخول في قاعدة بيانات الماستر:
SELECT sid
FROM sys.sql_logins
WHERE type = 'S';
2. استرجع SIDs للمستخدمين في قاعدة البيانات المستهدفة:
SELECT name, sid, principal_id
FROM sys.database_principals
WHERE type = 'S'
AND name NOT IN ('guest', 'INFORMATION_SCHEMA', 'sys')
AND authentication_type_desc = 'INSTANCE';
3. قارن القوائم لتحديد الاختلافات.
حل المستخدمين اليتامى
1. إعادة إنشاء تسجيل الدخول المفقود مع SID
إذا تم حذف تسجيل الدخول:
CREATE LOGIN <login_name>
WITH PASSWORD = '<use_a_strong_password_here>',
SID = <SID>;
2. ربط مستخدم يتيم بتسجيل دخول موجود
إذا كان تسجيل الدخول موجودًا ولكنه غير مرتبط:
ALTER USER <user_name> WITH LOGIN = <login_name>;
3. تغيير كلمة مرور المستخدم
بعد إعادة إنشاء تسجيل الدخول، قم بتحديث كلمة مروره:
ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
باستخدام sp_FindOrphanedUser
الإجراء المخزن sp_FindOrphanedUser
هو أداة قوية لكشف وحل مشكلة المستخدمين اليتامى. يوفر:
- قائمة بالمستخدمين اليتامى.
- نصوص تم إنشاؤها تلقائيًا للإصلاحات.
- تفاصيل المخططات المملوكة للمستخدمين الأيتام.
احصل على رمز الحزمة من sp_FindOrphanedUser.
تشغيل الإجراء
التنفيذ الافتراضي:
EXEC sp_FindOrphanedUser;
لقاعدة بيانات محددة:
EXEC sp_FindOrphanedUser @DatabaseName = '<DatabaseName>';
أمثلة على سيناريوهات المستخدم الأيتام
مثال 1: مستخدم بدون تسجيل دخول
السيناريو
يتم حذف تسجيل الدخول، تاركًا مستخدم قاعدة البيانات يتيمًا.
- اكتشف المستخدم اليتيم:
MS SQL
EXEC sp_FindOrphanedUser;
- إعادة إنشاء تسجيل الدخول:
MS SQL
إنشاء تسجيل دخول [User1] مع كلمة المرور = 'SecurePassword123';
استخدم [ExampleDB];
تعديل المستخدم [User1] مع تسجيل الدخول = [User1];
مثال ٢: عدم تطابق SID
السيناريو
لا يتطابق SID تسجيل الدخول مع SID المستخدم.
- اكتشف التباين:
MS SQL
EXEC sp_FindOrphanedUser @DatabaseName = 'ExampleDB';
- تصحيح تعيين SID:
MS SQL
استخدام [ExampleDB];
تنفيذ sp_change_users_login 'UPDATE_ONE', 'User2', 'User2';
مثال ٣: مستخدم مهجور يمتلك مخططًا
السيناريو
يمنع المستخدم المهجور حذف المخطط.
- كشف ملكية المخطط:
MS SQL
EXEC sp_FindOrphanedUser @DatabaseName = 'ExampleDB';
- إعادة تعيين ملكية المخطط:
MS SQL
استخدم [ExampleDB];
تغيير التفويض على المخطط::[User3Schema] إلى [dbo];
حذف المستخدم [User3];
أفضل الممارسات
- استخدم مستخدمي قاعدة بيانات محصورة: تجنب الاعتماد على تسجيلات دخول الخادم.
- مزامنة تسجيلات الدخول: قم دائمًا بترحيل أو استعادة تسجيلات الدخول خلال ترحيل قواعد البيانات.
- تدقيقات منتظمة: تحقق دوريًا من المستخدمين اليتامى للحفاظ على الأمان.
الخاتمة
يضمن إدارة المستخدمين اليتامى أمان قاعدة البيانات وكفاءة العمليات. من خلال استخدام الاستعلامات والأدوات مثل sp_FindOrphanedUser
، يمكنك تحديد المشكلات وحلها بسرعة، مما يحافظ على الوصول السلس للمستخدمين الشرعيين. يمكن أن تساعد تبني أفضل الممارسات مثل المستخدمين المحصورين والتدقيقات الدورية في منع مثل هذه المشاكل في المستقبل.
Source:
https://dzone.com/articles/managing-orphaned-users-in-sql-server