Delen via


Azure Database for PostgreSQL integreren met Service Connector

Op deze pagina ziet u ondersteunde verificatiemethoden en -clients en ziet u voorbeeldcode die u kunt gebruiken om Azure Database for PostgreSQL te verbinden met andere cloudservices met behulp van Service Connector. Mogelijk kunt u nog steeds verbinding maken met Azure Database for PostgreSQL in andere programmeertalen zonder serviceconnector te gebruiken. Op deze pagina ziet u ook de standaardnamen en waarden van omgevingsvariabelen (of Spring Boot-configuratie) die u krijgt wanneer u de serviceverbinding maakt.

Ondersteunde rekenservices

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

  • Azure App Service
  • Azure Container Apps
  • Azure Functions
  • 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 uw rekenservice 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.

Client-type Door het systeem toegewezen beheerde identiteit Door de gebruiker toegewezen beheerde identiteit Geheim/verbindingsreeks Service-principal
.NET Ja Ja Ja Ja
Go (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

Deze tabel geeft aan dat alle combinaties van clienttypen en verificatiemethoden in de tabel worden ondersteund. Alle clienttypen kunnen elk van de verificatiemethoden gebruiken om verbinding te maken met Azure Database for PostgreSQL met behulp van Service Connector.

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, om rekenservices te verbinden met Azure Database for PostgreSQL. Raadpleeg het artikel Over interne serviceconnector 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 reeksen hebt gemaakt in postgreSQL flexibele server voordat u Service Connector gebruikt, moet u verbinding maken als eigenaar en toestemming verlenen voor <aad-username> het maken van serviceconnector. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door serviceconnector, moet er als aad_<connection name>volgt uitzien. 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 configurations u de uitvoer van de CLI-opdracht.

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 is gemaakt door Service Connector. 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 client-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 reeksen hebt gemaakt in postgreSQL flexibele server voordat u Service Connector gebruikt, moet u verbinding maken als eigenaar en toestemming verlenen voor <aad-username> het maken van serviceconnector. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door serviceconnector, moet er als aad_<connection name>volgt uitzien. 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 configurations u de uitvoer van de CLI-opdracht.

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 is gemaakt door Service Connector. 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

Verbindingsreeks

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. Installeer afhankelijkheden. Volg de richtlijnen voor het installeren van Npgsql
  2. Haal in code de PostgreSQL-verbindingsreeks op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
    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 client-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 reeksen hebt gemaakt in postgreSQL flexibele server voordat u Service Connector gebruikt, moet u verbinding maken als eigenaar en toestemming verlenen voor <aad-username> het maken van serviceconnector. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door serviceconnector, moet er als aad_<connection name>volgt uitzien. 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 configurations u de uitvoer van de CLI-opdracht.

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 is gemaakt door Service Connector. 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.