#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;
А затем, конечно, назначьте разрешения этому пользователю по мере необходимости.