Den här artikeln beskriver autentiseringsmetoder, klienter och exempelkod som du kan använda för att ansluta dina appar till Azure Database for PostgreSQL med hjälp av Service Connector. I den här artikeln hittar du även standardnamn, värden och konfiguration för miljövariabler som erhålls när du skapar tjänstanslutningar.
Beräkningstjänster som stöds
Service Connector kan användas för att ansluta följande beräkningstjänster till Azure Database for PostgreSQL:
- Служб
- Azure Container-applikationer
- Azure-funktioner
- Azure Kubernetes Service (AKS)
- 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änster till Azure Database for PostgreSQL med hjälp av Service Connector. 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 | Service Principal | 
| .NÄT | 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 (sida) | 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 | 
| Ingen | Ja | Ja | Ja | Ja | 
Anteckning
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 enligt anslutningens autentiseringstyp och klienttyp. För mer information om namngivningskonventioner, se artikeln Service Connector 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>; | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | JDBC PostgreSQL anslutningssträng | jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> | 
| Egenskaper för program | beskrivning | Exempelvärde | 
| spring.datasource.azure.passwordless-enabled | Aktivera lösenordslös autentisering | true | 
| spring.datasource.url | Databas-URL | jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require | 
| spring.datasource.username | Databasanvändarnamn | username | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | psycopg2 anslutningssträng | dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_NAME | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USER | Databasanvändarnamn | <username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | Gå till PostgreSQL anslutningssträng | host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USER | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_DATABASE | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_PORT | Portnummer | 5432 | 
| AZURE_POSTGRESQL_SSL | SSL-alternativ | true | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | PHP-inbyggda PostgreSQL-anslutningssträng | host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | Ruby PostgreSQL anslutningssträng | host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USERNAME | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_DATABASE | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_PORT | Portnummer | 5432 | 
| AZURE_POSTGRESQL_SSL | SSL-alternativ | true | 
 
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 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();
}
- Lägg till följande beroenden i din pom.xml-fil : - <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.7.5</version>
</dependency>
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity-extensions</artifactId>
    <version>1.2.0</version>
</dependency>
 
- Hämta anslutningssträng från miljövariabler och lägg till plugin-namnet för att ansluta till databasen: - import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";  
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
 
Mer information finns i följande resurser:
- Installera beroenden. - pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
 
- Hämta åtkomsttoken med hjälp av - azure-identitybiblioteket och använd token som lösenord. Hämta anslutningsinformation från miljövariablerna som lagts till av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)   
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token) 
 
- Installera beroenden. - pip install azure-identity
 
- Hämta åtkomsttoken med hjälp av - azure-identitybiblioteket med hjälp av miljövariabler som lagts till av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# credential = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)    
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token.
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
 
- I inställningsfilen hämtar du Azure PostgreSQL-databasinformation från miljövariabler som lagts till av Service Connector-tjänsten. Använd - accessTokenhämtad i föregående steg för att komma åt databasen.
 - # In your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': database,
        'USER': user,
        'PASSWORD': password,
        'HOST': host,
        'PORT': '5432',  # Port is 5432 by default 
        'OPTIONS': {'sslmode': 'require'},
    }
}
 
- Installera beroenden. - go get github.com/lib/pq
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
 
- I kod hämtar du åtkomsttoken med - azidentityoch använder den sedan som lösenord för att ansluta till Azure PostgreSQL, tillsammans med anslutningsinformation som tillhandahålls av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - import (
"database/sql"
"fmt"
"os"
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
 _ "github.com/lib/pq"
)    
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// For user-assigned identity.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// For service principal.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// tenantid := os.Getenv("AZURE_POSTGRESQL_TENANTID")
// clientsecret := os.Getenv("AZURE_POSTGRESQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
    // error handling
}
// Acquire the access token
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
    Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
// Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING") + " password=" + token.Token
conn, err := sql.Open("postgres", connectionString)
 if err != nil {
 	panic(err)
 }
 conn.Close()
 
- Installera beroenden. - npm install --save @azure/identity
npm install --save pg
 
