Для доступа к службам Azure используются управляемые удостоверения без пароля. С помощью этого подхода вам не нужно вручную отслеживать секреты для управляемых удостоверений и управлять ими. Эти задачи безопасно обрабатываются Azure.
Service Connector позволяет использовать управляемые удостоверения в службах размещения приложений, таких как Azure Spring Apps, Azure App Service и Azure Container Apps. Соединитель служб также настраивает службы баз данных, такие как База данных Azure для PostgreSQL, База данных Azure для MySQL, База данных SQL Azure и база данных SQL в Microsoft Fabric для принятия управляемых удостоверений.
В этом учебнике используется Azure CLI для выполнения следующих задач:
- Проверьте исходную среду с помощью Azure CLI.
- Создайте подключение без пароля с помощью Service Connector.
- Используйте переменные среды или конфигурации, созданные соединителем службы, для доступа к службе базы данных.
Предварительные условия
Чтобы начать использование Azure CLI, выполните следующие действия.
Установка расширения для работы без пароля для соединителя служб
Установите безпарольное расширение последней версии коннектора сервиса для Azure CLI.
az extension add --name serviceconnector-passwordless --upgrade
Примечание.
Убедитесь, что расширение "serviceconnector-passwordless" версии "2.0.2" или более поздней, запустив az version. Чтобы обновить версию расширения, может потребоваться сначала обновить Azure CLI.
Создание подключения без пароля
Далее мы используем службу приложений Azure в качестве примера для создания подключения с помощью управляемой идентичности.
Если вы используете:
Следующая команда Azure CLI использует --client-type параметр, он может быть java, dotnet, python и т. д. Запустите az webapp connection create postgres-flexible -h файл, чтобы получить поддерживаемые типы клиентов, и выбрать тот, который соответствует приложению.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $POSTGRESQL_HOST \
--database $DATABASE_NAME \
--user-identity client-id=XX subs-id=XX \
--client-type $CLIENT_TYPE
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $POSTGRESQL_HOST \
--database $DATABASE_NAME \
--system-identity \
--client-type $CLIENT_TYPE
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $POSTGRESQL_HOST \
--database $DATABASE_NAME \
--service-principal client-id=XX secret=XX\
--client-type $CLIENT_TYPE
База данных Azure для MySQL - Flexible Server требует пользовательского управляющего удостоверения для включения аутентификации Microsoft Entra. Дополнительные сведения см. в статье "Настройка проверки подлинности Microsoft Entra для базы данных Azure для MySQL — гибкий сервер". Для создания управляемого удостоверения, назначаемого пользователем, можно использовать следующую команду:
USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGED_IDENTITY_NAME>
IDENTITY_RESOURCE_ID=$(az identity create \
--name $USER_IDENTITY_NAME \
--resource-group $RESOURCE_GROUP \
--query id \
--output tsv)
Внимание
После создания управляемого удостоверения, назначаемого пользователем, попросите глобального администратора или администратора привилегированных ролей предоставить следующие разрешения для этого удостоверения:
User.Read.All
GroupMember.Read.All
Application.Read.All
Дополнительные сведения см. в разделе "Разрешения"проверки подлинности Active Directory.
Затем подключите приложение к базе данных MySQL, используя управляемое системой удостоверение и соединитель службы.
Следующая команда Azure CLI использует --client-type параметр.
az webapp connection create mysql-flexible -h Запустите файл, чтобы получить поддерживаемые типы клиентов и выберите тот, который соответствует приложению.
az webapp connection create mysql-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $MYSQL_HOST \
--database $DATABASE_NAME \
--user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type java
az webapp connection create mysql-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $MYSQL_HOST \
--database $DATABASE_NAME \
--system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type java
az webapp connection create mysql-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $MYSQL_HOST \
--database $DATABASE_NAME \
--service-principal client-id=XX secret=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type java
Следующая команда Azure CLI использует --client-type параметр.
az webapp connection create sql -h Запустите файл, чтобы получить поддерживаемые типы клиентов и выберите тот, который соответствует приложению.
az webapp connection create sql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $SQL_HOST \
--database $DATABASE_NAME \
--user-identity client-id=XX subs-id=XX \
--client-type dotnet
az webapp connection create sql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $SQL_HOST \
--database $DATABASE_NAME \
--system-identity \
--client-type dotnet
az webapp connection create sql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $SQL_HOST \
--database $DATABASE_NAME \
--service-principal client-id=XX secret=XX \
--client-type dotnet
Следующая команда Azure CLI использует --client-type параметр.
az webapp connection create fabricsql -h Запустите файл, чтобы получить поддерживаемые типы клиентов и выберите тот, который соответствует приложению.
az webapp connection create fabricsql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--fabric-workspace-uuid $FABRIC_WORKSPACE_UUID \
--fabric-sql-db-uuid $FABRIC_SQL_DB_UUID \
--user-identity client-id=XX subs-id=XX \
--client-type dotnet
az webapp connection create fabricsql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--fabric-workspace-uuid $FABRIC_WORKSPACE_UUID \
--fabric-sql-db-uuid $FABRIC_SQL_DB_UUID \
--system-identity \
--client-type dotnet
Примечание.
Подключения к службе, использующие субъекты-службы, не поддерживаются при выборе целевой базы данных SQL в Microsoft Fabric.
Эта команда Соединителя служб выполняет следующие задачи в фоновом режиме:
- Включите управляемое удостоверение, назначаемое системой, или назначьте удостоверение пользователя для приложения
$APPSERVICE_NAME, размещенного приложение Azure Service/Azure Spring Apps/Azure Container Apps.
- Включите проверку подлинности Microsoft Entra для сервера базы данных, если она не включена раньше.
- Задайте администратору Microsoft Entra текущий пользователь, выполнившего вход.
- Добавьте пользователя базы данных для управляемой идентичности, назначенной системой, управляемой идентичности, назначенной пользователем, или служебного принципала. Предоставьте этому пользователю все права доступа к базе данных
$DATABASE_NAME . Имя пользователя можно найти в строке подключения в выводе предыдущей команды.
- Установите конфигурации с именем
AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING, AZURE_SQL_CONNECTIONSTRING или FABRIC_SQL_CONNECTIONSTRING на ресурс Azure на основе типа базы данных.
- Для службы приложений конфигурации задаются в колонке "Параметры приложения ".
- Для Spring Apps конфигурации задаются при запуске приложения.
- Для контейнерных приложений конфигурации задаются переменными среды. Все конфигурации и их значения можно получить в колонке "Соединитель службы " на портале Azure.
Соединитель служб назначит пользователю следующие привилегии, вы можете отозвать их и настроить привилегии на основе ваших требований.
GRANT ALL PRIVILEGES ON DATABASE "$DATABASE_NAME" TO "username";
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "username";
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO "username";
GRANT ALL PRIVILEGES ON $DATABASE_NAME.* TO 'username'@'%';
GRANT CONTROL ON DATABASE::"$DATABASE_NAME" TO "username";
ALTER ROLE db_datareader ADD MEMBER "username"
ALTER ROLE db_datawriter ADD MEMBER "username"
ALTER ROLE db_ddladmin ADD MEMBER "username"
Подключение к базе данных с помощью проверки подлинности Microsoft Entra
После создания подключения можно использовать строку подключения в приложении для подключения к базе данных с аутентификацией через Microsoft Entra. Например, можно использовать следующие решения для подключения к базе данных с проверкой подлинности Microsoft Entra.
Для .NET нет плагина или библиотеки для поддержки подключений без пароля. Маркер доступа для управляемого удостоверения или служебного принципала можно получить с помощью клиентской библиотеки, такой как Azure.Identity. Затем вы можете использовать маркер доступа в качестве пароля для подключения к базе данных. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Добавьте следующие зависимости в файл pom.xml :
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Получите строку подключения из переменных среды и добавьте название плагина для подключения к базе данных.
import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
Дополнительные сведения см. на следующих ресурсах:
Установите зависимости.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Получите маркер доступа с помощью библиотеки azure-identity и используйте маркер в качестве пароля. Получение сведений о подключении из переменных среды, добавленных служебным коннектором. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token)
Установите зависимости.
pip install azure-identity
Получите токен доступа, используя библиотеку azure-identity и переменные среды, добавленные соединителем службы. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# credential = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token.
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
В файле параметров получите сведения о базе данных Azure PostgreSQL из переменных среды, добавленных службой Service Connector. Используйте accessToken полученный на предыдущем шаге для доступа к базе данных.
# In your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host,
'PORT': '5432', # Port is 5432 by default
'OPTIONS': {'sslmode': 'require'},
}
}
Установите зависимости.
go get github.com/lib/pq
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
В коде получите маркер доступа с помощью azidentity, затем используйте его как пароль для подключения к Azure PostgreSQL вместе с информацией о подключении, предоставленной соединителем службы. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
import (
"database/sql"
"fmt"
"os"
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
_ "github.com/lib/pq"
)
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// For user-assigned identity.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// For service principal.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// tenantid := os.Getenv("AZURE_POSTGRESQL_TENANTID")
// clientsecret := os.Getenv("AZURE_POSTGRESQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
// error handling
}
// Acquire the access token
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
// Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING") + " password=" + token.Token
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
Установите зависимости.
npm install --save @azure/identity
npm install --save pg
В коде вы получите токен доступа с помощью @azure/identity и сведения о подключении PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Для PHP нет плагина или библиотеки для работе без пароля. Маркер доступа для управляемого удостоверения или учетной записи службы можно получить и использовать в качестве пароля для подключения к базе данных. Маркер доступа можно получить с помощью REST API Azure.
В коде получите токен доступа с использованием REST API, используя вашу предпочитаемую библиотеку.
Для удостоверений, назначаемых пользователем, и удостоверений, назначаемых системой, Служба приложений и контейнерные приложения предоставляют внутреннюю конечную точку REST для получения токенов для управляемых удостоверений путем определения двух переменных среды: IDENTITY_ENDPOINT и IDENTITY_HEADER. Дополнительные сведения см. в справочнике по конечной точке REST.
Получите маркер доступа, выполнив HTTP-запрос GET к конечной точке удостоверения и используя https://ossrdbms-aad.database.windows.net вместо resource в запросе. Для идентификации, назначенной пользователем, в запрос также добавьте идентификатор клиента из переменных окружения, добавленных соединителем службы.
Для "service principal" обратитесь к запросу токена доступа между службами Azure AD, чтобы узнать подробности о получении токена доступа. Сделайте запрос POST в рамках области https://ossrdbms-aad.database.windows.net/.default с идентификатором арендатора, идентификатором клиента и клиентским секретом служебного принципала, полученными из значений переменных среды, добавленных соединителем службы.
Объедините токен доступа и строку подключения PostgreSQL из переменных среды, которые добавила служба соединителя сервисов, для установления подключения.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Для Ruby нет подключаемого модуля или библиотеки для соединений без пароля. Маркер доступа для управляемого удостоверения или учетной записи службы можно получить и использовать в качестве пароля для подключения к базе данных. Маркер доступа можно получить с помощью REST API Azure.
Установите зависимости.
gem install pg
В коде получите маркер доступа с помощью REST API и сведений о подключении PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
Сервис приложений и приложения в контейнерах предоставляют внутреннюю конечную точку REST для получения токенов для управляемых удостоверений. Дополнительные сведения см. в справочнике по конечной точке REST.
require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client_id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
# :grant_type => 'client_credentials',
# :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
# :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
# :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
# http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password=" + access_token,
)
Обратитесь к документу запроса токена доступа между службами Azure AD, чтобы узнать больше о том, как получить токен доступа для доверенного лица.
Затем, если вы создали таблицы и последовательности на гибком сервере PostgreSQL до использования служебного соединителя, необходимо подключиться как владелец и предоставить разрешение <aad-username>, созданному служебным соединителем. Имя пользователя из строка подключения или конфигурации, заданное соединителем службы, должно выглядеть следующим образомaad_<connection name>. Если вы используете портал Azure, нажмите кнопку развертывания рядом с столбцом Service Type и получите значение. Если вы используете Azure CLI, проверьте configurations в выводе команды CLI.
Затем выполните запрос, чтобы предоставить разрешение
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
И <owner-username> и <owner-password> является владельцем существующей таблицы, которая может предоставлять доступ другим.
<aad-username> — это пользователь, созданный соединителем службы. Замените их фактическим значением.
Проверьте результат с помощью команды:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Для .NET нет плагина или библиотеки для поддержки подключений без пароля. Маркер доступа для управляемого удостоверения или служебного принципала можно получить с помощью клиентской библиотеки, такой как Azure.Identity. Затем вы можете использовать маркер доступа в качестве пароля для подключения к базе данных. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();
// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// });
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_MYSQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTSECRET");
// var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var tokenRequestContext = new TokenRequestContext(
new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";
using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();
// do something
Добавьте следующие зависимости в файл pom.xml :
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Получите строку подключения из значения переменной среды и добавьте имя плагина для подключения к базе данных.
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Properties properties = new Properties();
properties.put("defaultAuthenticationPlugin", pluginName);
properties.put("authenticationPlugins", pluginName);
// Uncomment the following lines corresponding to the authentication type you want to use.
// for user-assigned managed identity
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// properties.put("azure.clientId", clientId);
// For service principal
// String tenantId = System.getenv('AZURE_MYSQL_TENANTID')
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// String clientSecret = System.getenv('AZURE_MYSQL_CLIENTSECRET')
// properties.put("azure.clientId", clientId);
// properties.put("azure.clientSecret", clientSecret);
// properties.put("azure.tenantId", tenantId);
Connection connection = DriverManager.getConnection(url, properties);
Дополнительные сведения см. в статье "Использование Java и JDBC" с базой данных Azure для MySQL — гибкий сервер.
Установка зависимостей
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
Проверьте подлинность с помощью маркера доступа, полученного через библиотеку azure-identity, и получите информацию о подключении из переменной окружения, добавленной коннектором службы. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned managed identity.
# cred = ManagedIdentityCredential()
# For user-assigned managed identity.
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# open connect to Azure MySQL with the access token.
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token
cnx = mysql.connector.connect(user=user,
password=password,
host=host,
database=database)
cnx.close()
Установите зависимости.
pip install azure-identity
Для получения маркера доступа с помощью библиотеки azure-identity, используются переменные среды, добавленные Коннектором службы. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# system-assigned managed identity
# cred = ManagedIdentityCredential()
# user-assigned managed identity
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
В файле параметров получите сведения о базе данных Azure MySQL из переменных среды, добавленных службой Service Connector. Используйте accessToken полученный на предыдущем шаге для доступа к базе данных.
# in your setting file, eg. settings.py
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host
}
}
Установите зависимости.
go get "github.com/go-sql-driver/mysql"
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
В коде получите токен доступа через azidentity, а затем подключитесь к Azure MySQL с помощью токена. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/go-sql-driver/mysql"
)
func main() {
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// for user-assigned managed identity
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// for service principal
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// tenantid := os.Getenv("AZURE_MYSQL_TENANTID")
// clientsecret := os.Getenv("AZURE_MYSQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
connectionString := os.Getenv("AZURE_MYSQL_CONNECTIONSTRING") + ";Password=" + token.Token
db, err := sql.Open("mysql", connectionString)
}
Установка зависимостей
npm install --save @azure/identity
npm install --save mysql2
Получите токен доступа с помощью @azure/identity и сведений о базе данных Azure MySQL из переменных среды, добавленных службой Service Connector. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// const credential = new DefaultAzureCredential();
// for user-assigned managed identity
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// for service principal
// const tenantId = process.env.AZURE_MYSQL_TENANTID;
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const clientSecret = process.env.AZURE_MYSQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// acquire token
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: accessToken.token,
database: process.env.AZURE_MYSQL_DATABASE,
port: process.env.AZURE_MYSQL_PORT,
ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database');
});
Дополнительные примеры кода см. в статье "Подключение к базам данных Azure из службы приложений без секретов с помощью управляемого удостоверения".
Установите зависимости.
dotnet add package Microsoft.Data.SqlClient
Получите строку подключения к базе данных Azure SQL из переменной среды, добавленной Коннектором службы.
using Microsoft.Data.SqlClient;
string connectionString =
Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
using var connection = new SqlConnection(connectionString);
connection.Open();
Дополнительные сведения см. в разделе "Использование проверки подлинности управляемого удостоверения Active Directory".
Добавьте следующие зависимости в файл pom.xml :
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.7.0</version>
</dependency>
Получите строку подключения к базе данных Azure SQL из переменной среды, добавленной Коннектором службы.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
public class Main {
public static void main(String[] args) {
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};authentication=ActiveDirectoryMSI;"
// For user-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};msiClientId={UserAssignedMiClientId};authentication=ActiveDirectoryMSI;"
// For service principal: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};user={ServicePrincipalClientId};password={spSecret};authentication=ActiveDirectoryServicePrincipal;"
String connectionString = System.getenv("AZURE_SQL_CONNECTIONSTRING");
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL(connectionString);
try (Connection connection = ds.getConnection()) {
System.out.println("Connected successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Дополнительные сведения см. в статье "Подключение к базам данных Azure из службы приложений без секретов с помощью управляемого удостоверения".
Если вы создаете подключение с параметром --client-type springboot, соединитель служб задает свойства spring.datasource.url со значением формата jdbc:sqlserver://<sql-server>.database.windows.net:1433;databaseName=<sql-db>;authentication=ActiveDirectoryMSI; в Azure Spring Apps.
Обновите ваше приложение согласно руководству по переносу приложения Java для использования безпарольных подключений к Базе данных SQL Azure. Не забудьте удалить spring.datasource.password свойство конфигурации, если оно было задано ранее и добавить правильные зависимости.
Установите зависимости.
python -m pip install pyodbc
Получите конфигурации подключения к базе данных Azure SQL из переменной среды, добавленной Коннектором службы. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать. Если вы используете приложения Azure Container Apps как вычислительную службу или если строка подключения в коде не работает, см. статью "Миграция приложения Python для использования подключений к базе данных Azure SQL без пароля" для подключения к базе данных Azure SQL с помощью токена доступа.
import os
import pyodbc
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
authentication = os.getenv('AZURE_SQL_AUTHENTICATION')
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned managed identity.
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server=tcp:{server},{port};Database={database};Authentication={authentication};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
# For user-assigned managed identity.
# clientID = os.getenv('AZURE_SQL_USER')
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server=tcp:{server},{port};Database={database};UID={clientID};Authentication={authentication};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
# For service principal.
# user = os.getenv('AZURE_SQL_USER')
# password = os.getenv('AZURE_SQL_PASSWORD')
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server=tcp:{server},{port};Database={database};UID={user};PWD={password};Authentication={authentication};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
conn = pyodbc.connect(connString)
- Установите зависимости.
npm install mssql
- Получите конфигурации подключения Azure SQL Database из переменных среды, добавленных Service Connector. При использовании кода ниже, раскомментируйте фрагмент кода для типа аутентификации, который вы хотите использовать.
import sql from 'mssql';
const server = process.env.AZURE_SQL_SERVER;
const database = process.env.AZURE_SQL_DATABASE;
const port = parseInt(process.env.AZURE_SQL_PORT);
const authenticationType = process.env.AZURE_SQL_AUTHENTICATIONTYPE;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned managed identity.
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true
// }
// };
// For user-assigned managed identity.
// const clientId = process.env.AZURE_SQL_CLIENTID;
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true,
// clientId: clientId
// }
// };
// For service principal.
// const clientId = process.env.AZURE_SQL_CLIENTID;
// const clientSecret = process.env.AZURE_SQL_CLIENTSECRET;
// const tenantId = process.env.AZURE_SQL_TENANTID;
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true,
// clientId: clientId,
// clientSecret: clientSecret,
// tenantId: tenantId
// }
// };
this.poolconnection = await sql.connect(config);
Дополнительные сведения см. на домашней странице клиентского программирования в Microsoft SQL Server.
Установите зависимости.
dotnet add package Microsoft.Data.SqlClient
Получите базу данных SQL в строке подключения Microsoft Fabric из переменной среды, добавленной соединителем службы.
using Microsoft.Data.SqlClient;
string connectionString =
Environment.GetEnvironmentVariable("FABRIC_SQL_CONNECTIONSTRING")!;
using var connection = new SqlConnection(connectionString);
connection.Open();
Дополнительные сведения см. в разделе "Использование проверки подлинности управляемого удостоверения Active Directory".
Добавьте следующие зависимости в файл pom.xml :
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.7.0</version>
</dependency>
Получите базу данных SQL в строке подключения Microsoft Fabric из переменной среды, добавленной соединителем службы.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
public class Main {
public static void main(String[] args) {
// FABRIC_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity: "jdbc:sqlserver://<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;databaseName=<SQL-DB-name>-<Fabric-DB-Identifier>;authentication=ActiveDirectoryMSI;"
// For user-assigned managed identity: "jdbc:sqlserver://<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;databaseName=<SQL-DB-name>-<Fabric-DB-Identifier>;msiClientId=<msiClientId>;authentication=ActiveDirectoryMSI;"
String connectionString = System.getenv("FABRIC_SQL_CONNECTIONSTRING");
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL(connectionString);
try (Connection connection = ds.getConnection()) {
System.out.println("Connected successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Дополнительные сведения см. в статье "Подключение к базам данных Azure из службы приложений без секретов с помощью управляемого удостоверения".
Если вы создаете подключение с опцией --client-type springboot, соединитель службы задает переменную среды FABRIC_SQL_CONNECTIONSTRING с форматом значения jdbc:sqlserver://<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;databaseName=<SQL-DB-name>-<Fabric-DB-Identifier>;authentication=ActiveDirectoryMSI;, предназначенную для Azure Spring Apps.
Для управляемых удостоверений, назначаемых пользователем, msiClientId=<msiClientId>; добавляется.
Обновите ваше приложение согласно руководству по переносу приложения Java для использования безпарольных подключений к Базе данных SQL Azure. Не забудьте удалить spring.datasource.password свойство конфигурации, если оно было задано ранее и добавьте правильные зависимости.
spring:
datasource:
url: ${FABRIC_SQL_CONNECTIONSTRING}
Установите зависимости.
python -m pip install pyodbc
Получите базу данных SQL в строке подключения Microsoft Fabric из переменной среды, добавленной соединителем службы. Если вы используете Azure Container Apps в качестве сервиса вычислений или строка подключения в фрагменте кода не работает, ознакомьтесь с "Миграция Python-приложения для использования подключений без пароля к базе данных SQL Azure для подключения к базе данных SQL в Microsoft Fabric с помощью подключений без пароля".
Authentication=ActiveDirectoryMSI; требуется в строке подключения при подключении с помощью управляемых удостоверений.
UID=<msiClientId> также требуется в строке подключения при подключении с помощью управляемого удостоверения, назначаемого пользователем.
import os
import pyodbc, struct
from azure.identity import DefaultAzureCredential
connStr = os.getenv('FABRIC_SQL_CONNECTIONSTRING')
# System-assigned managed identity connection string format
# `Driver={ODBC Driver 17 for SQL Server};Server=tcp:<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;Database=<SQL-DB-name>-<Fabric-DB-Identifier>;Authentication=ActiveDirectoryMSI;`
# User-assigned managed identity connection string format
# `Driver={ODBC Driver 17 for SQL Server};Server=tcp:<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;Database=<SQL-DB-name>-<Fabric-DB-Identifier>;UID=<msiClientId>;Authentication=ActiveDirectoryMSI;`
conn = pyodbc.connect(connString)
- Установите зависимости.
go mod init <YourProjectName>
go mod tidy
- Получите базу данных SQL в строке подключения Microsoft Fabric из переменной среды, добавленной соединителем службы.
package main
import (
"github.com/microsoft/go-mssqldb/azuread"
"database/sql"
"context"
"log"
"fmt"
"os"
)
var db *sql.DB
var connectionString = os.Getenv("FABRIC_SQL_CONNECTIONSTRING")
func main() {
var err error
// Create connection pool
db, err = sql.Open(azuread.DriverName, connectionString)
if err != nil {
log.Fatal("Error creating connection pool: ", err.Error())
}
ctx := context.Background()
err = db.PingContext(ctx)
if err != nil {
log.Fatal(err.Error())
}
fmt.Printf("Connected!\n")
}
Дополнительные сведения см. в статье "Использование Golang" для запроса базы данных в Базе данных SQL Azure.
Дополнительные сведения см. в разделе "Подключение к базе данных SQL" в Microsoft Fabric.
Развертывание приложения в службе размещения Azure
Разверните приложение в службе размещения Azure. Дополнительные сведения о развертывании этих ресурсов см. в приведенных ниже руководствах.
Проверьте журнал или вызовите приложение, чтобы узнать, может ли он подключиться к базе данных Azure успешно.
Устранение неполадок
Разрешения
Если возникают ошибки, связанные с разрешениями, убедитесь, что пользователь Azure CLI вошел в систему с помощью команды az account show. Убедитесь, что вы войдите с помощью правильной учетной записи. Затем убедитесь, что у вас есть следующие разрешения, которые могут потребоваться для создания безпарольного подключения с использованием Service Connector.
| Разрешение |
Операция |
Microsoft.DBforPostgreSQL/flexibleServers/read |
Требуется для получения сведений о сервере базы данных |
Microsoft.DBforPostgreSQL/flexibleServers/write |
Требуется для включения проверки подлинности Microsoft Entra для сервера базы данных |
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write |
Требуется для создания правила брандмауэра в случае блокировки локального IP-адреса |
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/delete |
Требуется для восстановления правила брандмауэра, созданного соединителем службы, чтобы избежать проблем безопасности |
Microsoft.DBforPostgreSQL/flexibleServers/administrators/read |
Требуется проверить, является ли пользователь, вошедший в Azure CLI, администратором Microsoft Entra для сервера базы данных. |
Microsoft.DBforPostgreSQL/flexibleServers/administrators/write |
Необходимо добавить пользователя входа Azure CLI в качестве администратора сервера базы данных Microsoft Entra. |
| Разрешение |
Операция |
Microsoft.DBforMySQL/flexibleServers/read |
Требуется для получения сведений о сервере базы данных |
Microsoft.DBforMySQL/flexibleServers/write |
Требуется добавить назначенное пользователем управляемое удостоверение в сервер баз данных. |
Microsoft.DBforMySQL/flexibleServers/firewallRules/write |
Требуется для создания правила брандмауэра в случае блокировки локального IP-адреса |
Microsoft.DBforMySQL/flexibleServers/firewallRules/delete |
Требуется для восстановления правила брандмауэра, созданного соединителем службы, чтобы избежать проблем безопасности |
Microsoft.DBforMySQL/flexibleServers/administrators/read |
Требуется проверить, является ли пользователь, вошедший в Azure CLI, администратором Microsoft Entra для сервера базы данных. |
Microsoft.DBforMySQL/flexibleServers/administrators/write |
Необходимо добавить пользователя входа Azure CLI в качестве администратора сервера базы данных Microsoft Entra. |
| Разрешение |
Операция |
Microsoft.Sql/servers/read |
Требуется для получения сведений о сервере базы данных |
Microsoft.Sql/servers/firewallRules/write |
Требуется для создания правила брандмауэра в случае блокировки локального IP-адреса |
Microsoft.Sql/servers/firewallRules/delete |
Требуется для восстановления правила брандмауэра, созданного соединителем службы, чтобы избежать проблем безопасности |
Microsoft.Sql/servers/administrators/read |
Требуется проверить, является ли пользователь, вошедший в Azure CLI, администратором Microsoft Entra для сервера базы данных. |
Microsoft.Sql/servers/administrators/write |
Необходимо добавить пользователя входа Azure CLI в качестве администратора сервера базы данных Microsoft Entra. |
В некоторых случаях разрешения не требуются. Например, если пользователь, прошедший проверку подлинности Azure CLI, уже является администратором Active Directory на сервере SQL Server, вам не нужно иметь разрешение Microsoft.Sql/servers/administrators/write.
Microsoft Entra ID
Если возникает ошибка ERROR: AADSTS530003: Your device is required to be managed to access this resource., обратитесь к ИТ-отделу за помощью при присоединении этого устройства к идентификатору Microsoft Entra. Дополнительные сведения см. в разделе "Присоединенные к Microsoft Entra устройства".
Соединитель служб должен получить доступ к Microsoft Entra ID, чтобы извлечь информацию из вашей учетной записи и управляемого удостоверения хостинговой службы. Чтобы проверить, может ли устройство получить доступ к идентификатору Microsoft Entra, можно использовать следующую команду:
az ad signed-in-user show
Если вы не входите в систему в интерактивном режиме, вы также можете получить ошибку и Interactive authentication is needed. Чтобы устранить ошибку, войдите в систему с помощью az login команды.
Сетевое соединение
Если сервер базы данных находится в виртуальной сети, убедитесь, что среда, в которой выполняется команда Azure CLI, может получить доступ к серверу в виртуальной сети.
Если сервер базы данных находится в виртуальной сети, убедитесь, что среда, в которой выполняется команда Azure CLI, может получить доступ к серверу в виртуальной сети.
Если сервер базы данных запрещает общедоступный доступ, убедитесь, что среда, которая выполняет команду Azure CLI, может получить доступ к серверу через частную конечную точку.
Следующие шаги
Дополнительные сведения о соединителе службы и подключениях без пароля см. в следующих ресурсах: