Partilhar via


Integrar o Banco de Dados do Azure para PostgreSQL com o Service Connector

Esta página mostra os métodos de autenticação e os clientes suportados e mostra o código de exemplo que pode utilizar para ligar a Base de Dados do Azure para PostgreSQL a outros serviços na nuvem utilizando o Service Connector. Você ainda poderá se conectar ao Banco de Dados do Azure para PostgreSQL em outras linguagens de programação sem usar o Service Connector. Esta página também mostra nomes e valores de variáveis de ambiente padrão (ou configuração do Spring Boot) que você obtém quando cria a conexão 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
  • Configuração da Aplicação Azure
  • 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 seu serviço 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 (pg) 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

Esta tabela indica que todas as combinações de tipos de cliente e métodos de autenticação na tabela são suportadas. Todos os tipos de cliente podem usar qualquer um dos métodos de autenticação para se conectar ao Banco de Dados do Azure para PostgreSQL usando o Service Connector.

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 conectar serviços de computação ao Banco de Dados do Azure para PostgreSQL. Para obter mais informações sobre convenções de nomenclatura, consulte o artigo interno do Service Connector.

Identidade gerenciada atribuída pelo sistema

Nome da variável de ambiente padrão Description 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>;

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 gerenciada ou entidade de serviço usando a biblioteca de 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 according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();

// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
//     }
// );

// 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();
}

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 gerenciada atribuída pelo usuário

Nome da variável de ambiente padrão Description 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>;

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 gerenciada ou entidade de serviço usando a biblioteca de 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 according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();

// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
//     }
// );

// 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();
}

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

Nome da variável de ambiente padrão Description 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>;

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.

  1. Instale dependências. Siga as orientações para instalar o Npgsql
  2. No código, obtenha a cadeia de conexão PostgreSQL de variáveis de ambiente adicionadas pelo serviço Service Connector. Para definir configurações TSL para o servidor PostgreSQL, consulte estas etapas.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Principal de Serviço

Nome da variável de ambiente padrão Description 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>;

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 gerenciada ou entidade de serviço usando a biblioteca de 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 according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();

// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
//     }
// );

// 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();
}

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.