- I kod hämtar du åtkomsttoken med hjälp av - @azure/identityoch PostgreSQL-anslutningsinformation från miljövariabler som lagts till av Service Connector-tjänsten. Kombinera dem för att upprätta anslutningen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.  
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
//     managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
    host: process.env.AZURE_POSTGRESQL_HOST,
    user: process.env.AZURE_POSTGRESQL_USER,
    password: accesstoken.token,
    database: process.env.AZURE_POSTGRESQL_DATABASE,
    port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
    ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
 
För PHP finns det inget plugin-program eller bibliotek för lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn och använda den som lösenord för att ansluta till databasen. Åtkomsttoken kan hämtas med hjälp av Azure REST API.
- I kod hämtar du åtkomsttoken med hjälp av REST API med ditt favoritbibliotek. - För användartilldelad identitet och systemtilldelad identitet tillhandahåller App Service och Container Apps en internt tillgänglig REST-slutpunkt för att hämta token för hanterade identiteter genom att definiera två miljövariabler: - IDENTITY_ENDPOINToch- IDENTITY_HEADER. Mer information finns i REST-slutpunktsreferens.
Hämta åtkomsttoken genom att göra en HTTP GET-begäran till identitetsslutpunkten och använda- https://ossrdbms-aad.database.windows.netsom- resourcei frågan. För användartilldelad identitet ska du även inkludera klient-ID:t från miljövariablerna som lagts till av Service Connector i frågan.
 - För tjänstens huvudnamn, se azure AD-begäran om tjänst-till-tjänst-åtkomsttoken för att se information om hur du hämtar åtkomsttoken. Gör POST-begäran till omfånget - https://ossrdbms-aad.database.windows.net/.defaultför och med klient-ID, klient-ID och klienthemlighet för tjänstens huvudnamn från miljövariablerna som lagts till av Service Connector.
 
- Kombinera åtkomsttoken och PostgreSQL-anslutningssträngen från miljövariabler som lagts till av Service Connector-tjänsten för att upprätta anslutningen. - <?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
 
För Ruby finns det inget plugin-program eller bibliotek för lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn och använda den som lösenord för att ansluta till databasen. Åtkomsttoken kan hämtas med hjälp av Azure REST API.
- Installera beroenden. - gem install pg
 
- I kod hämtar du åtkomsttoken med hjälp av REST API och PostgreSQL-anslutningsinformation från miljövariabler som lagts till av Service Connector-tjänsten. Kombinera dem för att upprätta anslutningen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda. - App Service och containerAppar tillhandahåller en internt tillgänglig REST-slutpunkt för att hämta token för hanterade identiteter. Mer information finns i REST-slutpunktsreferens. - require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})  
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client_id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})  
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
#     :grant_type => 'client_credentials',
#     :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
#     :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
#     :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
#   http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
    connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password="  + access_token,
)
 - Se begäran om tjänst-till-tjänst-åtkomsttoken i Azure AD för mer information om hur du hämtar åtkomsttoken för tjänstens huvudanvändare. 
 
Om du sedan har skapat tabeller och sekvenser i En flexibel PostgreSQL-server innan du använder Service Connector, måste du ansluta som ägare och bevilja behörighet till skapad <aad-username> av Service Connector. Användarnamnet från anslutningssträng eller konfigurationsuppsättningen i Service Connector bör se ut som aad_<connection name>. Om du använder Azure Portal väljer du knappen expandera bredvid Service Type kolumnen och hämtar värdet. Om du använder Azure CLI, kontrollera configurations i utdata från CLI-kommandot.
Utför sedan kommandot 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>\";"
Den <owner-username> och <owner-password> är ägaren till den befintliga tabellen som kan bevilja behörigheter till andra. 
              <aad-username> är användaren som skapats av Service Connector. 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>; | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <identity-client-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | JDBC PostgreSQL anslutningssträng | jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> | 
