الدليل الشامل لمنح الأذونات على جميع الجداول الخاصة بالمستخدمين في خادم 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 قوي يمنح الأذونات لدور قاعدة بيانات على جميع الجداول الخاصة بالمستخدمين بطريقة مباشرة. هذه الطريقة لا تساعد فقط في تبسيط سير عملك ولكنها أيضًا تضمن أن تبقى أذوناتك دائمًا محدثة دون تدخل يدوي. في المرة القادمة التي تضيف فيها جدولًا جديدًا إلى قاعدة البيانات الخاصة بك، فقط قم بتشغيل الإجراء المخزن مرة أخرى، وستكون جاهزًا للبدء.

ترميز سعيد!