Sdílet prostřednictvím


Integrujte Azure Database for PostgreSQL s konektorem služeb

Tento článek popisuje podporované metody ověřování, klienty a ukázkový kód, které můžete použít k připojení aplikací ke službě Azure Database for PostgreSQL pomocí konektoru služby. V tomto článku najdete také výchozí názvy proměnných prostředí, hodnoty a konfiguraci získané při vytváření připojení služeb.

Podporované výpočetní služby

Konektor služby se dá použít k připojení následujících výpočetních služeb ke službě Azure Database for PostgreSQL:

  • Azure App Service
  • Azure Container Apps
  • Azure Functions
  • Azure Kubernetes Service (AKS)
  • Azure Spring Apps

Podporované typy ověřování a typy klientů

Následující tabulka ukazuje, které kombinace metod ověřování a klientů se podporují pro připojení výpočetních služeb ke službě Azure Database for PostgreSQL pomocí konektoru služby. "Ano" označuje, že kombinace je podporována, zatímco "Ne" označuje, že není podporována.

Typ klienta Spravovaná identita přiřazená systémem Spravovaná identita přiřazená uživatelem Tajný kód/připojovací řetězec Principál služby
platforma .NET Ano Ano Ano Ano
Jít (pg) Ano Ano Ano Ano
Java (JDBC) Ano Ano Ano Ano
Java – Spring Boot (JDBC) Ano Ano Ano Ano
Node.js (pg) Ano Ano Ano Ano
PHP (nativní) Ano Ano Ano Ano
Python (psycopg2) Ano Ano Ano Ano
Python-Django Ano Ano Ano Ano
Ruby (ruby-pg) Ano Ano Ano Ano
Nic Ano Ano Ano Ano

Poznámka:

Spravovaná identita přiřazená systémem, spravovaná identita přiřazená uživatelem a role služby jsou podporovány pouze v Azure CLI.

Výchozí názvy proměnných prostředí nebo vlastnosti aplikace a ukázkový kód

Podívejte se na podrobnosti o připojení a vzorový kód v následujících tabulkách podle typu ověřování a klienta vašeho připojení. Další informace o konvencích pojmenování najdete v článku o interních procesech Service Connector.

Spravovaná identita přiřazená systémem

Výchozí název proměnné prostředí Popis Příklad hodnoty
AZURE_POSTGRESQL_CONNECTIONSTRING Připojovací řetězec .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Ukázkový kód

Projděte si následující kroky a kód a připojte se ke službě Azure Database for PostgreSQL pomocí spravované identity přiřazené systémem.

Pro .NET neexistuje modul plug-in ani knihovna, které podporují připojení bez hesla. Přístupový token pro spravovanou identitu nebo instanční objekt můžete získat pomocí klientské knihovny, jako je Azure.Identity. Přístupový token pak můžete použít jako heslo pro připojení k databázi. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.

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

Pokud jste před použitím konektoru služby vytvořili tabulky a sekvence na flexibilním serveru PostgreSQL, musíte se připojit jako vlastník a udělit oprávnění k objektům vytvořeným konektorem služby <aad-username>. Uživatelské jméno z připojovacího řetězce nebo konfigurace nastavené konektorem služby by mělo vypadat jako aad_<connection name>. Pokud používáte Azure portal, vyberte tlačítko pro rozbalení vedle Service Type sloupce a získejte hodnotu. Pokud používáte Azure CLI, zkontrolujte ve výstupu příkazu rozhraní příkazového řádku configurations.

Pak spusťte dotaz, který udělí oprávnění.

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>\";"

<owner-username> a <owner-password> jsou vlastníky existující tabulky, která může udělit oprávnění ostatním. <aad-username> je uživatel vytvořený služebním konektorem. Nahraďte je skutečnou hodnotou.

Pomocí příkazu ověřte výsledek:

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

Spravovaná identita přiřazená uživatelem

Výchozí název proměnné prostředí Popis Příklad hodnoty
AZURE_POSTGRESQL_CLIENTID ID klienta <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Připojovací řetězec .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Ukázkový kód