| Egenskaper för program | beskrivning | Exempelvärde | 
| spring.datasource.azure.passwordless-enabled | Aktivera lösenordslös autentisering | true | 
| spring.cloud.azure.credential.client-id | Ditt klient-ID | <identity-client-ID> | 
| spring.cloud.azure.credential.client-managed-identity-enabled | Aktivera klienthanterad identitet | true | 
| spring.datasource.url | Databas-URL | jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require | 
| spring.datasource.username | Databasanvändarnamn | username | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <identity-client-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | psycopg2 anslutningssträng | dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_NAME | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USER | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <<identity-client-ID>> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <identity-client-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | Gå till PostgreSQL anslutningssträng | host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USER | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_DATABASE | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_PORT | Portnummer | 5432 | 
| AZURE_POSTGRESQL_SSL | SSL-alternativ | true | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <identity-client-ID> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <identity-client-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | PHP-inbyggda PostgreSQL-anslutningssträng | host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <identity-client-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | Ruby PostgreSQL anslutningssträng | host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USERNAME | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_DATABASE | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_PORT | Portnummer | 5432 | 
| AZURE_POSTGRESQL_SSL | SSL-alternativ | true | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <identity-client-ID> | 
 
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 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();
}
- Lägg till följande beroenden i din pom.xml-fil : - <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.7.5</version>
</dependency>
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity-extensions</artifactId>
    <version>1.2.0</version>
</dependency>
 
- Hämta anslutningssträng från miljövariabler och lägg till plugin-namnet för att ansluta till databasen: - import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";  
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
 
Mer information finns i följande resurser:
- Installera beroenden. - pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
 
- Hämta åtkomsttoken med hjälp av - azure-identitybiblioteket och använd token som lösenord. Hämta anslutningsinformation från miljövariablerna som lagts till av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)   
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token) 
 
- Installera beroenden. - pip install azure-identity
 
- Hämta åtkomsttoken med hjälp av - azure-identitybiblioteket med hjälp av miljövariabler som lagts till av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# credential = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)    
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token.
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
 
- I inställningsfilen hämtar du Azure PostgreSQL-databasinformation från miljövariabler som lagts till av Service Connector-tjänsten. Använd - accessTokenhämtad i föregående steg för att komma åt databasen.
 - # In your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': database,
        'USER': user,
        'PASSWORD': password,
        'HOST': host,
        'PORT': '5432',  # Port is 5432 by default 
        'OPTIONS': {'sslmode': 'require'},
    }
}
 
- Installera beroenden. - go get github.com/lib/pq
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
 
- I kod hämtar du åtkomsttoken med - azidentityoch använder den sedan som lösenord för att ansluta till Azure PostgreSQL, tillsammans med anslutningsinformation som tillhandahålls av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - import (
"database/sql"
"fmt"
"os"
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
 _ "github.com/lib/pq"
)    
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// For user-assigned identity.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// For service principal.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// tenantid := os.Getenv("AZURE_POSTGRESQL_TENANTID")
// clientsecret := os.Getenv("AZURE_POSTGRESQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
    // error handling
}
// Acquire the access token
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
    Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
// Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING") + " password=" + token.Token
conn, err := sql.Open("postgres", connectionString)
 if err != nil {
 	panic(err)
 }
 conn.Close()
 
- Installera beroenden. - npm install --save @azure/identity
npm install --save pg
 
- I kod hämtar du åtkomsttoken med hjälp av - @azure/identityoch PostgreSQL-anslutningsinformation från miljövariabler som lagts till av Service Connector-tjänsten. Kombinera dem för att upprätta anslutningen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.  
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
//     managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
    host: process.env.AZURE_POSTGRESQL_HOST,
    user: process.env.AZURE_POSTGRESQL_USER,
    password: accesstoken.token,
    database: process.env.AZURE_POSTGRESQL_DATABASE,
    port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
    ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
 
