الدليل الشامل لمنح الأذونات على جميع الجداول الخاصة بالمستخدمين في خادم SQL
إدارة الأذونات في خادم SQL أمر بالغ الأهمية للحفاظ على سلامة وأمان قاعدة البيانات الخاصة بك. واحدة من السيناريوهات الشائعة تظهر عندما تحتاج إلى منح الأذونات على جميع الجداول الخاصة بالمستخدمين لدور قاعدة بيانات محدد بسلاسة. إذا كنت تشعر بالإحباط بسبب كتابة نصوص متعددة أو ضبط الأذونات يدويًا في كل مرة تضيف فيها جداول جديدة، فأنت لست وحدك. في هذا الدليل، سنستكشف كيفية إنشاء نص SQL متعدد الاستخدامات يسمح لك بمنح أذونات SELECT
، REFERENCES
، INSERT
، UPDATE
، و DELETE
لدور قاعدة بيانات على جميع الجداول الخاصة بالمستخدمين بسهولة.
التحدي: منح الأذونات بكفاءة
عادةً ما يقوم استوديو إدارة خادم SQL (SSMS) بإنشاء نصوص لكائنات قاعدة البيانات الفردية، مما قد يكون مملًا عند التعامل مع جداول متعددة. علاوة على ذلك، فإن تعديل الأذونات للجداول المضافة حديثًا يمكن أن يتحول بسرعة إلى مهمة تستغرق وقتًا طويلاً. ما تحتاجه هو نص “إطلاق ونسى” قوي يمكن تنفيذه لتطبيق الأذونات على جميع جداول المستخدمين دون الحاجة للرجوع إلى النص في كل مرة.
الحل: إجراء مخزن لمنح الأذونات
لأتمتة منح الأذونات بفعالية، يمكننا إنشاء إجراء مخزن يستخدم مؤشراً للتكرار عبر جميع كائنات المستخدم ومنح الأذونات المطلوبة. دعنا نلقي نظرة على العملية في خطوات قابلة للإدارة:
الخطوة 1: إنشاء الإجراء المخزن
ابدأ بتعريف الإجراء المخزن الخاص بك. استخدم الكود SQL التالي كنموذج:
IF EXISTS (
SELECT 1 FROM sysobjects
WHERE name = 'sp_grantastic'
AND type = 'P'
)
DROP PROCEDURE sp_grantastic
GO
CREATE PROCEDURE sp_grantastic
AS
DECLARE
@object_name VARCHAR(30),
@time VARCHAR(8),
@rights VARCHAR(20),
@role VARCHAR(20)
DECLARE c_objects CURSOR FOR
SELECT name
FROM sysobjects
WHERE type IN ('P', 'U', 'V')
FOR READ ONLY
BEGIN
SELECT @rights = 'ALL',
@role = 'PUBLIC'
OPEN c_objects
WHILE (1=1)
BEGIN
FETCH c_objects INTO @object_name
IF @@SQLSTATUS <> 0 BREAK
SELECT @time = CONVERT(VARCHAR, GetDate(), 108)
PRINT '[%1!] hitting up object %2!', @time, @object_name
EXECUTE('GRANT '+ @rights +' ON '+ @object_name+' TO '+@role)
END
PRINT '[%1!] fin!', @time
CLOSE c_objects
DEALLOCATE CURSOR c_objects
END
GO
GRANT ALL ON sp_grantastic TO PUBLIC
GO
الخطوة 2: فهم المكونات
- إعلان المؤشر: يتم إعداد المؤشر
c_objects
للتكرار عبر جميع جداول المستخدمين (U
)، وعرض البيانات (V
)، والإجراءات المخزنة (P
). - تنفيذ المنح: لكل كائن يتم جلبه عبر المؤشر، يقوم النظام بتنفيذ أمر
GRANT
، مما يطبق الحقوق المحددة على الدور المحدد. - معلومات الإخراج: تقوم الإجراء بطباعة السجلات التي تشير إلى وقت التنفيذ وأي كائنات تم منحها الأذونات.
الخطوة 3: تنفيذ الإجراء
بمجرد إنشاء الإجراء المخزن، يمكنك تنفيذه بأمر بسيط:
EXEC sp_grantastic
مع هذا الأمر فقط، ستحصل على أذونات الدور الخاص بقاعدة البيانات على جميع الجداول الخاصة بالمستخدمين بسلاسة.
الخاتمة
لقد تعلمت للتو كيفية إنشاء نص SQL قوي يمنح الأذونات لدور قاعدة بيانات على جميع الجداول الخاصة بالمستخدمين بطريقة مباشرة. هذه الطريقة لا تساعد فقط في تبسيط سير عملك ولكنها أيضًا تضمن أن تبقى أذوناتك دائمًا محدثة دون تدخل يدوي. في المرة القادمة التي تضيف فيها جدولًا جديدًا إلى قاعدة البيانات الخاصة بك، فقط قم بتشغيل الإجراء المخزن مرة أخرى، وستكون جاهزًا للبدء.
ترميز سعيد!