Integrowanie usługi Azure Database for PostgreSQL z usługą Połączenie or

Na tej stronie przedstawiono obsługiwane metody uwierzytelniania i klientów oraz pokazano przykładowy kod, za pomocą którego można połączyć usługę Azure Database for PostgreSQL z innymi usługami w chmurze przy użyciu usługi Service Połączenie or. Nadal możesz nawiązać połączenie z usługą Azure Database for PostgreSQL w innych językach programowania bez korzystania z usługi Połączenie or. Na tej stronie są również wyświetlane domyślne nazwy zmiennych środowiskowych i wartości (lub konfiguracja platformy Spring Boot) podczas tworzenia połączenia z usługą.

Obsługiwane usługi obliczeniowe

Usługa Połączenie or może służyć do łączenia następujących usług obliczeniowych z usługą Azure Database for PostgreSQL:

  • Azure App Service
  • Azure Functions
  • Azure App Configuration
  • Azure Spring Apps

Obsługiwane typy uwierzytelniania i typy klientów

W poniższej tabeli pokazano, które kombinacje metod uwierzytelniania i klientów są obsługiwane do łączenia usługi obliczeniowej z usługą Azure Database for PostgreSQL przy użyciu usługi Service Połączenie or. Wartość "Tak" wskazuje, że kombinacja jest obsługiwana, a wartość "Nie" wskazuje, że nie jest obsługiwana.

Typ klienta Tożsamość zarządzana przypisana przez system Tożsamość zarządzana przypisana przez użytkownika Wpis tajny/parametry połączenia Jednostka usługi
.NET Tak Tak Tak Tak
Go (pg) Tak Tak Tak Tak
Java (JDBC) Tak Tak Tak Tak
Java — Spring Boot (JDBC) Tak Tak Tak Tak
Node.js (pg) Tak Tak Tak Tak
PHP (natywne) Tak Tak Tak Tak
Python (psycopg2) Tak Tak Tak Tak
Python-Django Tak Tak Tak Tak
Ruby (ruby-pg) Tak Tak Tak Tak
None Tak Tak Tak Tak

Ta tabela wskazuje, że obsługiwane są wszystkie kombinacje typów klientów i metod uwierzytelniania w tabeli. Wszystkie typy klientów mogą używać dowolnej metody uwierzytelniania do nawiązywania połączenia z usługą Azure Database for PostgreSQL przy użyciu Połączenie or usługi.

Uwaga

Tożsamość zarządzana przypisana przez system, tożsamość zarządzana przypisana przez użytkownika i jednostka usługi są obsługiwane tylko w interfejsie wiersza polecenia platformy Azure.

Domyślne nazwy zmiennych środowiskowych lub właściwości aplikacji i przykładowy kod

Zapoznaj się ze szczegółami połączenia i przykładowym kodem w poniższych tabelach, zgodnie z typem uwierzytelniania połączenia i typem klienta, aby połączyć usługi obliczeniowe z usługą Azure Database for PostgreSQL. Aby uzyskać więcej informacji na temat konwencji nazewnictwa, zapoznaj się z artykułem Service Połączenie or internals (Usługi Połączenie or internals).

Tożsamość zarządzana przypisana przez system

Domyślna nazwa zmiennej środowiskowej opis Przykładowa wartość
AZURE_POSTGRESQL_CONNECTIONSTRING Parametry połączenia .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Przykładowy kod

Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu tożsamości zarządzanej przypisanej przez system.

W przypadku platformy .NET nie ma wtyczki ani biblioteki do obsługi połączeń bez hasła. Token dostępu dla tożsamości zarządzanej lub jednostki usługi można uzyskać przy użyciu biblioteki klienta, takiej jak Azure.Identity. Następnie możesz użyć tokenu dostępu jako hasła, aby nawiązać połączenie z bazą danych. Korzystając z poniższego kodu, usuń komentarz z części fragmentu kodu dla typu uwierzytelniania, którego chcesz użyć.

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

Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem Połączenie or usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> tworzenia przez usługę Połączenie or. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez usługę Połączenie or powinna wyglądać następująco: aad_<connection name>. Jeśli używasz witryny Azure Portal, wybierz przycisk rozwijania obok Service Type kolumny i pobierz wartość. Jeśli używasz interfejsu wiersza polecenia platformy Azure, sprawdź configurations dane wyjściowe polecenia interfejsu wiersza polecenia.