För PHP finns det inget plugin-program eller bibliotek för lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn och använda den som lösenord för att ansluta till databasen. Åtkomsttoken kan hämtas med hjälp av Azure REST API.
- I kod hämtar du åtkomsttoken med hjälp av REST API med ditt favoritbibliotek. - För användartilldelad identitet och systemtilldelad identitet tillhandahåller App Service och Container Apps en internt tillgänglig REST-slutpunkt för att hämta token för hanterade identiteter genom att definiera två miljövariabler: - IDENTITY_ENDPOINToch- IDENTITY_HEADER. Mer information finns i REST-slutpunktsreferens.
Hämta åtkomsttoken genom att göra en HTTP GET-begäran till identitetsslutpunkten och använda- https://ossrdbms-aad.database.windows.netsom- resourcei frågan. För användartilldelad identitet ska du även inkludera klient-ID:t från miljövariablerna som lagts till av Service Connector i frågan.
 - För tjänstens huvudnamn, se azure AD-begäran om tjänst-till-tjänst-åtkomsttoken för att se information om hur du hämtar åtkomsttoken. Gör POST-begäran till omfånget - https://ossrdbms-aad.database.windows.net/.defaultför och med klient-ID, klient-ID och klienthemlighet för tjänstens huvudnamn från miljövariablerna som lagts till av Service Connector.
 
- Kombinera åtkomsttoken och PostgreSQL-anslutningssträngen från miljövariabler som lagts till av Service Connector-tjänsten för att upprätta anslutningen. - <?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
 
För Ruby finns det inget plugin-program eller bibliotek för lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn och använda den som lösenord för att ansluta till databasen. Åtkomsttoken kan hämtas med hjälp av Azure REST API.
- Installera beroenden. - gem install pg
 
- I kod hämtar du åtkomsttoken med hjälp av REST API och PostgreSQL-anslutningsinformation från miljövariabler som lagts till av Service Connector-tjänsten. Kombinera dem för att upprätta anslutningen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda. - App Service och containerAppar tillhandahåller en internt tillgänglig REST-slutpunkt för att hämta token för hanterade identiteter. Mer information finns i REST-slutpunktsreferens. - require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})  
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client_id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})  
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
#     :grant_type => 'client_credentials',
#     :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
#     :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
#     :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
#   http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
    connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password="  + access_token,
)
 - Se begäran om tjänst-till-tjänst-åtkomsttoken i Azure AD för mer information om hur du hämtar åtkomsttoken för tjänstens huvudanvändare. 
 
Om du sedan har skapat tabeller och sekvenser i En flexibel PostgreSQL-server innan du använder Service Connector, måste du ansluta som ägare och bevilja behörighet till skapad <aad-username> av Service Connector. Användarnamnet från anslutningssträng eller konfigurationsuppsättningen i Service Connector bör se ut som aad_<connection name>. Om du använder Azure Portal väljer du knappen expandera bredvid Service Type kolumnen och hämtar värdet. Om du använder Azure CLI, kontrollera configurations i utdata från CLI-kommandot.
Utför sedan kommandot 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>\";"
Den <owner-username> och <owner-password> är ägaren till den befintliga tabellen som kan bevilja behörigheter till andra. 
              <aad-username> är användaren som skapats av Service Connector. 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
Varning
Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Det autentiseringsflöde som beskrivs i den här proceduren kräver mycket stort förtroende för programmet och medför risker som inte finns i andra flöden. Du bör bara använda det här flödet när andra säkrare flöden, till exempel hanterade identiteter, inte är livskraftiga.
 
| 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>; | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | JDBC PostgreSQL anslutningssträng | jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> | 
| Egenskaper för program | beskrivning | Exempelvärde | 
| spring.datasource.url | Databas-URL | jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require | 
| spring.datasource.username | Databasanvändarnamn | <username> | 
| spring.datasource.password | Databaslösenord | <password> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | psycopg2 anslutningssträng | dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_NAME | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USER | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_PASSWORD | Databaslösenord | <database-password> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | Gå till PostgreSQL anslutningssträng | host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USER | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_PASSWORD | Databaslösenord | <password> | 
| AZURE_POSTGRESQL_DATABASE | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_PORT | Portnummer | 5432 | 
| AZURE_POSTGRESQL_SSL | SSL-alternativ | true | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | PHP-inbyggda PostgreSQL-anslutningssträng | host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | Ruby PostgreSQL anslutningssträng | host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USERNAME | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_DATABASE | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_PORT | Portnummer | 5432 | 
| AZURE_POSTGRESQL_SSL | SSL-alternativ | true | 
| AZURE_POSTGRESQL_PASSWORD | Databaslösenord | <password> | 
 
