Freigeben über


Integrieren von Azure Database für PostgreSQL mit Service Connector

Auf dieser Seite werden unterstützte Authentifizierungsmethoden und Clients sowie Beispielcode gezeigt, den Sie verwenden können, um Azure Database for PostgreSQL mit anderen Clouddiensten mithilfe des Dienstconnectors zu verbinden. Möglicherweise können Sie weiterhin eine Verbindung mit Azure Database für PostgreSQL in anderen Programmiersprachen herstellen, ohne den Service Connector zu verwenden. Auf dieser Seite werden auch die Namen und Werte der Standardumgebungsvariablen (oder die Spring Boot-Konfiguration) angezeigt, die Sie erhalten, wenn Sie die Dienstverbindung erstellen.

Unterstützte Computedienste

Mit dem Dienstconnector können Sie die folgenden Computedienste mit Azure Database for PostgreSQL verbinden:

  • Azure App Service
  • Azure Container Apps
  • Azure-Funktionen
  • Azure Kubernetes Service (AKS)
  • Azure Spring Apps

Unterstützte Authentifizierungstypen und Clienttypen

Die folgende Tabelle zeigt, welche Kombinationen von Authentifizierungsmethoden und Clients für die Verbindung Ihres Computediensts mit Azure Database for PostgreSQL mithilfe des Dienstconnectors unterstützt werden. Ein „Ja“ gibt an, dass die Kombination unterstützt wird, während ein „Nein“ angibt, dass sie nicht unterstützt wird.

Clienttyp Systemseitig zugewiesene verwaltete Identität Benutzerseitig zugewiesene verwaltete Identität Geheimnis/Verbindungszeichenfolge Dienstprinzipal
.NET Ja Ja Ja Ja
Go (pg) Ja Ja Ja Ja
Java (JDBC) Ja Ja Ja Ja
Java (Spring Boot) Ja Ja Ja Ja
Node.js (pg) Ja Ja Ja Ja
PHP (nativ) Ja Ja Ja Ja
Python (psycopg2) Ja Ja Ja Ja
Python-Django Ja Ja Ja Ja
Ruby (ruby-pg) Ja Ja Ja Ja
Keine Ja Ja Ja Ja

In der Tabelle wird angegeben, dass alle Kombinationen von Clienttypen und Authentifizierungsmethoden in der Tabelle unterstützt werden. Alle Clienttypen können jede der Authentifizierungsmethoden verwenden, um mithilfe des Dienstconnectors eine Verbindung mit Azure Database for PostgreSQL herzustellen.

Hinweis

Systemseitig zugewiesene verwaltete Identität, benutzerseitig zugewiesene verwaltete Identität und Dienstprinzipal werden nur in der Azure-Befehlszeilenschnittstelle unterstützt.

Namen von Standard-Umgebungsvariablen oder Anwendungseigenschaften und Beispielcode

Nutzen Sie die Verbindungsdetails und den Beispielcode in den folgenden Tabellen für den Authentifizierungstyp und den Clienttyp Ihrer Verbindung, um Computedienste mit Azure Database for PostgreSQL zu verbinden. Weitere Informationen zu Benennungskonventionen finden Sie im Artikel Besonderheiten des Dienstconnectors.

Systemseitig zugewiesene verwaltete Identität

Standardname der Umgebungsvariablen Beschreibung Beispielswert
AZURE_POSTGRESQL_CONNECTIONSTRING PostgreSQL-Verbindungszeichenfolge für .NET Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Beispielcode

Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe einer systemseitig zugewiesenen verwalteten Identität herzustellen.

Für .NET gibt es kein Plug-In und keine Bibliothek, die kennwortlose Verbindungen unterstützen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal mithilfe einer Clientbibliothek wie Azure.Identity abrufen. Anschließend können Sie das Zugriffstoken als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.

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

Wenn Sie vor der Verwendung des Dienstconnectors Tabellen und Sequenzen auf dem flexiblen PostgreSQL-Server erstellt haben, müssen Sie als Nächstes als der Besitzer eine Verbindung herstellen und dem vom Dienstconnector erstellten <aad-username> die Berechtigung erteilen. Der Benutzername aus der Verbindungszeichenfolge oder der vom Dienstconnector festgelegten Konfiguration sollte aad_<connection name> ähneln. Wenn Sie das Azure-Portal verwenden, wählen Sie die Schaltfläche „erweitern“ neben der Service Type-Spalte aus, und rufen Sie den Wert ab. Wenn Sie die Azure CLI verwenden, überprüfen Sie configurations in der CLI-Befehlsausgabe.

Führen Sie dann die Abfrage aus, um die Berechtigung zu erteilen.

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

Der <owner-username> und das <owner-password> sind der Besitzer einer vorhandenen Tabelle, der anderen Personen Berechtigungen erteilen kann. <aad-username> ist der bzw. die Benutzer*in, der bzw. die vom Dienstconnector erstellt wurde. Ersetzen Sie sie durch den tatsächlichen Wert.

