Доступ к Azure SQL из веб-приложения с помощью EF Core, Docker и присвоенного системой удостоверения

#sql-server #azure #entity-framework #docker #.net-core

#sql-сервер #azure #entity-framework #docker #.net-ядро

Вопрос:

Я пытаюсь получить доступ к бессерверной базе данных Azure SQL из веб-приложения Azure, в котором запущен контейнер docker под Linux. Контейнер представляет собой веб-приложение .Net Core 3.1, использующее последнюю версию EF Core. Веб-приложение настроено на использование присвоенного системой удостоверения.

Для пользователя SQL я использую следующий PS-скрипт для получения SID, где идентификатор объекта — это идентификатор объекта, назначенный системой:

 $principal = Get-AzADServicePrincipal -ObjectId $objectId
 
foreach ($byte in $principal.ApplicationId.ToByteArray())
{
    $byteGuid  = [System.Strin&]::Format("{0:X2}", $byte)
}
 
$sid = "0x"   $byteGuid
  

Затем я создал пользователя с ролью db_owner в базе данных, используя SID, подобный этому…
'CREATE USER [AppUser] WITH DEFAULT_SCHEMA=[dbo], SID=' '$(AppSiD)' ' , TYPE = E' …аналогично процессу, описанному здесь:
https://blo&.bredvid.no/handlin&-azure-mana&ed-identity-access-to-azure-sql-in-an-azure-devops-pipeline-1e74e1beb10b

Я также обновил экземпляр EF, используя следующий метод:
https://learn.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi#modify-aspnet-core

Когда приложение пыталось получить доступ к базе данных, выдается следующее исключение:
Microsoft.Data.SqlClient.SqlException (0x80131904): Lo&in failed for user '<token-identified principal&&t;'.
РЕДАКТИРОВАТЬ Я не верю, что проблема вызвана пользователем SQL, поскольку ошибка возникает независимо от того, существует пользователь или нет.

Я бы предпочел исправить указанную выше ошибку, но если есть альтернативный способ подключения к БД без использования пользователя SQL, я был бы признателен за совет.

Спасибо

Редактировать
Подробнее о пользовательском процессе SQL, поскольку ссылка недоступна во время публикации

Комментарии:

1. не уверен, что вы подразумеваете под SID (и ссылка не работает), но вы должны были добавить пользователя SQL следующим образом: CREATE USER [<identity-name&&t;] FROM EXTERNAL PROVIDER;

2. Привет @silent, спасибо за ваш ответ. Я не могу добавить пользователя таким образом, поскольку он не подключен к AD: Principal 'AppUser' could not be created. Only connections established with Active Directory accounts can create other Active Directory users. я обновил вопрос дополнительной информацией

3. Я только что узнал, что ошибка возникает независимо от того, добавлен пользователь или нет

4. ну, если в вашей базе данных SQL не включен AAD, это с самого начала не сработает

5. Спасибо @silent, добавление пользователя с вашим оригинальным скриптом сработало. Если вы хотите добавить это в качестве ответа, я отмечу это как ответ. Приветствия

Ответ №1:

Сначала вам нужно сделать вашу базу данных SQL с поддержкой AAD. Затем вы можете создать пользователя для своего управляемого удостоверения следующим образом

 CREATE USER [<identity-name&&t;] FROM EXTERNAL PROVIDER;
  

А затем, конечно, назначьте разрешения этому пользователю по мере необходимости.