Exempelkod
Se stegen och koden nedan för att ansluta till Azure Database for PostgreSQL med hjälp av en anslutningssträng.
- Installera beroenden enligt Npgsql-vägledningen
- I kod hämtar du PostgreSQL-anslutningssträngen från miljövariabler som lagts till av Service Connector.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
    connection.Open();
}
 
- Följ pgJDBC-vägledningen för att installera beroenden.
- I kod hämtar du PostgreSQL-anslutningssträngen från miljövariabler som lagts till av Service Connector.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
String connectionString = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
Connection connection = null;
try {
    connection = DriverManager.getConnection(connectionString);
    System.out.println("Connection successful!");
} catch (SQLException e){
    System.out.println(e.getMessage());
}
 
- Installera Spring Cloud Azure Starter JDBC PostgreSQL-modulen genom att lägga till följande beroenden i pom.xmlfilen. Hitta versionen av Spring Cloud Azure här.<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure.spring</groupId>
            <artifactId>spring-cloud-azure-dependencies</artifactId>
            <version>5.20.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.azure.spring</groupId>
            <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
        </dependency>
    </dependencies>
</dependencyManagement>
 
- Konfigurera ett Spring Boot-program, mer information i det här avsnittet.
- Installera beroenden enligt vägledningen för psycopg2.
- I kod hämtar du PostgreSQL-anslutningsinformationen från miljövariabler som lagts till av Service Connector.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
 
- Installera beroenden enligt Django-vägledningen och psycopg2-vägledningen.
pip install django
pip install psycopg2
 
- I inställningsfilen hämtar du PostgreSQL-databasinformationen från miljövariabler som lagts till av Service Connector.
# in your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = os.getenv('AZURE_POSTGRESQL_PASSWORD')
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': database,
        'USER': user,
        'PASSWORD': password,
        'HOST': host,
        'PORT': '5432',  # Port is 5432 by default 
        'OPTIONS': {'sslmode': 'require'},
    }
}
 
- Installera beroenden.
go get github.com/lib/pq
 
- I kod hämtar du PostgreSQL-anslutningssträngen från miljövariabler som lagts till av Service Connector.
import (
"database/sql"
"fmt"
"os"
 _ "github.com/lib/pq"
)
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
conn, err := sql.Open("postgres", connectionString)
 if err != nil {
 	panic(err)
 }
 conn.Close()
 
- Installera beroenden.
npm install pg dotenv
 
- I kod hämtar du PostgreSQL-anslutningsinformationen från miljövariabler som lagts till av Service Connector.
import { Client } from 'pg';
(async () => {
 const client = new Client({
     host: process.env.AZURE_POSTGRESQL_HOST,
     user: process.env.AZURE_POSTGRESQL_USER,
     password: process.env.AZURE_POSTGRESQL_PASSWORD,
     database: process.env.AZURE_POSTGRESQL_DATABASE,
     port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
     ssl: process.env.AZURE_POSTGRESQL_SSL
 });
 await client.connect();
 await client.end();
})();
 
- I kod hämtar du PostgreSQL-anslutningsinformationen från miljövariabler som lagts till av Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
 
- Installera beroenden.
gem install pg
 
- I kod hämtar du PostgreSQL-anslutningsinformationen från miljövariabler som lagts till av Service Connector.
require 'pg'
require 'dotenv/load'
begin
    conn = PG::Connection.new(
        connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'],
    )
rescue PG::Error => e
    puts e.message
ensure
    connection.close if connection