Überprüfen Sie das Ergebnis mit dem folgenden Befehl:

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

Dem Benutzer zugewiesene Managed Identity

Standardname der Umgebungsvariablen Beschreibung Beispielswert
AZURE_POSTGRESQL_CLIENTID Ihre Client-ID <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING PostgreSQL-Verbindungszeichenfolge für .NET Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Beispielcode

Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe einer benutzerseitig zugewiesenen verwalteten Identität herzustellen.

Für .NET gibt es kein Plug-In und keine Bibliothek, die kennwortlose Verbindungen unterstützen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal mithilfe einer Clientbibliothek wie Azure.Identity abrufen. Anschließend können Sie das Zugriffstoken als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.

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

Wenn Sie vor der Verwendung des Dienstconnectors Tabellen und Sequenzen auf dem flexiblen PostgreSQL-Server erstellt haben, müssen Sie als Nächstes als der Besitzer eine Verbindung herstellen und dem vom Dienstconnector erstellten <aad-username> die Berechtigung erteilen. Der Benutzername aus der Verbindungszeichenfolge oder der vom Dienstconnector festgelegten Konfiguration sollte aad_<connection name> ähneln. Wenn Sie das Azure-Portal verwenden, wählen Sie die Schaltfläche „erweitern“ neben der Service Type-Spalte aus, und rufen Sie den Wert ab. Wenn Sie die Azure CLI verwenden, überprüfen Sie configurations in der CLI-Befehlsausgabe.

Führen Sie dann die Abfrage aus, um die Berechtigung zu erteilen.

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

Der <owner-username> und das <owner-password> sind der Besitzer einer vorhandenen Tabelle, der anderen Personen Berechtigungen erteilen kann. <aad-username> ist der bzw. die Benutzer*in, der bzw. die vom Dienstconnector erstellt wurde. Ersetzen Sie sie durch den tatsächlichen Wert.

Überprüfen Sie das Ergebnis mit dem folgenden Befehl:

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

Verbindungszeichenfolge

Warnung

Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden. Der in diesem Verfahren beschriebene Authentifizierungsflow erfordert ein sehr hohes Maß an Vertrauen in die Anwendung und birgt Risiken, die bei anderen Flows nicht vorhanden sind. Sie sollten diesen Flow nur verwenden, wenn andere sicherere Flows (z. B. verwaltete Identitäten) nicht anwendbar sind.

Standardname der Umgebungsvariablen Beschreibung Beispielswert
AZURE_POSTGRESQL_CONNECTIONSTRING PostgreSQL-Verbindungszeichenfolge für .NET Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Beispielcode

Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe einer Verbindungszeichenfolge herzustellen.

  1. Installieren Sie Abhängigkeiten. Befolgen Sie den Leitfaden zum Installieren von Npgsql.
  2. Rufen Sie im Code die PostgreSQL-Verbindungszeichenfolge aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Dienstprinzipal

Standardname der Umgebungsvariablen Beschreibung Beispielswert
AZURE_POSTGRESQL_CLIENTID Ihre Client-ID <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Ihr geheimer Clientschlüssel <client-secret>
AZURE_POSTGRESQL_TENANTID Ihre Mandanten-ID <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING PostgreSQL-Verbindungszeichenfolge für .NET Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Beispielcode

Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe eines Dienstprinzipals herzustellen.

Für .NET gibt es kein Plug-In und keine Bibliothek, die kennwortlose Verbindungen unterstützen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal mithilfe einer Clientbibliothek wie Azure.Identity abrufen. Anschließend können Sie das Zugriffstoken als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.

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

Wenn Sie vor der Verwendung des Dienstconnectors Tabellen und Sequenzen auf dem flexiblen PostgreSQL-Server erstellt haben, müssen Sie als Nächstes als der Besitzer eine Verbindung herstellen und dem vom Dienstconnector erstellten <aad-username> die Berechtigung erteilen. Der Benutzername aus der Verbindungszeichenfolge oder der vom Dienstconnector festgelegten Konfiguration sollte aad_<connection name> ähneln. Wenn Sie das Azure-Portal verwenden, wählen Sie die Schaltfläche „erweitern“ neben der Service Type-Spalte aus, und rufen Sie den Wert ab. Wenn Sie die Azure CLI verwenden, überprüfen Sie configurations in der CLI-Befehlsausgabe.

Führen Sie dann die Abfrage aus, um die Berechtigung zu erteilen.

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

Der <owner-username> und das <owner-password> sind der Besitzer einer vorhandenen Tabelle, der anderen Personen Berechtigungen erteilen kann. <aad-username> ist der bzw. die Benutzer*in, der bzw. die vom Dienstconnector erstellt wurde. Ersetzen Sie sie durch den tatsächlichen Wert.

Überprüfen Sie das Ergebnis mit dem folgenden Befehl:

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

Nächste Schritte

Befolgen Sie die unten aufgeführten Tutorials, um mehr über Service Connector zu erfahren.