تمرين - التحكم فيمن يمكنه الوصول إلى قاعدة بياناتك

مكتمل

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

المصادقة

المصادقة هي عملية التحقق من الهوية. قد تكون هذه الهوية مستخدما أو خدمة تعمل على نظام أو نظام نفسه، مثل جهاز ظاهري. من خلال عملية المصادقة، يمكنك التأكد من أن الشخص أو النظام هو الشخص الذي يدعي أنه. تدعم قاعدة بيانات SQL نوعين من المصادقة: مصادقة SQL ومصادقة Microsoft Entra.

مصادقة SQL

يستخدم أسلوب مصادقة SQL اسم مستخدم وكلمة مرور. يمكن إنشاء حسابات المستخدمين في قاعدة البيانات الرئيسية ويمكن منحها أذونات في جميع قواعد البيانات على الخادم. يمكنك أيضا إنشاء مستخدمين في قاعدة البيانات نفسها، تسمى المستخدمين المضمنين، ومنحهم حق الوصول إلى قاعدة البيانات هذه فقط. عند إنشاء الخادم المنطقي لقاعدة البيانات الخاصة بك، قمت بتحديد تسجيل دخول مسؤول الخادم باستخدام اسم مستخدم وكلمة مرور. باستخدام بيانات الاعتماد هذه، يمكنك المصادقة على أي قاعدة بيانات على هذا الخادم كمالك قاعدة البيانات أو dbo.

مصادقة Microsoft Entra

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

التخويل

يشير التخويل إلى ما يمكن أن تفعله الهوية داخل قاعدة بيانات SQL Azure. يتم التحكم في هذا التخويل من خلال الأذونات الممنوحة مباشرة إلى حساب المستخدم وعضويات دور قاعدة البيانات. يتم استخدام دور قاعدة البيانات لتجميع الأذونات معا لتسهيل الإدارة. إضافة مستخدم إلى دور لمنح الأذونات التي يمتلكها الدور. يمكن أن تتضمن هذه الأذونات القدرة على تسجيل الدخول إلى قاعدة البيانات، والقدرة على قراءة جدول، والقدرة على إضافة أعمدة وإزالتها من قاعدة بيانات. وكأفضل ممارسة، ينبغي أن تمنح المستخدمين أقل الامتيازات اللازمة. عملية منح التخويل لكل من مستخدمي SQL وMicrosoft Entra هي نفسها.

في المثال هنا، حساب مسؤول الخادم الذي تتصل به هو عضو في دور db_owner، والذي لديه سلطة للقيام بأي شيء داخل قاعدة البيانات.

المصادقة والتخويل في الممارسة العملية

كأفضل ممارسة، ينبغي استخدام تطبيقك الحساب المخصص للمصادقة. بهذه الطريقة، يمكنك تحديد الأذونات الممنوحة للتطبيق وتقليل مخاطر أي نشاط ضار في حالة تعرض التعليمة البرمجية للتطبيق للهجوم عن طريق الحقن من خلال SQL. نوصي بإنشاء مستخدم قاعدة بيانات مضمن، مما يسمح لتطبيقك بالمصادقة مباشرة على قاعدة البيانات. لمزيد من المعلومات، راجع مستخدمي قاعدة البيانات المضمنين- جعل قاعدة بياناتك قابلة للوصول.

استخدم مصادقة Microsoft Entra لإدارة هويات مستخدمي قاعدة البيانات مركزيا وكبديل لمصادقة SQL Server.

ألق نظرة على كيفية إعداد مستخدم ومنحه حق الوصول إلى قاعدة بيانات. في هذه الحالة، يمكنك استخدام مصادقة SQL للمستخدم الخاص بك، ولكن ستكون العملية هي نفسها في الأساس إذا كنت تستخدم مصادقة Microsoft Entra.

إنشاء مستخدم قاعدة بيانات

إنشاء مستخدم جديد يمكنك استخدامه لمنح حق الوصول إليه.

  1. وبالعودة مرة أخرى إلى Cloud Shell، على جهازك الظاهري appServer، حاول الاتصال بقاعدة البيانات مرة أخرى بصفتك ADMINUSER.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. تشغيل الأمر التالي لإنشاء مستخدم جديد. هذا المستخدم هو مستخدم مضمن يسمح فقط بالوصول إلى قاعدة بيانات السوق . لا تتردد في ضبط كلمة المرور حسب الضرورة، ولكن تأكد من ذلك ولاحظه لأنك بحاجة إليها لخطوة مستقبلية.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

باستخدام بيانات الاعتماد هذه، يمكن للمستخدم المصادقة على قاعدة البيانات، ولكنه غير مصرح له بالوصول إلى أي بيانات. منح هذا المستخدم حق الوصول.

منح الأذونات لمستخدم

اجعل المستخدم عضوا في db_datareader الأدوار و db_datawriter ، مع منح حق الوصول للقراءة والكتابة إلى قاعدة البيانات، على التوالي. كما تريد منع هذا المستخدم من الوصول إلى جدول يحتوي على عناوين.

  1. أثناء الاتصال ب sqlcmd على appServer، قم بتشغيل T-SQL التالية لمنح db_datareader الأدوار و db_datawriter للمستخدم الذي قمت بإنشائه.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. يمكنك تضييق نطاق الوصول بشكل أكبر. يمكنك رفض وصول المستخدم إلى عناصر أخرى داخل قاعدة البيانات باستخدام عامل تشغيل DENY. تشغيل T-SQL التالية لرفض المستخدم ApplicationUser القدرة على تحديد البيانات من الجدول SalesLT.Address.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

الآن قم بتسجيل الدخول بصفته هذا المستخدم وألق نظرة على هذا التكوين أثناء العمل.

  1. بينما لا تزال في موجه الأوامر T-SQL، اكتب exit للخروج من جلستك.

  2. الآن قم بتسجيل الدخول مرة أخرى إلى قاعدة البيانات، ولكن كمستخدم قمت بإنشائه.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. قم بتشغيل الاستعلام التالي. يسحب هذا الاستعلام البيانات من جدول مصرح للمستخدم بالوصول إليه.

    SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer;
    GO
    

    يتعين عليك الحصول على قائمة العملاء.

    FirstName      LastName       EmailAddress                    Phone
    -------------- -------------- ------------------------------- ------------
    Orlando        Gee            orlando0@adventure-works.com    245-555-0173
    Keith          Harris         keith0@adventure-works.com      170-555-0127
    Donna          Carreras       donna0@adventure-works.com      279-555-0130
    Janet          Gates          janet1@adventure-works.com      710-555-0173
    ...
    
  4. تعرف على ما يحدث عند محاولة الاستعلام عن جدول لا يمكنك الوصول إليه.

    SELECT * FROM SalesLT.Address;
    GO
    

    يتعين أن تتلقى رسالة مفادها أنه لا يمكنك الوصول إلى هذا الجدول.

    Msg 229, Level 14, State 5, Server server-22942, Line 1
    The SELECT permission was denied on the object 'Address', database 'marketplace', schema 'SalesLT'.
    

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

من المهم تأمين قاعدة البيانات الخاصة بك بشكل صحيح، ومنح الوصول فقط عند الضرورة. توفر قاعدة بيانات AZURE SQL القدرة المضمنة للتحكم الكامل في القدرة على مصادقة وتخويل الهويات للوصول إلى البيانات في قاعدة البيانات الخاصة بك.