end
 
 
Service Principal
| 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 hyresgäst-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>; | 
| 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 hyresgäst-ID | <tenant-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | JDBC PostgreSQL anslutningssträng | jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> | 
| Egenskaper för program | beskrivning | Exempelvärde | 
| spring.datasource.azure.passwordless-enabled | Aktivera lösenordslös autentisering | true | 
| spring.cloud.azure.credential.client-id | Ditt klient-ID | <client-ID> | 
| spring.cloud.azure.credential.client-secret | Din klienthemlighet | <client-secret> | 
| spring.cloud.azure.credential.tenant-id | Ditt hyresgäst-ID | <tenant-ID> | 
| spring.datasource.url | Databas-URL | jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require | 
| spring.datasource.username | Databasanvändarnamn | username | 
| 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 hyresgäst-ID | <tenant-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | psycopg2 anslutningssträng | dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_NAME | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USER | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <client-ID> | 
| AZURE_POSTGRESQL_CLIENTSECRET | Din klientHEMLIGHET | <client-secret> | 
| AZURE_POSTGRESQL_TENANTID | Ditt hyresgäst-ID | <tenant-ID> | 
| 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 hyresgäst-ID | <tenant-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | Gå till PostgreSQL anslutningssträng | host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USER | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_DATABASE | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_PORT | Portnummer | 5432 | 
| AZURE_POSTGRESQL_SSL | SSL-alternativ | true | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <client-ID> | 
| AZURE_POSTGRESQL_CLIENTSECRET | Din klienthemlighet | <client-secret> | 
| AZURE_POSTGRESQL_TENANTID | Ditt hyresgäst-ID | <tenant-ID> | 
| 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 hyresgäst-ID | <tenant-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | PHP-inbyggda PostgreSQL-anslutningssträng | host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> | 
| 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 hyresgäst-ID | <tenant-ID> | 
| AZURE_POSTGRESQL_CONNECTIONSTRING | Ruby PostgreSQL anslutningssträng | host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> | 
| Standardnamn för miljövariabel | beskrivning | Exempelvärde | 
| AZURE_POSTGRESQL_HOST | Databasvärd-URL | <PostgreSQL-server-name>.postgres.database.azure.com | 
| AZURE_POSTGRESQL_USERNAME | Databasanvändarnamn | <username> | 
| AZURE_POSTGRESQL_DATABASE | Databasnamn | <database-name> | 
| AZURE_POSTGRESQL_PORT | Portnummer | 5432 | 
| AZURE_POSTGRESQL_SSL | SSL-alternativ | true | 
| AZURE_POSTGRESQL_CLIENTID | Ditt klient-ID | <identity-client-ID> | 
| AZURE_POSTGRESQL_CLIENTSECRET | Din klienthemlighet | <client-secret> | 
| AZURE_POSTGRESQL_TENANTID | Ditt hyresgäst-ID | <tenant-ID> | 
 
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 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();
}
- Lägg till följande beroenden i din pom.xml-fil : - <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.7.5</version>
</dependency>
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity-extensions</artifactId>
    <version>1.2.0</version>
</dependency>
 
- Hämta anslutningssträng från miljövariabler och lägg till plugin-namnet för att ansluta till databasen: - import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";  
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
 
Mer information finns i följande resurser:
- Installera beroenden. - pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
 
- Hämta åtkomsttoken med hjälp av - azure-identitybiblioteket och använd token som lösenord. Hämta anslutningsinformation från miljövariablerna som lagts till av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)   
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token) 
 
- Installera beroenden. - pip install azure-identity
 
- Hämta åtkomsttoken med hjälp av - azure-identitybiblioteket med hjälp av miljövariabler som lagts till av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# credential = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)    
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token.
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
 
- I inställningsfilen hämtar du Azure PostgreSQL-databasinformation från miljövariabler som lagts till av Service Connector-tjänsten. Använd - accessTokenhämtad i föregående steg för att komma åt databasen.
 - # In your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': database,
        'USER': user,
        'PASSWORD': password,
        'HOST': host,
        'PORT': '5432',  # Port is 5432 by default 
        'OPTIONS': {'sslmode': 'require'},
    }
}
 
- Installera beroenden. - go get github.com/lib/pq
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
 
- I kod hämtar du åtkomsttoken med - azidentityoch använder den sedan som lösenord för att ansluta till Azure PostgreSQL, tillsammans med anslutningsinformation som tillhandahålls av Service Connector. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - import (
"database/sql"
"fmt"
"os"
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
 _ "github.com/lib/pq"
)    
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// For user-assigned identity.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// For service principal.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// tenantid := os.Getenv("AZURE_POSTGRESQL_TENANTID")
// clientsecret := os.Getenv("AZURE_POSTGRESQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
    // error handling
}
// Acquire the access token
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
    Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
// Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING") + " password=" + token.Token
conn, err := sql.Open("postgres", connectionString)
 if err != nil {
 	panic(err)
 }
 conn.Close()
 
