البرنامج التعليمي: الاتصال بـ SQL Database من .NET App Service دون بيانات سرية باستخدام الهوية المُدارة

توفر App Service خدمة استضافة ويب قابلة للتطوير وذاتية التصحيح في Azure. كما توفر الهوية المدارة لتطبيقك، وهو حل تحويل المفتاح لتأمين الوصول إلى قاعدة بيانات Azure SQL وخدمات Azure الأخرى. تجعل الهويات المدارة في App Service تطبيقك أكثر أمانًا عن طريق إزالة الأسرار من تطبيقك، مثل بيانات الاعتماد في سلاسل الاتصال. في هذا البرنامج التعليمي، يمكنك إضافة هوية مدارة إلى نموذج تطبيق الويب الذي أنشأته في أحد البرامج التعليمية التالية:

عند الانتهاء، سيتصل تطبيق العينة بقاعدة بيانات SQL بشكل آمن دون الحاجة إلى اسم المستخدم وكلمات المرور.

مخطط هندسة سيناريو البرنامج التعليمي.

إشعار

الخطوات المغطاة بهذا البرنامج التعليمي تدعم الإصدارات التالية:

  • NET Framework 4.8 وما فوق
  • NET 6.0 وما فوق

للحصول على إرشادات بشأن Azure Database for MySQL أو Azure Database for PostgreSQL في أطر عمل اللغات الأخرى (Node.js وPython وJava)، راجع البرنامج التعليمي: الاتصال بقواعد بيانات Azure من App Service دون بيانات سرية باستخدام الهوية المُدارة.

سوف تتعلم ما يلي:

  • تمكين هويات مُدارة
  • منح قاعدة بيانات SQL الوصول إلى الهوية المدارة
  • تكوين Entity Framework لاستخدام مصادقة Microsoft Entra مع قاعدة بيانات SQL
  • الاتصال إلى قاعدة بيانات SQL من Visual Studio باستخدام مصادقة Microsoft Entra

إشعار

تختلف مصادقة Microsoft Entra عنمصادقة Windows المتكاملة في Active Directory محلي (AD DS). يستخدم AD DS ومعرف Microsoft Entra بروتوكولات مصادقة مختلفة تماما. لمزيد من المعلومات، راجع وثائق Microsoft Entra Domain Services.

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

المتطلبات الأساسية

تستمر هذه المقالة من حيث توقفت في أي من الدروس التالية:

إذا لم تكن قد فعلت ذلك بالفعل، فاتبع أحد البرنامجين التعليميين أولًا. بدلاً من ذلك، يمكنك تكييف الخطوات لتطبيق .NET الخاص بك مع قاعدة بيانات SQL.

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

تحضير البيئة الخاصة بك لـAzure CLI.

1. منح حق الوصول إلى قاعدة البيانات إلى مستخدم Microsoft Entra

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

  1. إذا لم يكن لدى مستأجر Microsoft Entra مستخدم حتى الآن، فبادر بإنشاء مستخدم باتباع الخطوات الواردة في إضافة مستخدمين أو حذفهم باستخدام معرف Microsoft Entra.

  2. ابحث عن معرف الكائن لمستخدم Microsoft Entra باستخدام az ad user list واستبدل <user-principal-name>. يتم حفظ النتيجة لمتغير.

    $azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
    

    تلميح

    لمشاهدة قائمة بجميع أسماء المستخدمين الأساسية في معرف Microsoft Entra، قم بتشغيل az ad user list --query '[].userPrincipalName'.

  3. أضف مستخدم Microsoft Entra هذا كمسؤول Active Directory باستخدام az sql server ad-admin create الأمر في Cloud Shell. في الأمر التالي، استبدل <server-name> باسم الخادم (دون اللاحقة .database.windows.net ).

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

لمزيد من المعلومات حول إضافة مسؤول Active Directory، راجع توفير مسؤول Microsoft Entra للخادم الخاص بك

2. إعداد بيئة التطوير الخاصة بك

  1. تم دمج Visual Studio لنظام التشغيل Windows مع مصادقة Microsoft Entra. لتمكين التطوير وتصحيح الأخطاء في Visual Studio، أضف مستخدم Microsoft Entra في Visual Studio عن طريق تحديد حساب الملف>الإعدادات من القائمة، وحدد تسجيل الدخول أو إضافة.

  2. لتعيين مستخدم Microsoft Entra لمصادقة خدمة Azure، حدد خيارات الأدوات>من القائمة، ثم حدد تحديد حساب مصادقة>خدمة Azure. حدد مستخدم Microsoft Entra الذي أضفته وحدد موافق.

لمزيد من المعلومات حول إعداد بيئة التطوير الخاصة بك لمصادقة Microsoft Entra، راجع مكتبة عميل Azure Identity ل .NET.