Następnie wykonaj zapytanie, aby udzielić uprawnienia

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

Element <owner-username> i <owner-password> jest właścicielem istniejącej tabeli, która może udzielić uprawnień innym osobom. <aad-username>to użytkownik utworzony przez usługę Połączenie or. Zastąp je rzeczywistą wartością.

Zweryfikuj wynik za pomocą polecenia :

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

Tożsamość zarządzana przypisana przez użytkownika

Domyślna nazwa zmiennej środowiskowej opis Przykładowa wartość
AZURE_POSTGRESQL_CLIENTID Identyfikator klienta <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Parametry połączenia .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Przykładowy kod

Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu tożsamości zarządzanej przypisanej przez użytkownika.

W przypadku platformy .NET nie ma wtyczki ani biblioteki do obsługi połączeń bez hasła. Token dostępu dla tożsamości zarządzanej lub jednostki usługi można uzyskać przy użyciu biblioteki klienta, takiej jak Azure.Identity. Następnie możesz użyć tokenu dostępu jako hasła, aby nawiązać połączenie z bazą danych. Korzystając z poniższego kodu, usuń komentarz z części fragmentu kodu dla typu uwierzytelniania, którego chcesz użyć.

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

Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem Połączenie or usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> tworzenia przez usługę Połączenie or. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez usługę Połączenie or powinna wyglądać następująco: aad_<connection name>. Jeśli używasz witryny Azure Portal, wybierz przycisk rozwijania obok Service Type kolumny i pobierz wartość. Jeśli używasz interfejsu wiersza polecenia platformy Azure, sprawdź configurations dane wyjściowe polecenia interfejsu wiersza polecenia.

Następnie wykonaj zapytanie, aby udzielić uprawnienia

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

Element <owner-username> i <owner-password> jest właścicielem istniejącej tabeli, która może udzielić uprawnień innym osobom. <aad-username>to użytkownik utworzony przez usługę Połączenie or. Zastąp je rzeczywistą wartością.

Zweryfikuj wynik za pomocą polecenia :

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

Parametry połączenia

Domyślna nazwa zmiennej środowiskowej opis Przykładowa wartość
AZURE_POSTGRESQL_CONNECTIONSTRING Parametry połączenia .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Przykładowy kod

Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu parametry połączenia.

  1. Instalowanie zależności. Postępuj zgodnie ze wskazówkami, aby zainstalować narzędzie Npgsql
  2. W kodzie pobierz parametry połączenia PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Połączenie or. Aby ustawić konfiguracje TSL dla serwera PostgreSQL, zapoznaj się z tymi krokami.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Jednostka usługi

Domyślna nazwa zmiennej środowiskowej opis Przykładowa wartość
AZURE_POSTGRESQL_CLIENTID Identyfikator klienta <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Klucz tajny klienta <client-secret>
AZURE_POSTGRESQL_TENANTID Identyfikator dzierżawy <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Parametry połączenia .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Przykładowy kod

Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu jednostki usługi.

W przypadku platformy .NET nie ma wtyczki ani biblioteki do obsługi połączeń bez hasła. Token dostępu dla tożsamości zarządzanej lub jednostki usługi można uzyskać przy użyciu biblioteki klienta, takiej jak Azure.Identity. Następnie możesz użyć tokenu dostępu jako hasła, aby nawiązać połączenie z bazą danych. Korzystając z poniższego kodu, usuń komentarz z części fragmentu kodu dla typu uwierzytelniania, którego chcesz użyć.

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

Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem Połączenie or usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> tworzenia przez usługę Połączenie or. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez usługę Połączenie or powinna wyglądać następująco: aad_<connection name>. Jeśli używasz witryny Azure Portal, wybierz przycisk rozwijania obok Service Type kolumny i pobierz wartość. Jeśli używasz interfejsu wiersza polecenia platformy Azure, sprawdź configurations dane wyjściowe polecenia interfejsu wiersza polecenia.

Następnie wykonaj zapytanie, aby udzielić uprawnienia

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

Element <owner-username> i <owner-password> jest właścicielem istniejącej tabeli, która może udzielić uprawnień innym osobom. <aad-username>to użytkownik utworzony przez usługę Połączenie or. Zastąp je rzeczywistą wartością.

Zweryfikuj wynik za pomocą polecenia :

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

Następne kroki

Postępuj zgodnie z samouczkami wymienionymi poniżej, aby dowiedzieć się więcej o usłudze Połączenie or.