Dela via


Integrera Azure Database for PostgreSQL med Service Anslut or

Den här sidan visar autentiseringsmetoder och klienter som stöds och visar exempelkod som du kan använda för att ansluta Azure Database for PostgreSQL till andra molntjänster med hjälp av Service Anslut or. Du kanske fortfarande kan ansluta till Azure Database for PostgreSQL på andra programmeringsspråk utan att använda Service Anslut or. På den här sidan visas även standardnamn och värden för miljövariabler (eller Spring Boot-konfiguration) som du får när du skapar tjänstanslutningen.

Beräkningstjänster som stöds

Tjänst Anslut eller kan användas för att ansluta följande beräkningstjänster till Azure Database for PostgreSQL:

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

Autentiseringstyper och klienttyper som stöds

Tabellen nedan visar vilka kombinationer av autentiseringsmetoder och klienter som stöds för att ansluta beräkningstjänsten till Azure Database for PostgreSQL med hjälp av Service Anslut or. Ett "Ja" anger att kombinationen stöds, medan ett "Nej" anger att den inte stöds.

Klienttyp Systemtilldelad hanterad identitet Användartilldelad hanterad identitet Hemlighet/anslutningssträng Tjänstens huvudnamn
.NET Ja Ja Ja Ja
Gå (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 (inbyggt) Ja Ja Ja Ja
Python (psycopg2) Ja Ja Ja Ja
Python-Django Ja Ja Ja Ja
Ruby (ruby-pg) Ja Ja Ja Ja
None Ja Ja Ja Ja

Den här tabellen anger att alla kombinationer av klienttyper och autentiseringsmetoder i tabellen stöds. Alla klienttyper kan använda någon av autentiseringsmetoderna för att ansluta till Azure Database for PostgreSQL med hjälp av Service Anslut or.

Kommentar

Systemtilldelad hanterad identitet, användartilldelad hanterad identitet och tjänstens huvudnamn stöds endast i Azure CLI.

Standardnamn för miljövariabler eller programegenskaper och exempelkod

Referera till anslutningsinformationen och exempelkoden i följande tabeller, beroende på anslutningens autentiseringstyp och klienttyp, för att ansluta beräkningstjänster till Azure Database for PostgreSQL. Mer information om namngivningskonventioner finns i artikeln Service Anslut eller internals.

Systemtilldelad hanterad identitet

Standardnamn för miljövariabel beskrivning Exempelvärde
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL anslutningssträng Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Exempelkod

Se stegen och koden nedan för att ansluta till Azure Database for PostgreSQL med hjälp av en systemtilldelad hanterad identitet.

För .NET finns det inget plugin-program eller bibliotek som stöder lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn med hjälp av klientbibliotek som Azure.Identity. Sedan kan du använda åtkomsttoken som lösenord för att ansluta till databasen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.

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

Om du sedan har skapat tabeller och sekvenser i En flexibel PostgreSQL-server innan du använder Service Anslut or måste du ansluta som ägare och bevilja behörighet till skapad <aad-username> av Service Anslut or. Användarnamnet från anslutningssträng eller konfigurationen som anges av Service Anslut eller bör se ut som aad_<connection name>. Om du använder Azure-portalen väljer du knappen expandera bredvid Service Type kolumnen och hämtar värdet. Om du använder Azure CLI kontrollerar configurations du CLI-kommandoutdata.

Kör sedan frågan för att bevilja behörighet

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

Och <owner-username><owner-password> är ägare till den befintliga tabellen som kan bevilja behörigheter till andra. <aad-username>är användaren som skapats av Service Anslut or. Ersätt dem med det faktiska värdet.

Verifiera resultatet med kommandot :

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

Användartilldelad hanterad identitet

Standardnamn för miljövariabel beskrivning Exempelvärde
AZURE_POSTGRESQL_CLIENTID Ditt klient-ID <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL anslutningssträng Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Exempelkod

Se stegen och koden nedan för att ansluta till Azure Database for PostgreSQL med hjälp av en användartilldelad hanterad identitet.

För .NET finns det inget plugin-program eller bibliotek som stöder lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn med hjälp av klientbibliotek som Azure.Identity. Sedan kan du använda åtkomsttoken som lösenord för att ansluta till databasen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.

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

Om du sedan har skapat tabeller och sekvenser i En flexibel PostgreSQL-server innan du använder Service Anslut or måste du ansluta som ägare och bevilja behörighet till skapad <aad-username> av Service Anslut or. Användarnamnet från anslutningssträng eller konfigurationen som anges av Service Anslut eller bör se ut som aad_<connection name>. Om du använder Azure-portalen väljer du knappen expandera bredvid Service Type kolumnen och hämtar värdet. Om du använder Azure CLI kontrollerar configurations du CLI-kommandoutdata.

Kör sedan frågan för att bevilja behörighet

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

Och <owner-username><owner-password> är ägare till den befintliga tabellen som kan bevilja behörigheter till andra. <aad-username>är användaren som skapats av Service Anslut or. Ersätt dem med det faktiska värdet.

Verifiera resultatet med kommandot :

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

Anslutningssträng

Standardnamn för miljövariabel beskrivning Exempelvärde
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL anslutningssträng Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Exempelkod

Se stegen och koden nedan för att ansluta till Azure Database for PostgreSQL med hjälp av en anslutningssträng.

  1. Installera beroenden. Följ riktlinjerna för att installera Npgsql
  2. I kod hämtar du PostgreSQL-anslutningssträng från miljövariabler som lagts till av Service Anslut eller-tjänsten. Om du vill ange TSL-konfigurationer för PostgreSQL-servern läser du de här stegen.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Tjänstens huvudnamn

Standardnamn för miljövariabel beskrivning Exempelvärde
AZURE_POSTGRESQL_CLIENTID Ditt klient-ID <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Din klienthemlighet <client-secret>
AZURE_POSTGRESQL_TENANTID Ditt klientorganisations-ID <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL anslutningssträng Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Exempelkod

Se stegen och koden nedan för att ansluta till Azure Database for PostgreSQL med hjälp av tjänstens huvudnamn.

För .NET finns det inget plugin-program eller bibliotek som stöder lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn med hjälp av klientbibliotek som Azure.Identity. Sedan kan du använda åtkomsttoken som lösenord för att ansluta till databasen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.

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

Om du sedan har skapat tabeller och sekvenser i En flexibel PostgreSQL-server innan du använder Service Anslut or måste du ansluta som ägare och bevilja behörighet till skapad <aad-username> av Service Anslut or. Användarnamnet från anslutningssträng eller konfigurationen som anges av Service Anslut eller bör se ut som aad_<connection name>. Om du använder Azure-portalen väljer du knappen expandera bredvid Service Type kolumnen och hämtar värdet. Om du använder Azure CLI kontrollerar configurations du CLI-kommandoutdata.

Kör sedan frågan för att bevilja behörighet

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

Och <owner-username><owner-password> är ägare till den befintliga tabellen som kan bevilja behörigheter till andra. <aad-username>är användaren som skapats av Service Anslut or. Ersätt dem med det faktiska värdet.

Verifiera resultatet med kommandot :

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ästa steg

Följ självstudierna nedan om du vill veta mer om Service Anslut or.