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ções de variáveis de ambiente padrão obtidos ao criar conexões de serviço.
Serviços de computação suportados
O Service Connector pode ser usado para conectar os seguintes serviços de computação ao Banco de Dados do Azure para PostgreSQL:
- Serviço de Aplicações do Azure
- Azure Container Apps
- Funções do Azure
- Serviço Kubernetes do Azure (AKS)
- Azure Spring Apps
Tipos de autenticação e tipos de cliente suportados
A tabela abaixo 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. Um "Sim" indica que a combinação é suportada, enquanto um "Não" indica que ela não é suportada.
| Tipo de cliente |
Identidade gerida atribuída pelo sistema |
Identidade gerida atribuída pelo utilizador |
Segredo/cadeia de conexão |
Service principal (Principal de serviço) |
| .NET |
Sim |
Sim |
Sim |
Sim |
| Ir (pg) |
Sim |
Sim |
Sim |
Sim |
| Java (JDBC) |
Sim |
Sim |
Sim |
Sim |
| Java - Inicialização Spring (JDBC) |
Sim |
Sim |
Sim |
Sim |
| Node.js (pág.) |
Sim |
Sim |
Sim |
Sim |
| PHP (nativo) |
Sim |
Sim |
Sim |
Sim |
| Python (psycopg2) |
Sim |
Sim |
Sim |
Sim |
| Python-Django |
Sim |
Sim |
Sim |
Sim |
| Rubi (rubi-pg) |
Sim |
Sim |
Sim |
Sim |
| Nenhuma |
Sim |
Sim |
Sim |
Sim |
Nota
A identidade gerenciada atribuída pelo sistema, a identidade gerenciada atribuída pelo usuário e a entidade de serviço são suportadas apenas na CLI do Azure.
Nomes de variáveis de ambiente padrão ou propriedades de aplicativo e código de exemplo
Consulte os detalhes da conexão e o código de exemplo nas tabelas a seguir, de acordo com o tipo de autenticação e o tipo de cliente da sua conexão. Para obter mais informações sobre convenções de nomenclatura, consulte o artigo interno do Service Connector.
Identidade gerida atribuída pelo sistema
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão .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 JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Propriedades da aplicação |
Descrição |
Valor de exemplo |
spring.datasource.azure.passwordless-enabled |
Habilite a autenticação sem senha |
true |
spring.datasource.url |
URL da base 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 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 da base 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 |
Vá para a cadeia de conexão 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 da base 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 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 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 da base 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 ao sistema.
Para o .NET, não há um plug-in ou biblioteca para suportar conexões sem senha. Você pode obter um token de acesso para a identidade gerida ou entidade de serviço usando uma biblioteca cliente como Azure.Identity. Em seguida, você pode usar o token de acesso como senha para se conectar ao banco de dados. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 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 das 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 obter mais informações, consulte os seguintes recursos:
Instale 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 azure-identity a biblioteca e use o token como senha. Obtenha informações de conexão das variáveis de ambiente adicionadas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 dependências.
pip install azure-identity
Obtenha o token de acesso usando azure-identity a biblioteca usando variáveis de ambiente adicionadas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 informações do banco de dados PostgreSQL do Azure de variáveis de ambiente adicionadas pelo serviço Service Connector. Utilização accessToken adquirida no passo anterior para aceder à base 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 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 azidentityo e, em seguida, use-o como senha para se conectar ao Azure PostgreSQL junto com as informações de conexão fornecidas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 dependências.
npm install --save @azure/identity
npm install --save pg
No código, obtenha o token de acesso usando @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, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 PHP, não há um plugin ou 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 usando 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 utilizador e identidade atribuída pelo sistema, o Azure App Service e o Azure Container Apps fornecem um endpoint REST internamente acessível para recuperar tokens para identidades geridas, definindo duas variáveis de ambiente: IDENTITY_ENDPOINT e IDENTITY_HEADER. Para obter mais informações, consulte 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 use https://ossrdbms-aad.database.windows.net como resource na consulta. Para identidade atribuída pelo usuário, inclua também o ID do cliente das variáveis de ambiente adicionadas pelo Service Connector na consulta.
Para principal de serviço, consulte a solicitação do token de acesso de serviço a serviço do Azure AD para ver os detalhes de como adquirir o token de acesso. Faça da solicitação POST o escopo e com a ID do https://ossrdbms-aad.database.windows.net/.default locatário, a ID do cliente e o segredo do cliente da entidade de serviço a partir das variáveis de ambiente adicionadas pelo Service Connector.
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 Ruby, não há um plugin ou 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 usando a API REST do Azure.
Instale dependências.
gem install pg
No código, obtenha o token de acesso usando a API REST 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, descomente a parte do trecho de código para o tipo de autenticação que você deseja usar.
O Azure App Service e o Azure Container Apps fornecem um endpoint REST internamente acessível para recuperar tokens para identidades geridas. Para obter mais informações, consulte 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 de serviço a serviço do Azure AD para ver mais detalhes sobre como obter um token de acesso para o principal do serviço.
Em seguida, se você criou tabelas e sequências no servidor flexível PostgreSQL antes de usar o Service Connector, precisará se conectar como proprietário e conceder permissão para <aad-username> criar pelo Service Connector. O nome de usuário da cadeia de conexão ou configuração definida pelo Service Connector deve se parecer com aad_<connection name>. Se você usar o portal do Azure, selecione o botão de expansão ao lado da Service Type coluna e obtenha o valor. Se você usar a CLI do Azure, verifique configurations a 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>\";"
O <owner-username> e <owner-password> é o proprietário da tabela existente que pode 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
Identidade gerida atribuída pelo utilizador
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão .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 |
O seu ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Propriedades da aplicação |
Descrição |
Valor de exemplo |
spring.datasource.azure.passwordless-enabled |
Habilite a autenticação sem senha |
true |
spring.cloud.azure.credential.client-id |
O seu ID de cliente |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Habilitar identidade gerenciada pelo cliente |
true |
spring.datasource.url |
URL da base 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 |
O seu ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão 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 da base 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 |
O seu ID de cliente |
<<identity-client-ID>> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Vá para a cadeia de conexão 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 da base de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<identity-client-ID> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão 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 |
O seu ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão 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 da base de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
O seu 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 há um plug-in ou biblioteca para suportar conexões sem senha. Você pode obter um token de acesso para a identidade gerida ou entidade de serviço usando uma biblioteca cliente como Azure.Identity. Em seguida, você pode usar o token de acesso como senha para se conectar ao banco de dados. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 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 das 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 obter mais informações, consulte os seguintes recursos:
Instale 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 azure-identity a biblioteca e use o token como senha. Obtenha informações de conexão das variáveis de ambiente adicionadas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 dependências.
pip install azure-identity
Obtenha o token de acesso usando azure-identity a biblioteca usando variáveis de ambiente adicionadas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 informações do banco de dados PostgreSQL do Azure de variáveis de ambiente adicionadas pelo serviço Service Connector. Utilização accessToken adquirida no passo anterior para aceder à base 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 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 azidentityo e, em seguida, use-o como senha para se conectar ao Azure PostgreSQL junto com as informações de conexão fornecidas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 dependências.
npm install --save @azure/identity
npm install --save pg
No código, obtenha o token de acesso usando @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, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 PHP, não há um plugin ou 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 usando 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 utilizador e identidade atribuída pelo sistema, o Azure App Service e o Azure Container Apps fornecem um endpoint REST internamente acessível para recuperar tokens para identidades geridas, definindo duas variáveis de ambiente: IDENTITY_ENDPOINT e IDENTITY_HEADER. Para obter mais informações, consulte 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 use https://ossrdbms-aad.database.windows.net como resource na consulta. Para identidade atribuída pelo usuário, inclua também o ID do cliente das variáveis de ambiente adicionadas pelo Service Connector na consulta.
Para principal de serviço, consulte a solicitação do token de acesso de serviço a serviço do Azure AD para ver os detalhes de como adquirir o token de acesso. Faça da solicitação POST o escopo e com a ID do https://ossrdbms-aad.database.windows.net/.default locatário, a ID do cliente e o segredo do cliente da entidade de serviço a partir das variáveis de ambiente adicionadas pelo Service Connector.
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 Ruby, não há um plugin ou 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 usando a API REST do Azure.
Instale dependências.
gem install pg
No código, obtenha o token de acesso usando a API REST 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, descomente a parte do trecho de código para o tipo de autenticação que você deseja usar.
O Azure App Service e o Azure Container Apps fornecem um endpoint REST internamente acessível para recuperar tokens para identidades geridas. Para obter mais informações, consulte 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 de serviço a serviço do Azure AD para ver mais detalhes sobre como obter um token de acesso para o principal do serviço.
Em seguida, se você criou tabelas e sequências no servidor flexível PostgreSQL antes de usar o Service Connector, precisará se conectar como proprietário e conceder permissão para <aad-username> criar pelo Service Connector. O nome de usuário da cadeia de conexão ou configuração definida pelo Service Connector deve se parecer com aad_<connection name>. Se você usar o portal do Azure, selecione o botão de expansão ao lado da Service Type coluna e obtenha o valor. Se você usar a CLI do Azure, verifique configurations a 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>\";"
O <owner-username> e <owner-password> é o proprietário da tabela existente que pode 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
Cadeia de ligação
Aviso
A Microsoft recomenda que você use o fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento requer um grau muito alto de confiança no aplicativo e acarreta 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 .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 JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
| Propriedades da aplicação |
Descrição |
Valor de exemplo |
spring.datasource.url |
URL da base 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 |
Palavra-passe da base de dados |
<password> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão 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 da base 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 |
Palavra-passe da base de dados |
<database-password> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Vá para a cadeia de conexão 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 |
Palavra-passe da base de dados |
<password> |
AZURE_POSTGRESQL_DATABASE |
Nome da base 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 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 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 da base de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
Palavra-passe da base 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 orientações do Npgsql
- No código, obtenha a cadeia de conexão PostgreSQL de variáveis de ambiente adicionadas pelo Service Connector.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Instale dependências seguindo as orientações do pgJDBC.
- No código, obtenha a cadeia de conexão PostgreSQL de variáveis de ambiente adicionadas pelo Service Connector.
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
pom.xml arquivo. 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 orientações do psycopg2.
- No código, obtenha as informações de conexão do PostgreSQL das 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 as dependências de acordo com as orientações do Django e do psycopg2.
pip install django
pip install psycopg2
- No arquivo de configuração, obtenha as informações do banco de dados PostgreSQL das 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 dependências.
go get github.com/lib/pq
- No código, obtenha a cadeia de conexão PostgreSQL de variáveis de ambiente adicionadas pelo Service Connector.
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 dependências.
npm install pg dotenv
- No código, obtenha as informações de conexão do PostgreSQL das 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 do PostgreSQL das variáveis de ambiente adicionadas pelo Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Instale dependências.
gem install pg
- No código, obtenha as informações de conexão do PostgreSQL das 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
Service principal (Principal de serviço)
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão .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 |
O seu ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Propriedades da aplicação |
Descrição |
Valor de exemplo |
spring.datasource.azure.passwordless-enabled |
Habilite a autenticação sem senha |
true |
spring.cloud.azure.credential.client-id |
O seu ID de cliente |
<client-ID> |
spring.cloud.azure.credential.client-secret |
O segredo do seu cliente |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
O seu ID de inquilino |
<tenant-ID> |
spring.datasource.url |
URL da base 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 |
O seu ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão 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 da base 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 |
O seu ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O SEGREDO do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<tenant-ID> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Vá para a cadeia de conexão 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 da base de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<tenant-ID> |
| Nome da variável de ambiente padrão |
Descrição |
Valor de exemplo |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão 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 |
O seu ID de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadeia de conexão 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 da base de dados |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número da porta |
5432 |
AZURE_POSTGRESQL_SSL |
Opção SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
O seu ID de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
O segredo do seu cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
O seu ID de inquilino |
<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 há um plug-in ou biblioteca para suportar conexões sem senha. Você pode obter um token de acesso para a identidade gerida ou entidade de serviço usando uma biblioteca cliente como Azure.Identity. Em seguida, você pode usar o token de acesso como senha para se conectar ao banco de dados. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 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 das 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 obter mais informações, consulte os seguintes recursos:
Instale 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 azure-identity a biblioteca e use o token como senha. Obtenha informações de conexão das variáveis de ambiente adicionadas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 dependências.
pip install azure-identity
Obtenha o token de acesso usando azure-identity a biblioteca usando variáveis de ambiente adicionadas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 informações do banco de dados PostgreSQL do Azure de variáveis de ambiente adicionadas pelo serviço Service Connector. Utilização accessToken adquirida no passo anterior para aceder à base 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 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 azidentityo e, em seguida, use-o como senha para se conectar ao Azure PostgreSQL junto com as informações de conexão fornecidas pelo Service Connector. Ao usar o código abaixo, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 dependências.
npm install --save @azure/identity
npm install --save pg
No código, obtenha o token de acesso usando @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, descomente a parte do trecho de código para o tipo de autenticação que você deseja 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 PHP, não há um plugin ou 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 usando 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 utilizador e identidade atribuída pelo sistema, o Azure App Service e o Azure Container Apps fornecem um endpoint REST internamente acessível para recuperar tokens para identidades geridas, definindo duas variáveis de ambiente: IDENTITY_ENDPOINT e IDENTITY_HEADER. Para obter mais informações, consulte 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 use https://ossrdbms-aad.database.windows.net como resource na consulta. Para identidade atribuída pelo usuário, inclua também o ID do cliente das variáveis de ambiente adicionadas pelo Service Connector na consulta.
Para principal de serviço, consulte a solicitação do token de acesso de serviço a serviço do Azure AD para ver os detalhes de como adquirir o token de acesso. Faça da solicitação POST o escopo e com a ID do https://ossrdbms-aad.database.windows.net/.default locatário, a ID do cliente e o segredo do cliente da entidade de serviço a partir das variáveis de ambiente adicionadas pelo Service Connector.
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 Ruby, não há um plugin ou 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 usando a API REST do Azure.
Instale dependências.
gem install pg
No código, obtenha o token de acesso usando a API REST 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, descomente a parte do trecho de código para o tipo de autenticação que você deseja usar.
O Azure App Service e o Azure Container Apps fornecem um endpoint REST internamente acessível para recuperar tokens para identidades geridas. Para obter mais informações, consulte 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 de serviço a serviço do Azure AD para ver mais detalhes sobre como obter um token de acesso para o principal do serviço.
Em seguida, se você criou tabelas e sequências no servidor flexível PostgreSQL antes de usar o Service Connector, precisará se conectar como proprietário e conceder permissão para <aad-username> criar pelo Service Connector. O nome de usuário da cadeia de conexão ou configuração definida pelo Service Connector deve se parecer com aad_<connection name>. Se você usar o portal do Azure, selecione o botão de expansão ao lado da Service Type coluna e obtenha o valor. Se você usar a CLI do Azure, verifique configurations a 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>\";"
O <owner-username> e <owner-password> é o proprietário da tabela existente que pode 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
Próximos passos
Siga os tutoriais listados abaixo para saber mais sobre o Service Connector.