Udostępnij za pomocą


Integrowanie usługi Azure Database for PostgreSQL z łącznikiem usługi

W tym artykule opisano obsługiwane metody uwierzytelniania, klientów i przykładowy kod, którego można użyć do łączenia aplikacji z usługą Azure Database for PostgreSQL przy użyciu łącznika usługi Service Connector. W tym artykule znajdziesz również domyślne nazwy zmiennych środowiskowych, wartości i konfigurację uzyskaną podczas tworzenia połączeń usług.

Obsługiwane usługi obliczeniowe

Łącznik usługi może służyć do łączenia następujących usług obliczeniowych z usługą Azure Database for PostgreSQL:

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

Obsługiwane typy uwierzytelniania i typy klientów

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

Typ klienta Zarządzana tożsamość przypisana przez system Tożsamość zarządzana przypisana użytkownikowi Tajny klucz/ciąg połączenia Główna jednostka serwisowa
.NET Tak Tak Tak Tak
Idź (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
Żaden Tak Tak Tak Tak

Uwaga / Notatka

Tożsamość zarządzana przydzielona przez system, tożsamość zarządzana przydzielona przez użytkownika i główny element usługi są obsługiwane wyłącznie 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 uzyskać więcej informacji na temat konwencji nazewnictwa, zapoznaj się z artykułem Dotyczącym wewnętrznych łączników usług .

Zarządzana tożsamość 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, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.

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

Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem łącznika usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> utworzenia przez łącznik usługi. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez łącznik usługi 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 łącznik usługi. 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 użytkownikowi

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, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.

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

Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem łącznika usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> utworzenia przez łącznik usługi. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez łącznik usługi 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 łącznik usługi. 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

Łańcuch połączenia

Ostrzeżenie

Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze wymaga bardzo wysokiego poziomu zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Tego przepływu należy używać tylko wtedy, gdy inne bezpieczniejsze przepływy, takie jak tożsamości zarządzane, nie są opłacalne.

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 parametrów połączenia.

  1. Instalowanie zależności zgodnie ze wskazówkami dotyczącymi narzędzia Npgsql
  2. W kodzie pobierz parametry połączenia PostgreSQL ze zmiennych środowiskowych dodanych przez łącznik usługi.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Główna jednostka serwisowa

Domyślna nazwa zmiennej środowiskowej Opis Przykładowa wartość
AZURE_POSTGRESQL_CLIENTID Identyfikator klienta <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Sekret klienta <client-secret>
AZURE_POSTGRESQL_TENANTID Twój 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

Poniższe kroki i kod pomogą nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu głównego użytkownika 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, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.

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

Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem łącznika usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> utworzenia przez łącznik usługi. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez łącznik usługi 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 łącznik usługi. 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

Dalsze kroki

Postępuj zgodnie z samouczkami wymienionymi poniżej, aby dowiedzieć się więcej o Service Connector.