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
- 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 |
principal de serviço |
| .NET |
Sim |
Sim |
Sim |
Sim |
| Ir para (pág.) |
Sim |
Sim |
Sim |
Sim |
| Java (JDBC) |
Sim |
Sim |
Sim |
Sim |
| Java - Spring Boot (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 ligação do PostgreSQL para .NET |
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 ligação JDBC para 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 |
string de ligaçã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 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 |
Cadeia de ligação PostgreSQL de Go |
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 |
String de ligação do Ruby ao 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 um token de acesso com a biblioteca azure-identity, utilizando 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. Utilize accessToken adquirido 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 um token de acesso com azidentity e, em seguida, utilize-o como palavra-passe para se ligar ao PostgreSQL do Azure, juntamente com as informações de ligaçã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 ao sistema, o Serviço de Aplicações do Azure fornece um endpoint REST acessível internamente 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 um pedido HTTP GET ao endpoint de identidade e utilize https://ossrdbms-aad.database.windows.net como resource no parâmetro de 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 o pedido POST com o âmbito de https://ossrdbms-aad.database.windows.net/.default, bem como com o ID do inquilino, o ID do cliente e o segredo do cliente do principal de serviço 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 Serviço de Aplicações do Azure fornece um endpoint REST acessível internamente 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 tiver criado tabelas e sequências no servidor flexível do PostgreSQL antes de utilizar o Service Connector, ligue-se como o proprietário e conceda permissões a <aad-username>, criado pelo Service Connector. O nome de utilizador da cadeia de ligação ou da configuração definida no Service Connector deve ser semelhante a aad_<connection name>. Se usar o portal do Azure, selecione o botão expandir ao lado da coluna Tipo de Serviço para obter o valor. Se utilizar a CLI do Azure, verifique configurations na saída do comando da CLI.
Depois, execute a seguinte consulta para conceder permissões:
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
Os <owner-username> e <owner-password> pertencem ao proprietário da tabela existente que pode conceder permissões a terceiros.
<aad-username> é o usuário criado pelo Service Connector. Substitui-os por valores reais.
Valide o resultado:
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 ligação do PostgreSQL para .NET |
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 ligação JDBC para 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 |
string de ligaçã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 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 |
Cadeia de ligação PostgreSQL de Go |
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 |
String de ligação do Ruby ao 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 um token de acesso com a biblioteca azure-identity, utilizando 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. Utilize accessToken adquirido 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 um token de acesso com azidentity e, em seguida, utilize-o como palavra-passe para se ligar ao PostgreSQL do Azure, juntamente com as informações de ligaçã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 ao sistema, o Serviço de Aplicações do Azure fornece um endpoint REST acessível internamente 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 um pedido HTTP GET ao endpoint de identidade e utilize https://ossrdbms-aad.database.windows.net como resource no parâmetro de 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 o pedido POST com o âmbito de https://ossrdbms-aad.database.windows.net/.default, bem como com o ID do inquilino, o ID do cliente e o segredo do cliente do principal de serviço 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 Serviço de Aplicações do Azure fornece um endpoint REST acessível internamente 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 tiver criado tabelas e sequências no servidor flexível do PostgreSQL antes de utilizar o Service Connector, ligue-se como o proprietário e conceda permissões a <aad-username>, criado pelo Service Connector. O nome de utilizador da cadeia de ligação ou da configuração definida no Service Connector deve ser semelhante a aad_<connection name>. Se usar o portal do Azure, selecione o botão expandir ao lado da coluna Tipo de Serviço para obter o valor. Se utilizar a CLI do Azure, verifique configurations na saída do comando da CLI.
Depois, execute a seguinte consulta para conceder permissões:
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
Os <owner-username> e <owner-password> pertencem ao proprietário da tabela existente que pode conceder permissões a terceiros.
<aad-username> é o usuário criado pelo Service Connector. Substitui-os por valores reais.
Valide o resultado:
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 ligação do PostgreSQL para .NET |
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 ligação JDBC para 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 |
string de ligaçã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 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 |
Cadeia de ligação PostgreSQL de Go |
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 |
String de ligação do Ruby ao 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
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 ligação do PostgreSQL para .NET |
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 ligação JDBC para 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 |
string de ligaçã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 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 seu cliente SECRET |
<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 ligação PostgreSQL de Go |
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 |
String de ligação do Ruby ao 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 os passos e o código abaixo para estabelecer ligação ao Base de Dados do Azure para PostgreSQL com um principal 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 um token de acesso com a biblioteca azure-identity, utilizando 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. Utilize accessToken adquirido 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 um token de acesso com azidentity e, em seguida, utilize-o como palavra-passe para se ligar ao PostgreSQL do Azure, juntamente com as informações de ligaçã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 ao sistema, o Serviço de Aplicações do Azure fornece um endpoint REST acessível internamente 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 um pedido HTTP GET ao endpoint de identidade e utilize https://ossrdbms-aad.database.windows.net como resource no parâmetro de 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 o pedido POST com o âmbito de https://ossrdbms-aad.database.windows.net/.default, bem como com o ID do inquilino, o ID do cliente e o segredo do cliente do principal de serviço 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 Serviço de Aplicações do Azure fornece um endpoint REST acessível internamente 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 tiver criado tabelas e sequências no servidor flexível do PostgreSQL antes de utilizar o Service Connector, ligue-se como o proprietário e conceda permissões a <aad-username>, criado pelo Service Connector. O nome de utilizador da cadeia de ligação ou da configuração definida no Service Connector deve ser semelhante a aad_<connection name>. Se usar o portal do Azure, selecione o botão expandir ao lado da coluna Tipo de Serviço para obter o valor. Se utilizar a CLI do Azure, verifique configurations na saída do comando da CLI.
Depois, execute a seguinte consulta para conceder permissões:
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
Os <owner-username> e <owner-password> pertencem ao proprietário da tabela existente que pode conceder permissões a terceiros.
<aad-username> é o usuário criado pelo Service Connector. Substitui-os por valores reais.
Valide o resultado:
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.