Подключите локальное основное приложение asp dotnet к Azure SQL, используя управляемую идентификацию с VSCode - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть веб-приложение, размещенное в Azure, у него включено управление идентификацией системы, у меня также есть база данных SQL Azure, к которой у меня разрешен доступ для этого идентификатора.

Когда оно выполняется в облаке, оноотлично работает, и он может запросить базу данных. Однако при локальном запуске я хочу иметь возможность отладки в облачной базе данных, но я хочу использовать тот же стиль подключения (так как мы отключили входы в SQL)

Я использую dotnet core 3.0 на macOS ииспользуя VSCode для IDE ... есть ли способ установить переменные окружения или что-то, чтобы разрешить моему локальному экземпляру подключаться? Я знаю, что вы можете сделать это в Windows и полнофункциональной Visual Studio, войдя в VS.

Я пробовал эти переменные среды, но, похоже, не работает (используя те же идентификаторы, что и приложение влазурь использует)

"IdentityObjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"IdentityTenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

1 Ответ

0 голосов
/ 08 ноября 2019

У меня это работает сейчас, вот как, для всех, кто сталкивается с этим постом позже.

Справочная информация о моей конфигурации: я добавил пользователя Azure AD в качестве администратора и дал этому пользователю доступв azure sql.

azureaduser=$(az ad user list --filter "userPrincipalName eq 'MYUSERNAME'" --query [].objectId --output tsv)
az sql server ad-admin create --resource-group MYRESOURCEGROUP --server-name MYSQLSERVER.database.windows.net --display-name ADMIN --object-id $azureaduser

Я создал группу Azure AD и добавил этого пользователя в группу. Я также добавил в эту группу принцип обслуживания (управляемое удостоверение) для веб-приложения Azure.

groupid=$(az ad group create --display-name sqlAccessGroup --mail-nickname sqlAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group RESOURCEGROUPNAME --name MYWEBAPPNAME --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid

Входя в систему под учетной записью этого администратора, я могу подключиться к базе данных через Azure Cloud Shell и запуститьsqlcmd

sqlcmd -S MYSERVER.database.windows.net -d MYDATABASE -U "MYUSER@MYSUBSCRIPTION.onmicrosoft.com" -P "MYPASSWORD" -G -l 30

Примечание. Я уже мог получить доступ к этой базе данных с помощью аутентификации SQL, но вы не можете добавлять группы / пользователей AD в базу данных, если вы не вошли в систему с учетной записью Azure AD (следовательно,создание учетной записи администратора ранее)

CREATE USER [sqlAccessGroup] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [sqlAccessGroup];
ALTER ROLE db_datawriter ADD MEMBER [sqlAccessGroup];
ALTER ROLE db_ddladmin ADD MEMBER [sqlAccessGroup];
GO

У меня также разрешен доступ служб Azure на моем SQL Azure, поэтому мне пришлось добавить исходящий IP-адрес веб-приложения в брандмауэр .... Говоря о брандмауэрах, убедитесь, что IP-адрес вашей локальной машины тоже там.

Реальным решением этой проблемы для меня было выполнение «az login» в терминале кода VS, что, похоже, создает «идентичность». Контекст », который позволяет мне использовать моего« Администратора »сверху для входа в систему и, таким образом, иметь доступ к базе данных. Это не Точно , как запуск из самого веб-приложения, но он достаточно близок и не требует включения второй строки подключения или проверки подлинности SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...