Delen via


Azure Database for PostgreSQL integreren met Service Connector

In dit artikel worden ondersteunde verificatiemethoden, clients en voorbeeldcode beschreven die u kunt gebruiken om uw apps te verbinden met Azure Database for PostgreSQL met behulp van Service Connector. In dit artikel vindt u ook de standaardnaam, waarden en configuratie van omgevingsvariabelen die zijn verkregen bij het maken van serviceverbindingen.

Ondersteunde rekenservices

ServiceConnector kan worden gebruikt om de volgende rekenservices te verbinden met Azure Database for PostgreSQL:

  • Azure App Service
  • Azure Container Apps - een dienst van Microsoft waarmee je containers kunt uitvoeren en beheren in de cloud.
  • Azure Functions (serverloze computerdiensten van Azure)
  • Azure Kubernetes Service (AKS)
  • Azure Spring Apps

Ondersteunde verificatietypen en clienttypen

In de onderstaande tabel ziet u welke combinaties van verificatiemethoden en -clients worden ondersteund voor het verbinden van rekenservices met Azure Database for PostgreSQL met behulp van Service Connector. Een 'Ja' geeft aan dat de combinatie wordt ondersteund, terwijl een 'Nee' aangeeft dat deze niet wordt ondersteund.

Cliënttype Door het systeem toegewezen beheerde identiteit Door de gebruiker toegewezen beheerde identiteit Geheim/verbindingsreeks Service-principal
.NET Ja Ja Ja Ja
Ga (pg) Ja Ja Ja Ja
Java (JDBC) Ja Ja Ja Ja
Java - Spring Boot (JDBC) Ja Ja Ja Ja
Node.js (pg) Ja Ja Ja Ja
PHP (systeemeigen) Ja Ja Ja Ja
Python (psycopg2) Ja Ja Ja Ja
Python-Django Ja Ja Ja Ja
Ruby (ruby-pg) Ja Ja Ja Ja
Geen Ja Ja Ja Ja

Notitie

Door het systeem toegewezen beheerde identiteit, door de gebruiker toegewezen beheerde identiteit en service-principal worden alleen ondersteund in Azure CLI.

Namen van standaardomgevingsvariabelen of toepassingseigenschappen en voorbeeldcode

Verwijs naar de verbindingsgegevens en voorbeeldcode in de volgende tabellen, afhankelijk van het verificatietype en het clienttype van uw verbinding. Raadpleeg het artikel Service Connector-interne werking voor meer informatie over naamconventies.

Door het systeem toegewezen beheerde identiteit

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL-verbindingsreeks Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Voorbeeldcode

Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een door het systeem toegewezen beheerde identiteit.

Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.

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

Als u vervolgens tabellen en sequenties hebt aangemaakt in PostgreSQL Flexibele Server voordat u Service Connector gebruikt, moet u als eigenaar verbinding maken en toestemming verlenen voor wat door Service Connector is aangemaakt. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door de Service Connector, moet er als volgt uitzien: aad_<connection name>. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert u de uitvoer van de CLI-opdracht in configurations.

Voer vervolgens de query uit om toestemming te verlenen

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

De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen. <aad-username> is de gebruiker die door Service Connector is aangemaakt. Vervang ze door de werkelijke waarde.

Valideer het resultaat met de opdracht:

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

Door de gebruiker toegewezen beheerde identiteit

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
AZURE_POSTGRESQL_CLIENTID Uw cliënt-ID <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL-verbindingsreeks Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Voorbeeldcode

Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een door de gebruiker toegewezen beheerde identiteit.

Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.

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

Als u vervolgens tabellen en sequenties hebt aangemaakt in PostgreSQL Flexibele Server voordat u Service Connector gebruikt, moet u als eigenaar verbinding maken en toestemming verlenen voor wat door Service Connector is aangemaakt. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door de Service Connector, moet er als volgt uitzien: aad_<connection name>. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert u de uitvoer van de CLI-opdracht in configurations.

Voer vervolgens de query uit om toestemming te verlenen

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

De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen. <aad-username> is de gebruiker die door Service Connector is aangemaakt. Vervang ze door de werkelijke waarde.

Valideer het resultaat met de opdracht:

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

Verbindingstekst

Waarschuwing

Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. U moet deze stroom alleen gebruiken wanneer andere veiligere stromen, zoals beheerde identiteiten, niet haalbaar zijn.

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL-verbindingsreeks Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Voorbeeldcode

Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een verbindingsreeks.

  1. Afhankelijkheden installeren volgens de Npgsql-richtlijnen
  2. Haal in code de PostgreSQL-verbindingsreeks op uit omgevingsvariabelen die zijn toegevoegd door Service Connector.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Service-principal

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
AZURE_POSTGRESQL_CLIENTID Uw cliënt-ID <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Uw clientgeheim <client-secret>
AZURE_POSTGRESQL_TENANTID Uw tenant-ID <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL-verbindingsreeks Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Voorbeeldcode

Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een service-principal.

Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.

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

Als u vervolgens tabellen en sequenties hebt aangemaakt in PostgreSQL Flexibele Server voordat u Service Connector gebruikt, moet u als eigenaar verbinding maken en toestemming verlenen voor wat door Service Connector is aangemaakt. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door de Service Connector, moet er als volgt uitzien: aad_<connection name>. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert u de uitvoer van de CLI-opdracht in configurations.

Voer vervolgens de query uit om toestemming te verlenen

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

De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen. <aad-username> is de gebruiker die door Service Connector is aangemaakt. Vervang ze door de werkelijke waarde.

Valideer het resultaat met de opdracht:

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

Volgende stappen

Volg de onderstaande zelfstudies voor meer informatie over Service Connector.