App Service oferece um serviço de alojamento web altamente escalável e auto-patchável em Azure. Também fornece uma identidade gerida para a sua aplicação, que é uma solução chave na mão que garante o acesso a bases de dados do Azure, incluindo:
As identidades geridas no Serviço de Aplicações retiram a necessidade de ter segredos nas suas aplicações, como credenciais nas cadeias de ligação, o que as torna mais seguras. Este tutorial mostra como se conectar aos bancos de dados mencionados acima a partir do Serviço de Aplicativo usando identidades gerenciadas.
O que você vai aprender:
- Configure um utilizador Microsoft Entra como administrador para a sua base de dados Azure.
- Ligue-se à sua base de dados como utilizador do Microsoft Entra.
- Configure uma identidade gerenciada atribuída pelo sistema ou pelo usuário para um aplicativo do Serviço de Aplicativo.
- Conceda acesso ao banco de dados à identidade gerenciada.
- Liga-te à base de dados Azure a partir do teu código (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando uma identidade gerida.
- Ligue-se à base de dados Azure a partir do seu ambiente de desenvolvimento usando o utilizador Microsoft Entra.
Se não tiver uma conta Azure, crie uma conta free antes de começar.
Pré-requisitos
- Crie uma aplicação no App Service baseada em .NET, Node.js, Python ou Java.
- Crie um servidor de base de dados com Azure SQL Database, Azure Database for MySQL ou Azure Database for PostgreSQL.
- Você deve estar familiarizado com o padrão de conectividade padrão (com nome de usuário e senha) e ser capaz de se conectar com êxito do seu aplicativo do Serviço de Aplicativo ao banco de dados de sua escolha.
Prepare o seu ambiente para a Azure CLI.
Usa o ambiente Bash em Azure Cloud Shell. Para mais informações, consulte Comece com Azure Cloud Shell.
Se preferires executar comandos de referência de CLI localmente, instala a Azure CLI. Se estiveres a correr no Windows ou macOS, considera executar Azure CLI num contentor Docker. Para mais informações, veja Como executar o Azure CLI num contentor Docker.
Se estiveres a usar uma instalação local, inicia sessão na Azure CLI usando o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de iniciação de sessão, veja Autenticar para Azure usando Azure CLI.
Quando for solicitado, instale a extensão Azure CLI na primeira utilização. Para mais informações sobre extensões, veja Usar e gerir extensões com a Azure CLI.
Execute az version para descobrir a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
1. Instale a extensão sem senha do Service Connector
Instale a mais recente extensão sem palavra-passe do Service Connector para a Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Nota
Verifique se a extensão "serviceconnector-passwordless" tem a versão "2.0.2" ou superior executando az version. Pode ser necessário atualizar primeiro a Azure CLI para atualizar a versão da extensão.
2. Crie uma conexão sem senha
Em seguida, crie uma conexão sem senha com o Service Connector.
Gorjeta
O portal do Azure pode ajudá-lo a compor os comandos abaixo. No portal Azure, vá ao seu recurso Azure App Service, selecione Service Connector no menu esquerdo e selecione Criar. Preencha o formulário com todos os parâmetros necessários. O Azure gera automaticamente o comando de criação de ligação, que podes copiar para usar na CLI ou executar no Azure Cloud Shell.
O comando Azure CLI seguinte utiliza um parâmetro --client-type.
Opcionalmente, execute o az webapp connection create sql -h para obter os tipos de cliente suportados.
Escolha um tipo de cliente e execute o comando correspondente. Substitua os espaços reservados abaixo por suas próprias informações.
az webapp connection create sql \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <sql-group-name> \
--server <sql-name> \
--database <database-name> \
--user-identity client-id=<client-id> subs-id=<subscription-id> \
--client-type <client-type>
az webapp connection create sql \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <sql-name> \
--database <database-name> \
--system-identity \
--client-type <client-type>
Nota
Para Azure Database for MySQL - Servidor Flexível, deve primeiro configurar manualmente a autenticação Microsoft Entra, o que requer uma identidade gerida atribuída pelo utilizador separada e as permissões específicas para o Microsoft Graph. Esta etapa não pode ser automatizada.
Configurar manualmente autenticação Microsoft Entra para Azure Database for MySQL - Servidor Flexível.
Opcionalmente, execute o comando az webapp connection create mysql-flexible -h para obter os tipos de cliente suportados.
Escolha um tipo de cliente e execute o comando correspondente. O comando Azure CLI seguinte utiliza um parâmetro --client-type.
az webapp connection create mysql-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <mysql-name> \
--database <database-name> \
--user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type <client-type>
az webapp connection create mysql-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <mysql-name> \
--database <database-name> \
--system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type <client-type>
O comando Azure CLI seguinte utiliza um parâmetro --client-type.
Opcionalmente, execute o comando az webapp connection create postgres-flexible -h para obter uma lista de todos os tipos de cliente suportados.
Escolha um tipo de cliente e execute o comando correspondente.
az webapp connection create postgres-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <postgresql-name> \
--database <database-name> \
--user-identity client-id=XX subs-id=XX \
--client-type java
az webapp connection create postgres-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <postgresql-name> \
--database <database-name> \
--system-identity \
--client-type <client-type>
Conceder permissão a tabelas pré-criadas
Em seguida, se criaste tabelas e sequências no servidor flexível PostgreSQL antes de utilizares o Service Connector, precisarás fazer login como proprietário e conceder permissão ao <aad-username> criado pelo Service Connector. O nome de utilizador da cadeia de conexão ou configuração definida pelo Service Connector deve parecer aad_<connection name>. Se usares o portal Azure, seleciona o botão expandir ao lado da coluna Service Type e obtém o valor. Se usares Azure CLI, verifica configurations na saída do comando CLI.
Em seguida, execute a consulta para conceder permissão
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>\";"
Os <owner-username> e <owner-password> são os proprietários da tabela existente que podem conceder permissões a outras pessoas.
<aad-username> é o usuário criado pelo Service Connector. Substitua-os pelo valor real.
Valide o resultado com o comando:
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
Este comando do Service Connector conclui as seguintes tarefas em segundo plano:
- Ative a identidade gerida atribuída ao sistema, ou atribua uma identidade de utilizador à aplicação
<server-name> alojada pela Azure App Service.
- Configure o administrador do Microsoft Entra para o utilizador que iniciou sessão atualmente.
- Adicione um usuário de banco de dados para a identidade gerenciada atribuída pelo sistema ou a identidade gerenciada atribuída pelo usuário. Conceda todos os privilégios do banco de dados
<database-name> a esse usuário. O nome de utilizador pode ser encontrado na connection string na saída de comando anterior.
- Defina configurações nomeadas
AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING ou AZURE_SQL_CONNECTIONSTRING ao recurso Azure consoante o tipo de base de dados.
- Para o App Service, as configurações são definidas no painel de Configurações do Aplicativo.
Se você encontrar algum problema ao criar uma conexão, consulte Solução de problemas para obter ajuda.
3. Modifique o seu código
Instale dependências.
dotnet add package Microsoft.Data.SqlClient
Obtenha a cadeia de conexão da Azure SQL Database a partir da variável de ambiente adicionada pelo Service Connector.
using Microsoft.Data.SqlClient;
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
// For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
string connectionString =
Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
using var connection = new SqlConnection(connectionString);
connection.Open();
Para mais informações, consulte Utilizar a autenticação de Identidade Gerida do Active Directory.
Adicione as seguintes dependências no arquivo pom.xml :
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
Obtenha a Azure SQL Database connection string da variável de ambiente adicionada pelo Service Connector.
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;"
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();
}
}
}
Para mais informações, consulte Connect usando autenticação Microsoft Entra.
Instale dependências.
python -m pip install mssql-python python-dotenv
Obtenha as configurações de ligação do Azure SQL Database a partir da variável de ambiente adicionada pelo Service Connector. Descomente a parte do trecho de código do tipo de autenticação que você deseja usar.
import os
from mssql_python import connect
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# connection_string = f'Server={server},{port};Database={database};Authentication=ActiveDirectoryMSI;Encrypt=yes;'
# For user-assigned managed identity.
# client_id = os.getenv('AZURE_SQL_USER')
# connection_string = f'Server={server},{port};Database={database};UID={client_id};Authentication=ActiveDirectoryMSI;Encrypt=yes;'
conn = connect(connection_string)
Para um método alternativo, também pode ligar-se a Azure SQL Database usando um token de acesso, consulte Migre uma aplicação Python para usar ligações sem palavra-passe com Azure SQL Database.
- Instale dependências.
npm install mssql
- Obtenha as configurações de ligação do Azure SQL Database a partir das variáveis de ambiente adicionadas pelo Service Connector. Descomente a parte do trecho de código do tipo de autenticação que você deseja usar.
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 according to the authentication type.
// For system-assigned managed identity.
// const config = {
// server,
// port,
// database,
// authentication: {
// 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
// }
// };
this.poolconnection = await sql.connect(config);
Para mais informações, consulte a página inicial para programação cliente para Microsoft SQL Server.
Para obter mais exemplos de código, consulte Criar uma conexão sem senha com um serviço de banco de dados por meio do Service Connector.
A conectividade ao Azure Database for MySQL no código segue o padrão DefaultAzureCredential para todas as stacks de linguagens.
DefaultAzureCredential é suficientemente flexível para se adaptar tanto ao ambiente de desenvolvimento como ao ambiente Azure. Quando está a correr localmente, pode recuperar o utilizador Azure com sessão logada a partir do ambiente que preferir (Visual Studio, Visual Studio Code, Azure CLI ou Azure PowerShell). Quando é executado no Azure, recupera a identidade gerida. Assim, é possível ter conectividade com o banco de dados tanto no momento do desenvolvimento quanto na produção. O padrão é o seguinte:
- Instancie um
DefaultAzureCredential a partir da biblioteca cliente Azure Identity. Se você estiver usando uma identidade atribuída pelo usuário, especifique a ID do cliente da identidade.
- Obtenha um token de acesso para Azure Database for MySQL:
https://ossrdbms-aad.database.windows.net/.default.
- Adicione o token à sua connection string.
- Abra a conexão.
Para .NET, obtenha um token de acesso para a identidade gerida usando uma biblioteca cliente como Azure. Identidade. Em seguida, use o token de acesso como uma senha para se conectar ao banco de dados. Ao usar o código abaixo, certifique-se de descomentar a parte do trecho de código que corresponde ao tipo de autenticação que você deseja usar.
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines according to the authentication type.
// 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");
// });
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
Adicione as seguintes dependências no arquivo 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>
Obtenha a connection string da variável de ambiente e adicione o nome do plugin para se ligar à base de dados:
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&defaultAuthenticationPlugin=" +
pluginName + "&authenticationPlugins=" + pluginName);
Para mais informações, consulte Use Java e JDBC com Azure Database for MySQL - Servidor Flexível.
Instale dependências.
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
Autentique-se com um token de acesso da azure-identity biblioteca. Obtenha as informações de conexão da variável de ambiente adicionada pelo Service Connector. Ao usar o código abaixo, certifique-se de descomentar a parte do trecho de código que corresponde ao tipo de autenticação que você deseja usar.
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines according to the authentication type.
# 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)
# 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()
Instale dependências.
npm install --save @azure/identity
npm install --save mysql2
Obtenha um token de acesso usando @azure/identity e a informação da Azure da base de dados MySQL a partir das variáveis de ambiente adicionadas pelo Service Connector. Ao usar o código abaixo, certifique-se de descomentar a parte do trecho de código que corresponde ao tipo de autenticação que você deseja usar.
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines according to the authentication type.
// 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
// });
// 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');
});
Para obter mais exemplos de código, consulte Criar uma conexão sem senha com um serviço de banco de dados por meio do Service Connector.
No seu código, a conectividade à Azure Base de Dados para PostgreSQL segue o padrão DefaultAzureCredential para todas as stacks de linguagem.
DefaultAzureCredential é suficientemente flexível para se adaptar tanto ao ambiente de desenvolvimento como ao ambiente Azure. Quando está a correr localmente, pode recuperar o utilizador Azure com sessão logada a partir do ambiente que preferir (Visual Studio, Visual Studio Code, Azure CLI ou Azure PowerShell). Quando é executado no Azure, recupera a identidade gerida. Assim, é possível ter conectividade com o banco de dados tanto no momento do desenvolvimento quanto na produção. O padrão é o seguinte:
- Instanciar um
DefaultAzureCredential a partir da biblioteca cliente Azure Identity. Se você estiver usando uma identidade atribuída pelo usuário, especifique a ID do cliente da identidade.
- Obtenha um token de acesso para Azure Database for PostgreSQL:
https://ossrdbms-aad.database.windows.net/.default.
- Adiciona o token à tua cadeia de ligação.
- Abra a conexão.
Para .NET, obtenha um token de acesso para a identidade gerida usando uma biblioteca cliente como Azure. Identidade. Em seguida, use o token de acesso como uma senha para se conectar ao banco de dados. Ao usar o código abaixo, certifique-se de descomentar a parte do trecho de código que corresponde ao tipo de autenticação que você deseja usar.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// 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();
}
Adicione as seguintes dependências no arquivo 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>
Obtenha a connection string das variáveis de ambiente e adicione o nome do plugin para ligar à base de dados:
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);
Para obter mais informações, consulte os seguintes recursos:
Instale dependências.
pip install azure-identity
pip install psycopg2-binary
Autentique-se com um token de acesso da azure-identity biblioteca e use o token como senha. Obtenha as informações de conexão das variáveis de ambiente adicionadas pelo Service Connector. Ao usar o código abaixo, certifique-se de descomentar a parte do trecho de código que corresponde ao tipo de autenticação que você deseja usar.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines according to the authentication type.
# 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)
# 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)
Para obter mais informações, consulte os seguintes recursos:
Instale dependências.
npm install --save @azure/identity
npm install --save pg
No código, obtenha o token de acesso via @azure/identity e informações de conexão PostgreSQL de variáveis de ambiente adicionadas pelo serviço Service Connector. Combine-os para estabelecer a conexão. Ao usar o código abaixo, certifique-se de descomentar a parte do trecho de código que corresponde ao tipo de autenticação que você deseja usar.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
const { Client } = require('pg');
// Uncomment the following lines according to the authentication type.
// 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
// });
// 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();
})();
Para obter mais exemplos de código, consulte Criar uma conexão sem senha com um serviço de banco de dados por meio do Service Connector.
4. Configure seu ambiente de desenvolvimento
Este código de exemplo usa DefaultAzureCredential para obter um token utilizável para a tua base de dados de Azure a partir de Microsoft Entra ID e depois adiciona-o à ligação à base de dados. Embora você possa personalizar DefaultAzureCredential, ele já é versátil por padrão. Recebe um token do utilizador Microsoft Entra iniciado ou de uma identidade gerida, dependendo se o executa localmente no seu ambiente de desenvolvimento ou no App Service.
Sem mais alterações, o seu código está pronto para ser executado no Azure. Para depurar o seu código localmente, no entanto, o seu ambiente de desenvolvimento precisa de um utilizador Microsoft Entra com sessão iniciada. Neste passo, configura o ambiente de sua escolha iniciando sessão com o seu utilizador Microsoft Entra.
O Visual Studio para Windows está integrado com a autenticação Microsoft Entra. Para ativar o desenvolvimento e a depuração no Visual Studio, adicione o seu utilizador Microsoft Entra no Visual Studio selecionando File>Definições da Conta no menu, e selecione Iniciar sessão ou Adicionar.
Para definir o utilizador Microsoft Entra para autenticação de serviço Azure, selecione Tools>Opções no menu, depois selecione Azure Autenticação de Serviço>Seleção de Conta. Selecione o utilizador Microsoft Entra que adicionou e selecione OK.
Visual Studio para Mac não é integrado com a autenticação Microsoft Entra. No entanto, a biblioteca cliente Azure Identity que vais usar mais tarde também pode recuperar tokens do Azure CLI. Para permitir o desenvolvimento e a depuração no Visual Studio, instala Azure CLI na tua máquina local.
Inicie sessão no Azure CLI com o seguinte comando usando o seu utilizador Microsoft Entra:
az login --allow-no-subscriptions
O Visual Studio Code está integrado com autenticação Microsoft Entra através da extensão Azure. Instale a extensão Azure Tools no Visual Studio Code.
No Visual Studio Code, na barra Activity, selecione o logótipo Azure.
No explorador App Service, selecione Iniciar sessão para Azure... e siga as instruções.
A biblioteca cliente Azure Identity que vais usar mais tarde pode usar tokens do Azure CLI. Para permitir o desenvolvimento baseado na linha de comandos, instala Azure CLI na tua máquina local.
Inicie sessão no Azure com o seguinte comando usando o seu utilizador Microsoft Entra:
az login --allow-no-subscriptions
A biblioteca cliente Azure Identity que vais usar mais tarde pode usar tokens do Azure PowerShell. Para permitir o desenvolvimento baseado na linha de comandos, instala Azure PowerShell na tua máquina local.
Inicie sessão no Azure CLI com o seguinte cmdlet usando o seu utilizador Microsoft Entra:
Connect-AzAccount
Para mais informações sobre como configurar o seu ambiente de desenvolvimento para autenticação Microsoft Entra, consulte a Biblioteca de Cliente de Identidade Azure para .NET.
Agora está pronto para desenvolver e depurar a sua aplicação com a base de dados SQL como back-end, usando autenticação Microsoft Entra.
5. Teste e publique
Execute seu código em seu ambiente de desenvolvimento. O seu código utiliza o utilizador Microsoft Entra autenticado no seu ambiente para se ligar à base de dados de back-end. O utilizador pode aceder à base de dados porque está configurado como administrador do Microsoft Entra para a base de dados.
Publique o seu código no Azure usando o método de publicação preferido. No Serviço de Aplicativo, seu código usa a identidade gerenciada do aplicativo para se conectar ao banco de dados back-end.
Perguntas mais frequentes
A identidade gerida suporta SQL Server?
Sim. Para obter mais informações, consulte:
Recebo o erro Login failed for user '<token-identified principal>'.
A identidade gerida para a qual está a tentar pedir um token não está autorizada a aceder à base de dados do Azure.
Fiz alterações na autenticação do Serviço de Aplicativo ou no registro do aplicativo associado. Por que ainda recebo o token antigo?
Os serviços back-end de identidades gerenciadas também mantêm um cache de token que atualiza o token para um recurso de destino somente quando ele expira. Se você modificar a configuração depois de tentar obter um token com seu aplicativo, não obterá um novo token com as permissões atualizadas até que o token armazenado em cache expire. A melhor maneira de contornar isso é testar suas alterações com uma nova janela InPrivate (Edge)/private (Safari)/Incognito (Chrome). Dessa forma, você certamente começará a partir de uma nova sessão autenticada.
Como posso adicionar a identidade gerida a um grupo Microsoft Entra?
Se quiser, pode adicionar a identidade a um grupo Microsoft Entra, e depois conceder acesso ao grupo Microsoft Entra em vez da identidade. Por exemplo, os comandos a seguir adicionam a identidade gerenciada da etapa anterior a um novo grupo chamado myAzureSQLDBAccessGroup:
groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
Para conceder permissões de base de dados a um grupo Microsoft Entra, consulte a documentação do respetivo tipo de base de dados.
Eu recebo o erro SSL connection is required. Please specify SSL options and retry.
A ligação à base de dados do Azure requer definições adicionais e está fora do âmbito deste tutorial. Para obter mais informações, consulte um dos seguintes links:
Configurar a conectividade TLS em Azure Database for PostgreSQL - Servidor ÚnicoConfigure a conectividade SSL na sua aplicação para se ligar de forma segura ao Azure Database for MySQL
O Service Connector precisa de acesso à rede para o banco de dados para conceder acesso à identidade do aplicativo. Quando cria uma aplicação segura por defeito e uma arquitetura de base de dados no portal Azure com o modelo Web App + Base de Dados, a arquitetura bloqueia o acesso à rede à base de dados e só permite ligações dentro da rede virtual. Também é verdade para o Azure Cloud Shell. No entanto, podes deploy Cloud Shell na rede virtual e depois executar o comando Service Connector nessa Cloud Shell.
Próximos passos
O que aprendeu:
- Configure um utilizador Microsoft Entra como administrador para a sua base de dados Azure.
- Ligue-se à sua base de dados como utilizador do Microsoft Entra.
- Configure uma identidade gerenciada atribuída pelo sistema ou pelo usuário para um aplicativo do Serviço de Aplicativo.
- Conceda acesso ao banco de dados à identidade gerenciada.
- Liga-te à base de dados Azure a partir do teu código (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando uma identidade gerida.
- Ligue-se à base de dados Azure a partir do seu ambiente de desenvolvimento usando o utilizador Microsoft Entra.