Partager via


Intégrer Azure Database pour PostgreSQL avec le Connecteur de services

Cette page présente les méthodes d’authentification et les clients pris en charge, et présente des exemples de code que vous pouvez utiliser pour connecter Azure Database pour PostgreSQL à d’autres services cloud en utilisant Service Connector. Il se peut que vous puissiez vous connecter à Azure Database pour PostgreSQL dans d’autres langages de programmation sans utiliser le Connecteur de services. Cette page présente également les noms et les valeurs des variables d’environnement par défaut (ou configuration Spring Boot) que vous obtenez lorsque vous créez des connexions de service.

Service de calcul pris en charge

Service Connector peut être utilisé pour connecter les services de calcul suivants à Azure Database pour PostgreSQL :

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

Types d’authentification et de clients pris en charge

Le tableau ci-dessous montre les combinaisons méthodes d’authentification/clients prises en charge pour connecter votre service de calcul à Azure Database pour PostgreSQL en utilisant Service Connector. « Oui » indique que la combinaison est prise en charge, tandis que « Non » indique qu’elle n’est pas prise en charge.

Type de client Identité managée affectée par le système Identité managée affectée par l’utilisateur Secret/chaîne de connexion Principal du service
.NET Oui Oui Oui Oui
Go (PG) Oui Oui Oui Oui
Java (JDBC) Oui Oui Oui Oui
Java – Spring Boot (JDBC) Oui Oui Oui Oui
Node.js (pg) Oui Oui Oui Oui
PHP (natif) Oui Oui Oui Oui
Python (psycopg2) Oui Oui Oui Oui
Python-Django Oui Oui Oui Oui
Ruby (ruby-pg) Oui Oui Oui Oui
Aucun Oui Oui Oui Oui

Ce tableau indique que toutes les combinaisons de types client et de méthodes d’authentification dans la table sont prises en charge. Tous les types client peuvent utiliser l’une quelconque des méthodes d’authentification pour se connecter à Azure Database pour PostgreSQL en utilisant Service Connector.

Remarque

Identité managée affectée par le système, Identité managée affectée par l’utilisateur et Principal de service ne sont pris en charge que sur Azure CLI.

Noms des variables d’environnement par défaut ou propriétés de l’application et exemple de code

Référencez les détails de connexion et l’exemple de code dans les tableaux suivants, en fonction du type d’authentification et du type client de votre connexion, pour connecter des services de calcul à Azure Database pour PostgreSQL. Pour plus d’informations sur les conventions d’affectation de noms, consultez l’article Services internes du connecteur de services.

Identité managée affectée par le système

Nom de variable d’environnement par défaut Description Exemple de valeur
AZURE_POSTGRESQL_CONNECTIONSTRING Chaîne de connexion .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Exemple de code

Reportez-vous aux étapes et au code ci-dessous pour vous connecter à Azure Database pour PostgreSQL en utilisant une identité managée affectée par le système.

Pour .NET, il n’existe pas de plug-in ou de bibliothèque pour prendre en charge les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service à l’aide d’une bibliothèque cliente telle que Azure.Identity. Vous pouvez ensuite utiliser le jeton d’accès comme mot de passe pour vous connecter à la base de données. Lorsque vous utilisez le code ci-dessous, supprimez les marques de commentaire de la partie de l’extrait de code pour le type d’authentification que vous souhaitez utiliser.

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

Ensuite, si vous avez créé des tables et des séquences dans un serveur flexible PostgreSQL avant d’utiliser le connecteur de services, vous devez vous connecter en tant que propriétaire et accorder à <aad-username> l’autorisation créée par le connecteur de services. Le nom d’utilisateur de la chaîne de connexion ou de la configuration définie par le connecteur de service doit ressembler à aad_<connection name>. Si vous utilisez le Portail Azure, sélectionnez le bouton Développer à côté de la colonne Service Type et obtenez la valeur. Si vous utilisez Azure CLI, cochez configurations dans la sortie de la commande CLI.

Ensuite, exécutez la requête pour accorder l’autorisation

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

<owner-username> et <owner-password> est le propriétaire de la table existante qui peut accorder des autorisations à d’autres personnes. <aad-username> est l’utilisateur créé par Service Connector. Remplacez-les par la valeur réelle.

Validez le résultat avec la commande suivante :

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

Identité managée affectée par l’utilisateur

Nom de variable d’environnement par défaut Description Exemple de valeur
AZURE_POSTGRESQL_CLIENTID Votre ID client <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Chaîne de connexion .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Exemple de code

Reportez-vous aux étapes et au code ci-dessous pour vous connecter à Azure Database pour PostgreSQL en utilisant une identité managée affectée par l’utilisateur.

Pour .NET, il n’existe pas de plug-in ou de bibliothèque pour prendre en charge les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service à l’aide d’une bibliothèque cliente telle que Azure.Identity. Vous pouvez ensuite utiliser le jeton d’accès comme mot de passe pour vous connecter à la base de données. Lorsque vous utilisez le code ci-dessous, supprimez les marques de commentaire de la partie de l’extrait de code pour le type d’authentification que vous souhaitez utiliser.

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

Ensuite, si vous avez créé des tables et des séquences dans un serveur flexible PostgreSQL avant d’utiliser le connecteur de services, vous devez vous connecter en tant que propriétaire et accorder à <aad-username> l’autorisation créée par le connecteur de services. Le nom d’utilisateur de la chaîne de connexion ou de la configuration définie par le connecteur de service doit ressembler à aad_<connection name>. Si vous utilisez le Portail Azure, sélectionnez le bouton Développer à côté de la colonne Service Type et obtenez la valeur. Si vous utilisez Azure CLI, cochez configurations dans la sortie de la commande CLI.

Ensuite, exécutez la requête pour accorder l’autorisation

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

<owner-username> et <owner-password> est le propriétaire de la table existante qui peut accorder des autorisations à d’autres personnes. <aad-username> est l’utilisateur créé par Service Connector. Remplacez-les par la valeur réelle.

Validez le résultat avec la commande suivante :

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

Chaîne de connexion

Nom de variable d’environnement par défaut Description Exemple de valeur
AZURE_POSTGRESQL_CONNECTIONSTRING Chaîne de connexion .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Exemple de code

Reportez-vous aux étapes et au code ci-dessous pour vous connecter à Azure Database pour PostgreSQL en utilisant une chaîne de connexion.

  1. Installez des dépendances. Suivez les instructions pour installer Npgsql
  2. Dans le code, obtenez la chaîne de connexion PostgreSQL depuis les variables d’environnement ajoutées par le service Service Connector. Pour définir les configurations TSL pour le serveur PostgreSQL, reportez-vous à ces étapes.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Principal du service

Nom de variable d’environnement par défaut Description Exemple de valeur
AZURE_POSTGRESQL_CLIENTID Votre ID client <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Votre clé secrète client <client-secret>
AZURE_POSTGRESQL_TENANTID Votre ID d’abonné <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Chaîne de connexion .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Exemple de code

Reportez-vous aux étapes et au code ci-dessous pour vous connecter à Azure Database pour PostgreSQL en utilisant un principal de service.

Pour .NET, il n’existe pas de plug-in ou de bibliothèque pour prendre en charge les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service à l’aide d’une bibliothèque cliente telle que Azure.Identity. Vous pouvez ensuite utiliser le jeton d’accès comme mot de passe pour vous connecter à la base de données. Lorsque vous utilisez le code ci-dessous, supprimez les marques de commentaire de la partie de l’extrait de code pour le type d’authentification que vous souhaitez utiliser.

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

Ensuite, si vous avez créé des tables et des séquences dans un serveur flexible PostgreSQL avant d’utiliser le connecteur de services, vous devez vous connecter en tant que propriétaire et accorder à <aad-username> l’autorisation créée par le connecteur de services. Le nom d’utilisateur de la chaîne de connexion ou de la configuration définie par le connecteur de service doit ressembler à aad_<connection name>. Si vous utilisez le Portail Azure, sélectionnez le bouton Développer à côté de la colonne Service Type et obtenez la valeur. Si vous utilisez Azure CLI, cochez configurations dans la sortie de la commande CLI.

Ensuite, exécutez la requête pour accorder l’autorisation

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

<owner-username> et <owner-password> est le propriétaire de la table existante qui peut accorder des autorisations à d’autres personnes. <aad-username> est l’utilisateur créé par Service Connector. Remplacez-les par la valeur réelle.

Validez le résultat avec la commande suivante :

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

Étapes suivantes

Suivez les tutoriels ci-dessous pour en savoir plus sur Service Connector.