Este artigo aborda métodos de autenticação com suporte, clientes e código de exemplo que você pode usar para conectar seus aplicativos ao Banco de Dados do Azure para PostgreSQL usando o Service Connector. Neste artigo, você também encontrará nomes, valores e configuração de variáveis de ambiente padrão obtidos ao criar conexões de serviço.
Serviço de computação com suporte
O Conector de Serviço pode ser usado para conectar os seguintes serviços de computação ao Banco de Dados do Azure para PostgreSQL:
- Serviço de Aplicativo do Azure
- Aplicativos de Contêiner do Azure
- Azure Functions
- AKS (Serviço de Kubernetes do Azure)
- Aplicativos Spring do Azure
Tipos de autenticação e tipos de cliente suportados
A tabela a seguir mostra quais combinações de métodos de autenticação e clientes têm suporte para conectar serviços de computação ao Banco de Dados do Azure para PostgreSQL usando o Service Connector. “Sim” indica que a combinação tem suporte e “Não” indica que ela não tem.
| Tipo de cliente |
Identidade gerenciada atribuída pelo sistema |
Identidade gerenciada atribuída pelo usuário |
Cadeia de conexão/segredo |
Entidade de serviço |
| .NET |
Sim |
Sim |
Sim |
Sim |
| Go (pg) |
Sim |
Sim |
Sim |
Sim |
| Java (JDBC) |
Sim |
Sim |
Sim |
Sim |
| Java – Spring Boot (JDBC) |
Sim |
Sim |
Sim |
Sim |
| Node.js (pg) |
Sim |
Sim |
Sim |
Sim |
| PHP (nativo) |
Sim |
Sim |
Sim |
Sim |
| Python (psycopg2) |
Sim |
Sim |
Sim |
Sim |
| Python-Django |
Sim |
Sim |
Sim |
Sim |
| Ruby (ruby-pg) |
Sim |
Sim |
Sim |
Sim |
| Nenhum |
Sim |
Sim |
Sim |
Sim |
Observação
A identidade gerenciada atribuída pelo sistema, a identidade gerenciada atribuída pelo usuário e a entidade de serviço têm suporte apenas na CLI do Azure.
Nomes de variáveis de ambiente padrão ou propriedades de aplicativo e código de exemplo
Faça referência aos detalhes da conexão e ao código de exemplo nas tabelas a seguir, de acordo com o tipo de autenticação e o tipo de cliente da conexão. Para saber mais sobre as convenções de nomenclatura, confira o artigo Detalhes internos do Conector de Serviço.
Identidade gerenciada atribuída pelo sistema
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Propriedades do aplicativo |
Descrição |
Valor de exemplo |
spring.datasource.azure.passwordless-enabled |
Habilitar a autenticação sem senha |
true |
spring.datasource.url |
URL do banco de dados |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nome de usuário do banco de dados |
username |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_NAME |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nome de usuário do banco de dados |
<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do PostgreSQL nativa do PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
Código de exemplo
Consulte as etapas e o código abaixo para se conectar ao Banco de Dados do Azure para PostgreSQL usando uma identidade gerenciada atribuída pelo sistema.
Para o .NET, não existe um plug-in ou biblioteca que dê suporte a conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou entidade de serviço usando a biblioteca de clientes como Azure.Identity. Em seguida, você pode utilizar o token de acesso como senha para se conectar ao banco de dados. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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();
}
Adicione as seguintes dependências no seu 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 cadeia de conexão de variáveis de ambiente e adicione o nome do plug-in para se conectar ao banco 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 saber mais, consulte os recursos a seguir:
Instale as dependências.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenha o token de acesso usando a biblioteca azure-identity e use o token como senha. Obtenha informações de conexão das variáveis de ambiente adicionadas pelo Conector de Serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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)
Instale as dependências.
pip install azure-identity
Obtenha o token de acesso usando a biblioteca azure-identity usando variáveis de ambiente adicionadas pelo conector de serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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')
No arquivo de configuração, obtenha as informações do banco de dados PostgreSQL do Azure das variáveis de ambiente adicionadas pelo serviço do Conector de Serviço. Use accessToken adquirido na etapa anterior para acessar o banco de dados.
# 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'},
}
}
Instale as dependências.
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"
No código, obtenha o token de acesso usando azidentity e use-o como senha para se conectar ao PostgreSQL do Azure, juntamente com as informações de conexão fornecidas pelo conector de serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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()
Instale as dependências.
npm install --save @azure/identity
npm install --save pg
No código, obtenha o token de acesso usando @azure/identity e as informações de conexão do PostgreSQL de variáveis de ambiente adicionadas pelo serviço do conector de serviço. Conectar-se a eles para estabelecer a conexão. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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();
})();
Para o PHP, não existe um plug-in ou uma biblioteca para conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou a entidade de serviço e usá-lo como senha para se conectar ao banco de dados. O token de acesso pode ser adquirido utilizando a API REST do Azure.
No código, obtenha o token de acesso usando a API REST com sua biblioteca favorita.
Para identidade atribuída pelo usuário e identidade atribuída pelo sistema, o Serviço de Aplicativo do Azure e os Aplicativos de Contêiner do Azure fornecem um ponto de extremidade REST acessível internamente para recuperar tokens para identidades gerenciadas definindo duas variáveis de ambiente: IDENTITY_ENDPOINT e IDENTITY_HEADER. Para obter mais informações, consulte a referência do ponto de extremidade REST.
Obtenha o token de acesso fazendo uma solicitação HTTP GET para o ponto de extremidade de identidade e utilize https://ossrdbms-aad.database.windows.net como resource na consulta. Para a identidade atribuída pelo usuário, inclua também na consulta a ID do cliente das variáveis de ambiente adicionadas pelo Conector de Serviço.
Para entidades de serviço, consulte a solicitação de token de acesso de serviço para o serviço do Microsoft Azure AD para ver os detalhes de como adquirir o token de acesso. Faça a solicitação POST no escopo de https://ossrdbms-aad.database.windows.net/.default e com a ID de Locatário, a ID de Cliente e o segredo do cliente da entidade de serviço das variáveis de ambiente adicionadas pelo Conector de Serviço.
Combine o token de acesso e a cadeia de conexão PostgreSQL de variáveis de ambiente adicionadas pelo serviço Service Connector para estabelecer a conexão.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Para o Ruby, não existe um plug-in ou uma biblioteca para conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou a entidade de serviço e usá-lo como senha para se conectar ao banco de dados. O token de acesso pode ser adquirido utilizando a API REST do Azure.
Instale as dependências.
gem install pg
No código, obtenha o token de acesso usando a API REST e as informações de conexão do PostgreSQL de variáveis de ambiente adicionadas pelo serviço do conector de serviço. Conectar-se a eles para estabelecer a conexão. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
Azure App Service e Azure Container Apps fornecem um endpoint REST acessível de forma interna para recuperar tokens para identidades gerenciadas. Para obter mais informações, consulte a referência do ponto de extremidade 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,
)
Consulte a solicitação de token de acesso serviço a serviço do Azure AD para ver mais detalhes sobre como adquirir o token de acesso para a entidade de serviço.
Em seguida, se você tiver criado tabelas e sequências no servidor flexível PostgreSQL, precisará se conectar como proprietário do banco de dados e conceder permissão a <aad-username> criado pelo Conector do Serviço. O nome de usuário da cadeia de conexão ou da configuração definida pelo Conector de Serviço deve ser semelhante a aad_<connection name>. Se você usar o portal do Azure, selecione o botão expandir ao lado da coluna Service Type e obtenha o valor. Se você usar a CLI do Azure, verifique configurations na saída do comando da 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>\";"
O <owner-username> e a <owner-password> são os proprietários da tabela existente que pode conceder permissão a outras pessoas.
O <aad-username> é o usuário criado pelo Conector de Serviço. Substitua-os pelo valor real.
Você pode validar 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
Identidade gerenciada atribuída pelo usuário
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Propriedades do aplicativo |
Descrição |
Valor de exemplo |
spring.datasource.azure.passwordless-enabled |
Habilitar a autenticação sem senha |
true |
spring.cloud.azure.credential.client-id |
Sua ID de cliente |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Habilitar a identidade gerenciada do cliente |
true |
spring.datasource.url |
URL do banco de dados |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nome de usuário do banco de dados |
username |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_NAME |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<<identity-client-ID>> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do PostgreSQL nativa do PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
Código de exemplo
Consulte as etapas e o código abaixo para se conectar ao Banco de Dados do Azure para PostgreSQL usando uma identidade gerenciada atribuída pelo usuário.
Para o .NET, não existe um plug-in ou biblioteca que dê suporte a conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou entidade de serviço usando a biblioteca de clientes como Azure.Identity. Em seguida, você pode utilizar o token de acesso como senha para se conectar ao banco de dados. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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();
}
Adicione as seguintes dependências no seu 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 cadeia de conexão de variáveis de ambiente e adicione o nome do plug-in para se conectar ao banco 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 saber mais, consulte os recursos a seguir:
Instale as dependências.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenha o token de acesso usando a biblioteca azure-identity e use o token como senha. Obtenha informações de conexão das variáveis de ambiente adicionadas pelo Conector de Serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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)
Instale as dependências.
pip install azure-identity
Obtenha o token de acesso usando a biblioteca azure-identity usando variáveis de ambiente adicionadas pelo conector de serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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')
No arquivo de configuração, obtenha as informações do banco de dados PostgreSQL do Azure das variáveis de ambiente adicionadas pelo serviço do Conector de Serviço. Use accessToken adquirido na etapa anterior para acessar o banco de dados.
# 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'},
}
}
Instale as dependências.
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"
No código, obtenha o token de acesso usando azidentity e use-o como senha para se conectar ao PostgreSQL do Azure, juntamente com as informações de conexão fornecidas pelo conector de serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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()
Instale as dependências.
npm install --save @azure/identity
npm install --save pg
No código, obtenha o token de acesso usando @azure/identity e as informações de conexão do PostgreSQL de variáveis de ambiente adicionadas pelo serviço do conector de serviço. Conectar-se a eles para estabelecer a conexão. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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();
})();
Para o PHP, não existe um plug-in ou uma biblioteca para conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou a entidade de serviço e usá-lo como senha para se conectar ao banco de dados. O token de acesso pode ser adquirido utilizando a API REST do Azure.
No código, obtenha o token de acesso usando a API REST com sua biblioteca favorita.
Para identidade atribuída pelo usuário e identidade atribuída pelo sistema, o Serviço de Aplicativo do Azure e os Aplicativos de Contêiner do Azure fornecem um ponto de extremidade REST acessível internamente para recuperar tokens para identidades gerenciadas definindo duas variáveis de ambiente: IDENTITY_ENDPOINT e IDENTITY_HEADER. Para obter mais informações, consulte a referência do ponto de extremidade REST.
Obtenha o token de acesso fazendo uma solicitação HTTP GET para o ponto de extremidade de identidade e utilize https://ossrdbms-aad.database.windows.net como resource na consulta. Para a identidade atribuída pelo usuário, inclua também na consulta a ID do cliente das variáveis de ambiente adicionadas pelo Conector de Serviço.
Para entidades de serviço, consulte a solicitação de token de acesso de serviço para o serviço do Microsoft Azure AD para ver os detalhes de como adquirir o token de acesso. Faça a solicitação POST no escopo de https://ossrdbms-aad.database.windows.net/.default e com a ID de Locatário, a ID de Cliente e o segredo do cliente da entidade de serviço das variáveis de ambiente adicionadas pelo Conector de Serviço.
Combine o token de acesso e a cadeia de conexão PostgreSQL de variáveis de ambiente adicionadas pelo serviço Service Connector para estabelecer a conexão.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Para o Ruby, não existe um plug-in ou uma biblioteca para conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou a entidade de serviço e usá-lo como senha para se conectar ao banco de dados. O token de acesso pode ser adquirido utilizando a API REST do Azure.
Instale as dependências.
gem install pg
No código, obtenha o token de acesso usando a API REST e as informações de conexão do PostgreSQL de variáveis de ambiente adicionadas pelo serviço do conector de serviço. Conectar-se a eles para estabelecer a conexão. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
O Serviço de Aplicativo do Azure e os Aplicativos de Contêiner do Azure fornecem um ponto de extremidade REST acessível internamente para recuperar tokens para identidades gerenciadas. Para obter mais informações, consulte a referência do ponto de extremidade 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,
)
Consulte a solicitação de token de acesso serviço a serviço do Azure AD para ver mais detalhes sobre como adquirir o token de acesso para a entidade de serviço.
Em seguida, se você tiver criado tabelas e sequências no servidor flexível PostgreSQL, precisará se conectar como proprietário do banco de dados e conceder permissão a <aad-username> criado pelo Conector do Serviço. O nome de usuário da cadeia de conexão ou da configuração definida pelo Conector de Serviço deve ser semelhante a aad_<connection name>. Se você usar o portal do Azure, selecione o botão expandir ao lado da coluna Service Type e obtenha o valor. Se você usar a CLI do Azure, verifique configurations na saída do comando da 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>\";"
O <owner-username> e a <owner-password> são os proprietários da tabela existente que pode conceder permissão a outras pessoas.
O <aad-username> é o usuário criado pelo Conector de Serviço. Substitua-os pelo valor real.
Você pode validar 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
Cadeia de conexão
Aviso
A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento exige um grau muito alto de confiança no aplicativo e traz riscos que não estão presentes em outros fluxos. Você só deve usar esse fluxo quando outros fluxos mais seguros, como identidades gerenciadas, não forem viáveis.
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
| Propriedades do aplicativo |
Descrição |
Valor de exemplo |
spring.datasource.url |
URL do banco de dados |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nome de usuário do banco de dados |
<username> |
spring.datasource.password |
Senha do banco de dados |
<password> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_NAME |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Senha do banco de dados |
<database-password> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Senha do banco de dados |
<password> |
AZURE_POSTGRESQL_DATABASE |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do PostgreSQL nativa do PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
Senha do banco de dados |
<password> |
Código de exemplo
Consulte as etapas e o código abaixo para se conectar ao Banco de Dados do Azure para PostgreSQL usando uma cadeia de conexão.
- Instalar dependências seguindo as diretrizes do Npgsql
- No código, obtenha a cadeia de conexão do PostgreSQL das variáveis de ambiente adicionadas pelo Conector de Serviço.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Instale dependências seguindo as diretrizes pgJDBC.
- No código, obtenha a cadeia de conexão do PostgreSQL das variáveis de ambiente adicionadas pelo Conector de Serviço.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
String connectionString = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
Connection connection = null;
try {
connection = DriverManager.getConnection(connectionString);
System.out.println("Connection successful!");
} catch (SQLException e){
System.out.println(e.getMessage());
}
- Instale o módulo Spring Cloud Azure Starter JDBC PostgreSQL adicionando as seguintes dependências ao seu arquivo
pom.xml. Encontre a versão do Spring Cloud Azure aqui.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-dependencies</artifactId>
<version>5.20.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
- Configure um aplicativo Spring Boot, mais detalhes nesta seção.
- Instale dependências seguindo as diretrizes do psycopg2.
- No código, obtenha as informações de conexão postgreSQL de variáveis de ambiente adicionadas pelo Service Connector.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Instale dependências seguindo as diretrizes do Django e as diretrizes do psycopg2.
pip install django
pip install psycopg2
- No arquivo de configuração, obtenha as informações do banco de dados PostgreSQL de variáveis de ambiente adicionadas pelo Service Connector.
# in your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = os.getenv('AZURE_POSTGRESQL_PASSWORD')
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'},
}
}
- Instale as dependências.
go get github.com/lib/pq
- No código, obtenha a cadeia de conexão do PostgreSQL das variáveis de ambiente adicionadas pelo Conector de Serviço.
import (
"database/sql"
"fmt"
"os"
_ "github.com/lib/pq"
)
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
- Instale as dependências.
npm install pg dotenv
- No código, obtenha as informações de conexão postgreSQL de variáveis de ambiente adicionadas pelo Service Connector.
import { Client } from 'pg';
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: process.env.AZURE_POSTGRESQL_PASSWORD,
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();
})();
- No código, obtenha as informações de conexão postgreSQL de variáveis de ambiente adicionadas pelo Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Instale as dependências.
gem install pg
- No código, obtenha as informações de conexão postgreSQL de variáveis de ambiente adicionadas pelo Service Connector.
require 'pg'
require 'dotenv/load'
begin
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'],
)
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Entidade de serviço
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Propriedades do aplicativo |
Descrição |
Valor de exemplo |
spring.datasource.azure.passwordless-enabled |
Habilitar a autenticação sem senha |
true |
spring.cloud.azure.credential.client-id |
Sua ID de cliente |
<client-ID> |
spring.cloud.azure.credential.client-secret |
O segredo do cliente |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
Sua ID de locatário |
<tenant-ID> |
spring.datasource.url |
URL do banco de dados |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nome de usuário do banco de dados |
username |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_NAME |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O SEGREDO do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do PostgreSQL nativa do PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão do Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_HOST |
URL do host do banco de dados |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nome de usuário do banco de dados |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nome do banco de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Sua ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Sua ID de locatário |
<tenant-ID> |
Código de exemplo
Consulte as etapas e o código abaixo para se conectar ao Banco de Dados do Azure para PostgreSQL usando uma entidade de serviço.
Para o .NET, não existe um plug-in ou biblioteca que dê suporte a conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou entidade de serviço usando a biblioteca de clientes como Azure.Identity. Em seguida, você pode utilizar o token de acesso como senha para se conectar ao banco de dados. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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();
}
Adicione as seguintes dependências no seu 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 cadeia de conexão de variáveis de ambiente e adicione o nome do plug-in para se conectar ao banco 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 saber mais, consulte os recursos a seguir:
Instale as dependências.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenha o token de acesso usando a biblioteca azure-identity e use o token como senha. Obtenha informações de conexão das variáveis de ambiente adicionadas pelo Conector de Serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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)
Instale as dependências.
pip install azure-identity
Obtenha o token de acesso usando a biblioteca azure-identity usando variáveis de ambiente adicionadas pelo conector de serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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')
No arquivo de configuração, obtenha as informações do banco de dados PostgreSQL do Azure das variáveis de ambiente adicionadas pelo serviço do Conector de Serviço. Use accessToken adquirido na etapa anterior para acessar o banco de dados.
# 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'},
}
}
Instale as dependências.
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"
No código, obtenha o token de acesso usando azidentity e use-o como senha para se conectar ao PostgreSQL do Azure, juntamente com as informações de conexão fornecidas pelo conector de serviço. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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()
Instale as dependências.
npm install --save @azure/identity
npm install --save pg
No código, obtenha o token de acesso usando @azure/identity e as informações de conexão do PostgreSQL de variáveis de ambiente adicionadas pelo serviço do conector de serviço. Conectar-se a eles para estabelecer a conexão. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
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();
})();
Para o PHP, não existe um plug-in ou uma biblioteca para conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou a entidade de serviço e usá-lo como senha para se conectar ao banco de dados. O token de acesso pode ser adquirido utilizando a API REST do Azure.
No código, obtenha o token de acesso usando a API REST com sua biblioteca favorita.
Para identidade atribuída pelo usuário e identidade atribuída pelo sistema, o Serviço de Aplicativo do Azure e os Aplicativos de Contêiner do Azure fornecem um ponto de extremidade REST acessível internamente para recuperar tokens para identidades gerenciadas definindo duas variáveis de ambiente: IDENTITY_ENDPOINT e IDENTITY_HEADER. Para obter mais informações, consulte a referência do ponto de extremidade REST.
Obtenha o token de acesso fazendo uma solicitação HTTP GET para o ponto de extremidade de identidade e utilize https://ossrdbms-aad.database.windows.net como resource na consulta. Para a identidade atribuída pelo usuário, inclua também na consulta a ID do cliente das variáveis de ambiente adicionadas pelo Conector de Serviço.
Para entidades de serviço, consulte a solicitação de token de acesso de serviço para o serviço do Microsoft Azure AD para ver os detalhes de como adquirir o token de acesso. Faça a solicitação POST no escopo de https://ossrdbms-aad.database.windows.net/.default e com a ID de Locatário, a ID de Cliente e o segredo do cliente da entidade de serviço das variáveis de ambiente adicionadas pelo Conector de Serviço.
Combine o token de acesso e a cadeia de conexão PostgreSQL de variáveis de ambiente adicionadas pelo serviço Service Connector para estabelecer a conexão.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Para o Ruby, não existe um plug-in ou uma biblioteca para conexões sem senha. Você pode obter um token de acesso para a identidade gerenciada ou a entidade de serviço e usá-lo como senha para se conectar ao banco de dados. O token de acesso pode ser adquirido utilizando a API REST do Azure.
Instale as dependências.
gem install pg
No código, obtenha o token de acesso usando a API REST e as informações de conexão do PostgreSQL de variáveis de ambiente adicionadas pelo serviço do conector de serviço. Conectar-se a eles para estabelecer a conexão. Ao usar o código abaixo, remova a marca de comentário da parte do trecho de código referente ao tipo de autenticação que você quer usar.
O Serviço de Aplicativo do Azure e os Aplicativos de Contêiner do Azure fornecem um ponto de extremidade REST acessível internamente para recuperar tokens para identidades gerenciadas. Para obter mais informações, consulte a referência do ponto de extremidade 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,
)
Consulte a solicitação de token de acesso serviço a serviço do Azure AD para ver mais detalhes sobre como adquirir o token de acesso para a entidade de serviço.
Em seguida, se você tiver criado tabelas e sequências no servidor flexível PostgreSQL, precisará se conectar como proprietário do banco de dados e conceder permissão a <aad-username> criado pelo Conector do Serviço. O nome de usuário da cadeia de conexão ou da configuração definida pelo Conector de Serviço deve ser semelhante a aad_<connection name>. Se você usar o portal do Azure, selecione o botão expandir ao lado da coluna Service Type e obtenha o valor. Se você usar a CLI do Azure, verifique configurations na saída do comando da 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>\";"
O <owner-username> e a <owner-password> são os proprietários da tabela existente que pode conceder permissão a outras pessoas.
O <aad-username> é o usuário criado pelo Conector de Serviço. Substitua-os pelo valor real.
Você pode validar 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
Próximas etapas
Siga os tutoriais listados abaixo para saber mais sobre o conector de serviço.