Projděte si následující kroky a kód a připojte se ke službě Azure Database for PostgreSQL pomocí spravované identity přiřazené uživatelem.

Pro .NET neexistuje modul plug-in ani knihovna, které podporují připojení bez hesla. Přístupový token pro spravovanou identitu nebo instanční objekt můžete získat pomocí klientské knihovny, jako je Azure.Identity. Přístupový token pak můžete použít jako heslo pro připojení k databázi. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.

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

Pokud jste před použitím konektoru služby vytvořili tabulky a sekvence na flexibilním serveru PostgreSQL, musíte se připojit jako vlastník a udělit oprávnění k objektům vytvořeným konektorem služby <aad-username>. Uživatelské jméno z připojovacího řetězce nebo konfigurace nastavené konektorem služby by mělo vypadat jako aad_<connection name>. Pokud používáte Azure portal, vyberte tlačítko pro rozbalení vedle Service Type sloupce a získejte hodnotu. Pokud používáte Azure CLI, zkontrolujte ve výstupu příkazu rozhraní příkazového řádku configurations.

Pak spusťte dotaz, který udělí oprávnění.

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>\";"

<owner-username> a <owner-password> jsou vlastníky existující tabulky, která může udělit oprávnění ostatním. <aad-username> je uživatel vytvořený služebním konektorem. Nahraďte je skutečnou hodnotou.

Pomocí příkazu ověřte výsledek:

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

Připojovací řetězec

Varování

Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Ověřovací tok popsaný v tomto postupu vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok byste měli použít jenom v případě, že jiné bezpečnější toky, jako jsou spravované identity, nejsou přijatelné.

Výchozí název proměnné prostředí Popis Příklad hodnoty
AZURE_POSTGRESQL_CONNECTIONSTRING Připojovací řetězec .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Ukázkový kód

Pokud se chcete připojit ke službě Azure Database for PostgreSQL pomocí připojovací řetězec, projděte si následující postup a kód.

  1. Nainstalujte závislosti podle pokynů k Npgsql
  2. V kódu získejte připojovací řetězec PostgreSQL z proměnných prostředí přidaných konektorem služeb.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Principál služby

Výchozí název proměnné prostředí Popis Příklad hodnoty
AZURE_POSTGRESQL_CLIENTID ID klienta <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Vaše klientské tajemství <client-secret>
AZURE_POSTGRESQL_TENANTID ID vašeho tenanta <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Připojovací řetězec .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Ukázkový kód

Informace o připojení ke službě Azure Database for PostgreSQL pomocí instančního objektu najdete v následujících krocích a kódu.

Pro .NET neexistuje modul plug-in ani knihovna, které podporují připojení bez hesla. Přístupový token pro spravovanou identitu nebo instanční objekt můžete získat pomocí klientské knihovny, jako je Azure.Identity. Přístupový token pak můžete použít jako heslo pro připojení k databázi. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.

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

Pokud jste před použitím konektoru služby vytvořili tabulky a sekvence na flexibilním serveru PostgreSQL, musíte se připojit jako vlastník a udělit oprávnění k objektům vytvořeným konektorem služby <aad-username>. Uživatelské jméno z připojovacího řetězce nebo konfigurace nastavené konektorem služby by mělo vypadat jako aad_<connection name>. Pokud používáte Azure portal, vyberte tlačítko pro rozbalení vedle Service Type sloupce a získejte hodnotu. Pokud používáte Azure CLI, zkontrolujte ve výstupu příkazu rozhraní příkazového řádku configurations.

Pak spusťte dotaz, který udělí oprávnění.

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>\";"

<owner-username> a <owner-password> jsou vlastníky existující tabulky, která může udělit oprávnění ostatním. <aad-username> je uživatel vytvořený služebním konektorem. Nahraďte je skutečnou hodnotou.

Pomocí příkazu ověřte výsledek:

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

Další kroky

Další informace o konektoru Service Connector najdete v následujících kurzech.