أنت الآن جاهز لتطوير تطبيقك وتصحيحه باستخدام قاعدة بيانات SQL كواجهة خلفية، باستخدام مصادقة Microsoft Entra.

3. تعديل مشروعك

إشعار

لم يعد من المستحسن استخدام Microsoft.Azure.Services.AppAuthentication مع SDK Azure الجديد. يحل محله مكتبة عميل Azure Identity الجديدة المتوفرة لدى .NET وJava وTypeScript وPython وينبغي استخدامه لجميع التطويرات الجديدة. يمكن العثور على معلومات عن كيفية الترحيل إلى Azure Identityهنا: إرشادات ترحيل AppAuthentication إلى Azure.Identity.

تعتمد الخطوات التي تتبعها لمشروعك على ما إذا كنت تستخدم Entity Framework Core (افتراضيا ل ASP.NET Core) أو Entity Framework (افتراضيا ASP.NET).

  1. في Visual Studio، افتح وحدة تحكم مدير الحزم وأضف حزمة NuGet Microsoft.Data.SqlClient:

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. في البرنامج التعليمي لـ ASP.NET Core ولغة الاستعلامات المركبة Database، لم يتم استخدام سلسلة الاتصال MyDbConnection في appsettings.json على الإطلاق حتى الآن. تحصل كل من البيئة المحلية وبيئة Azure على سلاسل اتصال من متغيرات البيئة الخاصة بها من أجل الحفاظ على بيانات سرية الاتصال خارج الملف المصدر. ولكن الآن مع مصادقة Active Directory، لا مزيد من البيانات السرية. في appsettings.json، استبدل قيمة سلسلة الاتصال MyDbConnection بـ :

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    إشعار

    يمكن استخدام نوع المصادقة Active Directory Default على جهازك المحلي وفي Azure App Service. يحاول برنامج التشغيل الحصول على رمز مميز من معرف Microsoft Entra باستخدام وسائل مختلفة. إذا تم نشر التطبيق، فإنه يحصل على رمز مميز من الهوية المدارة المعينة من قبل النظام للتطبيق. يمكن أيضا المصادقة باستخدام هوية مدارة معينة من قبل المستخدم إذا قمت بتضمين: User Id=<client-id-of-user-assigned-managed-identity>; في سلسلة الاتصال. إذا كان التطبيق يعمل محلياً، فإنه يحاول الحصول على تعليمة برمجية مميزة من Visual Studio وVisual Studio Code وAzure CLI.

    هذا كل شيء تحتاج إليه للاتصال بقاعدة بيانات SQL. عند تتبع الأخطاء في Visual Studio، تستخدم التعليمات البرمجية مستخدم Microsoft Entra الذي قمت بتكوينه في 2. إعداد بيئة التطوير الخاصة بك. ستقوم بإعداد قاعدة بيانات SQL لاحقًا للسماح بالاتصال من الهوية المدارة لتطبيق App Service. تخزن DefaultAzureCredential الفئة الرمز المميز مؤقتا في الذاكرة وتسترده من معرف Microsoft Entra قبل انتهاء الصلاحية. لا تحتاج إلى أي تعليمات برمجية مخصصة لتحديث الرمز المميز.

  3. اكتب Ctrl+F5 لتشغيل التطبيق مرة أخرى. يتصل الآن نفس تطبيق CRUD في المستعرض الخاص بك بقاعدة بيانات Azure SQL مباشرة، باستخدام مصادقة Microsoft Entra. يتيح لك هذا الإعداد تشغيل عمليات ترحيل قاعدة البيانات من Visual Studio.

4. استخدام اتصال هوية مُدار

بعد ذلك، يمكنك تكوين التطبيق "App Service" للاتصال بقاعدة بيانات SQL مع هوية مدارة معينة من قبل النظام.

إشعار

بينما التعليمات في هذا المقطع هي للهوية المعينة من قبل النظام، يمكن استخدام هوية معينة من قبل المستخدم بنفس السهولة. لكي تفعل ذلك. ستحتاج إلى التغيير az webapp identity assign command لتعيين الهوية المطلوبة التي عينها المستخدم. ثم عند إنشاء المستخدم SQL تأكد من استخدام اسم مورد الهوية المعين من قبل المستخدم بدلاً من اسم الموقع.

تفعيل الهوية المدارة في التطبيق

لتمكين هوية مدارة لتطبيق Azure، استخدم أمر تعيين هوية تطبيق ويب az في Cloud Shell. في الأمر التالي، استبدل <app-name>.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

إشعار

لتمكين الهوية المُدارة لـ فتحة توزيع، أضِف --slot <slot-name>واستخدم اسم الفتحة في <slot-name>.