- Installera beroenden. - npm install --save @azure/identity
npm install --save pg
 
- I kod hämtar du åtkomsttoken med hjälp av - @azure/identityoch PostgreSQL-anslutningsinformation från miljövariabler som lagts till av Service Connector-tjänsten. Kombinera dem för att upprätta anslutningen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda.
 - import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.  
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
//     managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
    host: process.env.AZURE_POSTGRESQL_HOST,
    user: process.env.AZURE_POSTGRESQL_USER,
    password: accesstoken.token,
    database: process.env.AZURE_POSTGRESQL_DATABASE,
    port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
    ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
 
För PHP finns det inget plugin-program eller bibliotek för lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn och använda den som lösenord för att ansluta till databasen. Åtkomsttoken kan hämtas med hjälp av Azure REST API.
- I kod hämtar du åtkomsttoken med hjälp av REST API med ditt favoritbibliotek. - För användartilldelad identitet och systemtilldelad identitet tillhandahåller App Service och Container Apps en internt tillgänglig REST-slutpunkt för att hämta token för hanterade identiteter genom att definiera två miljövariabler: - IDENTITY_ENDPOINToch- IDENTITY_HEADER. Mer information finns i REST-slutpunktsreferens.
Hämta åtkomsttoken genom att göra en HTTP GET-begäran till identitetsslutpunkten och använda- https://ossrdbms-aad.database.windows.netsom- resourcei frågan. För användartilldelad identitet ska du även inkludera klient-ID:t från miljövariablerna som lagts till av Service Connector i frågan.
 - För tjänstens huvudnamn, se azure AD-begäran om tjänst-till-tjänst-åtkomsttoken för att se information om hur du hämtar åtkomsttoken. Gör POST-begäran till omfånget - https://ossrdbms-aad.database.windows.net/.defaultför och med klient-ID, klient-ID och klienthemlighet för tjänstens huvudnamn från miljövariablerna som lagts till av Service Connector.
 
- Kombinera åtkomsttoken och PostgreSQL-anslutningssträngen från miljövariabler som lagts till av Service Connector-tjänsten för att upprätta anslutningen. - <?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
 
För Ruby finns det inget plugin-program eller bibliotek för lösenordslösa anslutningar. Du kan hämta en åtkomsttoken för den hanterade identiteten eller tjänstens huvudnamn och använda den som lösenord för att ansluta till databasen. Åtkomsttoken kan hämtas med hjälp av Azure REST API.
- Installera beroenden. - gem install pg
 
- I kod hämtar du åtkomsttoken med hjälp av REST API och PostgreSQL-anslutningsinformation från miljövariabler som lagts till av Service Connector-tjänsten. Kombinera dem för att upprätta anslutningen. När du använder koden nedan avkommentarer du delen av kodfragmentet för den autentiseringstyp som du vill använda. - App Service och containerAppar tillhandahåller en internt tillgänglig REST-slutpunkt för att hämta token för hanterade identiteter. Mer information finns i REST-slutpunktsreferens. - require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})  
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client_id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})  
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
#     :grant_type => 'client_credentials',
#     :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
#     :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
#     :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
#   http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
    connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password="  + access_token,
)
 - Se begäran om tjänst-till-tjänst-åtkomsttoken i Azure AD för mer information om hur du hämtar åtkomsttoken för tjänstens huvudanvändare. 
 
Om du sedan har skapat tabeller och sekvenser i En flexibel PostgreSQL-server innan du använder Service Connector, måste du ansluta som ägare och bevilja behörighet till skapad <aad-username> av Service Connector. Användarnamnet från anslutningssträng eller konfigurationsuppsättningen i Service Connector bör se ut som aad_<connection name>. Om du använder Azure Portal väljer du knappen expandera bredvid Service Type kolumnen och hämtar värdet. Om du använder Azure CLI, kontrollera configurations i utdata från CLI-kommandot.
Utför sedan kommandot 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>\";"
Den <owner-username> och <owner-password> är ägaren till den befintliga tabellen som kan bevilja behörigheter till andra. 
              <aad-username> är användaren som skapats av Service Connector. 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 Connector.