فيما يلي مثال على الإخراج:

{
  "additionalProperties": {},
  "principalId": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "type": "SystemAssigned"
}

تعيين أذونات للهوية المدارة

إشعار

إذا أردت، يمكنك إضافة الهوية إلى مجموعة Microsoft Entra، ثم منح قاعدة بيانات SQL حق الوصول إلى مجموعة Microsoft Entra بدلا من الهوية. على سبيل المثال، تضيف الأوامر التالية الهوية المُدارة من الخطوة السابقة إلى مجموعة جديدة تُسمى myAzureSQLDBAccessGroup:

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
  1. في Cloud Shell، قم بتسجيل الدخول إلى قاعدة بيانات SQL باستخدام الأمر SQLCMD. استبدل <اسم> الخادم باسم الخادم، <واسم> db باسم قاعدة البيانات الذي يستخدمه تطبيقك، واسم <مستخدم> aad وكلمة< مرور> aad ببيانات اعتماد مستخدم Microsoft Entra.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. في موجه SQL لقاعدة البيانات التي تريدها، قم بتشغيل الأوامر التالية لمنح الحد الأدنى من الأذونات التي يحتاجها تطبيقك. على سبيل المثال،

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

    <اسم> الهوية هو اسم الهوية المدارة في معرف Microsoft Entra. إذا تم تعيين النظام للهوية، يكون الاسم دائمًا هو نفس اسم تطبيق App Service. بالنسبة إلى فتحة التوزيع، يكون اسم الهوية المخصصة للنظام هو <app-name>/slots/<slot-name>. لمنح أذونات لمجموعة Microsoft Entra، استخدم اسم عرض المجموعة بدلا من ذلك (على سبيل المثال، myAzureSQLDBAccessGroup).

  3. اكتب EXIT للعودة إلى مطالبة Cloud Shell.

    إشعار

    الخدمات الخلفية للهويات المُدارة أيضاً تحتفظ بذاكرة تخزين للرمز المميز الذي يحدث الرمز المميز للمورد الهدف فقط عند انتهاء صلاحيته. إذا ارتكبت خطأ في تكوين أذونات قاعدة بيانات SQL وتحاول تعديل الأذونات بعد محاولة الحصول على رمز مميز مع التطبيق الخاص بك، فلن تحصل فعليًا على رمز مميز جديد مع الأذونات المحدثة حتى تنتهي صلاحية الرمز المميز المخزن مؤقتًا.

    إشعار

    معرف Microsoft Entra والهويات المدارة غير مدعومة ل SQL Server المحلي.

تعديل سلسلة الاتصال

تذكر أن نفس التغييرات التي أجريتها في Web.config أو appsettings.json تعمل مع الهوية المدارة، لذلك فإن الشيء الوحيد الذي يجب إجراؤه هو إزالة سلسلة الاتصال الموجودة في App Service، والتي أنشئها Visual Studio لتوزيع تطبيقك في المرة الأولى. استخدم الأمر التالي، ولكن استبدل <app-name> باسم التطبيق الخاص بك.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection

5. انشر التغييرات

كل ما تبقى الآن هو نشر التغييرات التي أجريتها على Azure.

  1. إذا كنت قادمًا من البرنامج التعليمي: إنشاء تطبيق ASP.NET في Azure مع قاعدة بيانات SQL، فبادر بنشر تغييراتك في Visual Studio. في مستكشف الحلول، انقر بزر الماوس الأيمن فوق مشروع DotNetAppSqlDb وحدد Publish.

    النشر من مستكشف الحلول

  2. في صفحة النشر، حدد Publish.

    هام

    تأكد من عدم تطابق اسم خدمة التطبيق مع أي App Registrations موجودة. سيؤدي ذلك إلى تعارضات بالمعرف الرئيسي.

عندما تعرض صفحة الويب الجديدة قائمة المهام، يتصل تطبيقك بقاعدة البيانات باستخدام الهوية المدارة.

تطبيق Azure بعد عمليات الترحيل الأولى من التعليمات البرمجية

يجب أن تكون قادرًا الآن على تحرير قائمة المهام كما كان من قبل.

تنظيف الموارد

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

az group delete --name myResourceGroup

ربما يستغرق الأمر بضع دقائق للتشغيل.

الخطوات التالية

ما تعلمته:

  • تمكين هويات مُدارة
  • منح قاعدة بيانات SQL الوصول إلى الهوية المدارة
  • تكوين Entity Framework لاستخدام مصادقة Microsoft Entra مع قاعدة بيانات SQL
  • الاتصال إلى قاعدة بيانات SQL من Visual Studio باستخدام مصادقة Microsoft Entra