Cet article traite des méthodes d’authentification, des clients et des exemples de code pris en charge que vous pouvez utiliser pour connecter vos applications à Azure Database pour PostgreSQL à l’aide de Service Connector. Dans cet article, vous trouverez également les noms, valeurs et configuration des variables d’environnement par défaut obtenus lors de la création de 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 Container Apps (Applications de Conteneur Azure)
- Les fonctions Azure
- Azure Kubernetes Service (AKS)
- Azure Spring Apps
Types d’authentification et de clients pris en charge
Le tableau ci-dessous montre quelles combinaisons de méthodes d’authentification et de clients sont prises en charge pour connecter des services de calcul à Azure Database pour PostgreSQL à l’aide de 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 |
.FILET |
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 |
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 de client de votre connexion. 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 |
Descriptif |
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>; |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Propriétés de l’application |
Descriptif |
Exemple de valeur |
spring.datasource.azure.passwordless-enabled |
Activez l’authentification sans mot de passe |
true |
spring.datasource.url |
DATABASE_URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nom d’utilisateur de la base de données |
username |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_NAME |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nom d’utilisateur de la base de données |
<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL Go |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numéro de port |
5432 |
AZURE_POSTGRESQL_SSL |
Option SSL |
true |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL PHP native |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL Ruby |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numéro de port |
5432 |
AZURE_POSTGRESQL_SSL |
Option SSL |
true |
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 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();
}
Ajoutez les dépendances suivantes dans votre fichier pom.xml :
<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>
Obtenez la chaîne de connexion à partir des variables d’environnement et ajoutez le nom du plug-in pour vous connecter à la base de données :
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);
Pour plus d’informations, consultez les ressources suivantes :
Installez des dépendances.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenez un jeton d’accès à l’aide de la bibliothèque azure-identity
et utilisez le jeton comme mot de passe. Obtenez des informations de connexion à partir de la variable d’environnement ajoutée par le connecteur de services. 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.
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)
Installez des dépendances.
pip install azure-identity
Obtenez un jeton d’accès à l’aide de la bibliothèque azure-identity
en utilisant les variables d’environnement ajoutées par le connecteur de services. 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.
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')
Dans le fichier de paramètres, obtenez les informations de base de données Azure PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Utilisez accessToken
obtenu à l’étape précédente pour accéder à la base de données.
# 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'},
}
}
Installez des dépendances.
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"
Dans le code, obtenez le jeton d’accès à l’aide de azidentity
, puis utilisez-le comme mot de passe pour vous connecter à Azure PostgreSQL, ainsi qu’avec les informations de connexion fournies par le connecteur de services. 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.
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()
Installez des dépendances.
npm install --save @azure/identity
npm install --save pg
Dans le code, obtenez le jeton d’accès à l’aide de @azure/identity
et des informations de connexion PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Combinez-les pour établir la connexion. 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.
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();
})();
Pour PHP, il n’existe pas de plug-in ou de bibliothèque pour les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service et l’utiliser comme mot de passe pour vous connecter à la base de données. Le jeton d’accès peut être obtenu à l’aide de l’API REST Azure.
Dans le code, obtenez le jeton d’accès à l’aide de l’API REST avec votre bibliothèque préférée.
Concernant l’identité affectée par l’utilisateur et l’identité affectée par le système, App Service et Container Apps fournissent un point de terminaison REST accessible en interne afin de récupérer des jetons pour les identités managées en définissant deux variables d’environnement : IDENTITY_ENDPOINT
et IDENTITY_HEADER
. Pour plus d’informations, consultez la référence du point de terminaison REST.
Obtenez le jeton d’accès en effectuant une requête HTTP GET au point de terminaison d’identité et utilisez https://ossrdbms-aad.database.windows.net
comme resource
dans la requête. Pour l’identité affectée par l’utilisateur, incluez également l’ID client des variables d’environnement ajoutées par le connecteur de services dans la requête.
Pour le principal de service, reportez-vous à la demande de jeton d’accès de service à service Azure AD pour afficher les détails de l’acquisition du jeton d’accès. Effectuez la requête POST sur l’étendue de https://ossrdbms-aad.database.windows.net/.default
avec l’ID locataire, l’ID client et la clé secrète client du principal de service à partir des variables d’environnement ajoutées par le connecteur de services.
Combinez le jeton d’accès et la chaîne de connexion PostgreSQL à partir de variables d’environnement ajoutées par le service Service Connector pour établir la connexion.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Pour Ruby, il n’existe pas de plug-in ou de bibliothèque pour les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service et l’utiliser comme mot de passe pour vous connecter à la base de données. Le jeton d’accès peut être obtenu à l’aide de l’API REST Azure.
Installez des dépendances.
gem install pg
Dans le code, obtenez le jeton d’accès à l’aide de l’API REST et des informations de connexion PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Combinez-les pour établir la connexion. 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.
App Service et container Apps fournissent un point de terminaison REST accessible en interne afin de récupérer des jetons pour les identités managées. Pour plus d’informations, consultez la référence du point de terminaison REST.
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,
)
Reportez-vous à la demande de jeton d’accès de service à service Azure AD pour voir plus d’informations sur l’acquisition du jeton d’accès pour le principal de service.
Pour les autres langages, utilisez les propriétés de connexion définis par le connecteur de services dans les variables d’environnement pour connecter la base de données. Pour plus d’informations sur les variables d’environnement, consultez l’article Intégrer Azure Database pour PostgreSQL avec Service Connector.
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 |
Descriptif |
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>; |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Propriétés de l’application |
Descriptif |
Exemple de valeur |
spring.datasource.azure.passwordless-enabled |
Activez l’authentification sans mot de passe |
true |
spring.cloud.azure.credential.client-id |
Votre ID client |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Activez l’identité managée client |
true |
spring.datasource.url |
DATABASE_URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nom d’utilisateur de la base de données |
username |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_NAME |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<<identity-client-ID>> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL Go |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numéro de port |
5432 |
AZURE_POSTGRESQL_SSL |
Option SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<identity-client-ID> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL PHP native |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL Ruby |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numéro de port |
5432 |
AZURE_POSTGRESQL_SSL |
Option SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<identity-client-ID> |
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 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();
}
Ajoutez les dépendances suivantes dans votre fichier pom.xml :
<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>
Obtenez la chaîne de connexion à partir des variables d’environnement et ajoutez le nom du plug-in pour vous connecter à la base de données :
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);
Pour plus d’informations, consultez les ressources suivantes :
Installez des dépendances.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenez un jeton d’accès à l’aide de la bibliothèque azure-identity
et utilisez le jeton comme mot de passe. Obtenez des informations de connexion à partir de la variable d’environnement ajoutée par le connecteur de services. 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.
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)
Installez des dépendances.
pip install azure-identity
Obtenez un jeton d’accès à l’aide de la bibliothèque azure-identity
en utilisant les variables d’environnement ajoutées par le connecteur de services. 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.
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')
Dans le fichier de paramètres, obtenez les informations de base de données Azure PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Utilisez accessToken
obtenu à l’étape précédente pour accéder à la base de données.
# 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'},
}
}
Installez des dépendances.
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"
Dans le code, obtenez le jeton d’accès à l’aide de azidentity
, puis utilisez-le comme mot de passe pour vous connecter à Azure PostgreSQL, ainsi qu’avec les informations de connexion fournies par le connecteur de services. 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.
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()
Installez des dépendances.
npm install --save @azure/identity
npm install --save pg
Dans le code, obtenez le jeton d’accès à l’aide de @azure/identity
et des informations de connexion PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Combinez-les pour établir la connexion. 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.
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();
})();
Pour PHP, il n’existe pas de plug-in ou de bibliothèque pour les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service et l’utiliser comme mot de passe pour vous connecter à la base de données. Le jeton d’accès peut être obtenu à l’aide de l’API REST Azure.
Dans le code, obtenez le jeton d’accès à l’aide de l’API REST avec votre bibliothèque préférée.
Concernant l’identité affectée par l’utilisateur et l’identité affectée par le système, App Service et Container Apps fournissent un point de terminaison REST accessible en interne afin de récupérer des jetons pour les identités managées en définissant deux variables d’environnement : IDENTITY_ENDPOINT
et IDENTITY_HEADER
. Pour plus d’informations, consultez la référence du point de terminaison REST.
Obtenez le jeton d’accès en effectuant une requête HTTP GET au point de terminaison d’identité et utilisez https://ossrdbms-aad.database.windows.net
comme resource
dans la requête. Pour l’identité affectée par l’utilisateur, incluez également l’ID client des variables d’environnement ajoutées par le connecteur de services dans la requête.
Pour le principal de service, reportez-vous à la demande de jeton d’accès de service à service Azure AD pour afficher les détails de l’acquisition du jeton d’accès. Effectuez la requête POST sur l’étendue de https://ossrdbms-aad.database.windows.net/.default
avec l’ID locataire, l’ID client et la clé secrète client du principal de service à partir des variables d’environnement ajoutées par le connecteur de services.
Combinez le jeton d’accès et la chaîne de connexion PostgreSQL à partir de variables d’environnement ajoutées par le service Service Connector pour établir la connexion.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Pour Ruby, il n’existe pas de plug-in ou de bibliothèque pour les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service et l’utiliser comme mot de passe pour vous connecter à la base de données. Le jeton d’accès peut être obtenu à l’aide de l’API REST Azure.
Installez des dépendances.
gem install pg
Dans le code, obtenez le jeton d’accès à l’aide de l’API REST et des informations de connexion PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Combinez-les pour établir la connexion. 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.
App Service et container Apps fournissent un point de terminaison REST accessible en interne afin de récupérer des jetons pour les identités managées. Pour plus d’informations, consultez la référence du point de terminaison REST.
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,
)
Reportez-vous à la demande de jeton d’accès de service à service Azure AD pour voir plus d’informations sur l’acquisition du jeton d’accès pour le principal de service.
Pour les autres langages, utilisez les propriétés de connexion définis par le connecteur de services dans les variables d’environnement pour connecter la base de données. Pour plus d’informations sur les variables d’environnement, consultez l’article Intégrer Azure Database pour PostgreSQL avec Service Connector.
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
Avertissement
Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Le flux d'authentification décrit dans cette procédure demande un degré de confiance très élevé dans l'application et comporte des risques qui ne sont pas présents dans d'autres flux. Vous ne devez utiliser ce flux que si d’autres flux plus sécurisés, tels que les identités managées, ne sont pas viables.
Nom de variable d’environnement par défaut |
Descriptif |
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>; |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
Propriétés de l’application |
Descriptif |
Exemple de valeur |
spring.datasource.url |
DATABASE_URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nom d’utilisateur de la base de données |
<username> |
spring.datasource.password |
Mot de passe de la base de données |
<password> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_NAME |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Mot de passe de la base de données |
<database-password> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL Go |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Mot de passe de la base de données |
<password> |
AZURE_POSTGRESQL_DATABASE |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numéro de port |
5432 |
AZURE_POSTGRESQL_SSL |
Option SSL |
true |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL PHP native |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Chaîne de connexion PostgreSQL Ruby |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numéro de port |
5432 |
AZURE_POSTGRESQL_SSL |
Option SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
Mot de passe de la base de données |
<password> |
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.
- Installer des dépendances en suivant les instructions de Npgsql
- Dans le code, obtenez la chaîne de connexion PostgreSQL à partir de variables d’environnement ajoutées par Service Connector.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Installez les dépendances en suivant les instructions pgJDBC.
- Dans le code, obtenez la chaîne de connexion PostgreSQL à partir de variables d’environnement ajoutées par 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());
}
- Installez le module PostgreSQL Spring Cloud Azure Starter JDBC en ajoutant les dépendances suivantes à votre fichier
pom.xml
. Vous trouverez la version de Spring Cloud Azure ici.
<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>
- Configurez une application Spring Boot, plus de détails dans cette section.
- Installez les dépendances en suivant les instructions de psycopg2.
- Dans le code, obtenez les informations de connexion PostgreSQL à partir des variables d’environnement ajoutées par Service Connector.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Installez les dépendances en suivant les instructions de Django et psycopg2.
pip install django
pip install psycopg2
- Dans le fichier de paramètre, obtenez les informations de base de données PostgreSQL à partir des variables d’environnement ajoutées par 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'},
}
}
- Installez des dépendances.
go get github.com/lib/pq
- Dans le code, obtenez la chaîne de connexion PostgreSQL à partir de variables d’environnement ajoutées par 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()
- Installez des dépendances.
npm install pg dotenv
- Dans le code, obtenez les informations de connexion PostgreSQL à partir des variables d’environnement ajoutées par 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();
})();
- Dans le code, obtenez les informations de connexion PostgreSQL à partir des variables d’environnement ajoutées par Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Installez des dépendances.
gem install pg
- Dans le code, obtenez les informations de connexion PostgreSQL à partir des variables d’environnement ajoutées par 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
Pour les autres langages, utilisez les propriétés de connexion définis par le connecteur de services dans les variables d’environnement pour connecter la base de données. Pour plus d’informations sur les variables d’environnement, consultez l’article Intégrer Azure Database pour PostgreSQL avec Service Connector.
Principal du service
Nom de variable d’environnement par défaut |
Descriptif |
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>; |
Nom de variable d’environnement par défaut |
Descriptif |
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 JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Propriétés de l’application |
Descriptif |
Exemple de valeur |
spring.datasource.azure.passwordless-enabled |
Activez l’authentification sans mot de passe |
true |
spring.cloud.azure.credential.client-id |
Votre ID client |
<client-ID> |
spring.cloud.azure.credential.client-secret |
Votre clé secrète client |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
Votre ID d’abonné |
<tenant-ID> |
spring.datasource.url |
DATABASE_URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nom d’utilisateur de la base de données |
username |
Nom de variable d’environnement par défaut |
Descriptif |
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 psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_NAME |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nom d’utilisateur de la base de données |
<username> |
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> |
Nom de variable d’environnement par défaut |
Descriptif |
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 PostgreSQL Go |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numéro de port |
5432 |
AZURE_POSTGRESQL_SSL |
Option SSL |
true |
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> |
Nom de variable d’environnement par défaut |
Descriptif |
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 PostgreSQL PHP native |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
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 PostgreSQL Ruby |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nom de variable d’environnement par défaut |
Descriptif |
Exemple de valeur |
AZURE_POSTGRESQL_HOST |
URL de l’hôte de la base de données |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nom d’utilisateur de la base de données |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nom de la base de données |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numéro de port |
5432 |
AZURE_POSTGRESQL_SSL |
Option SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Votre ID client |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Votre clé secrète client |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Votre ID d’abonné |
<tenant-ID> |
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 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();
}
Ajoutez les dépendances suivantes dans votre fichier pom.xml :
<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>
Obtenez la chaîne de connexion à partir des variables d’environnement et ajoutez le nom du plug-in pour vous connecter à la base de données :
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);
Pour plus d’informations, consultez les ressources suivantes :
Installez des dépendances.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenez un jeton d’accès à l’aide de la bibliothèque azure-identity
et utilisez le jeton comme mot de passe. Obtenez des informations de connexion à partir de la variable d’environnement ajoutée par le connecteur de services. 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.
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)
Installez des dépendances.
pip install azure-identity
Obtenez un jeton d’accès à l’aide de la bibliothèque azure-identity
en utilisant les variables d’environnement ajoutées par le connecteur de services. 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.
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')
Dans le fichier de paramètres, obtenez les informations de base de données Azure PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Utilisez accessToken
obtenu à l’étape précédente pour accéder à la base de données.
# 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'},
}
}
Installez des dépendances.
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"
Dans le code, obtenez le jeton d’accès à l’aide de azidentity
, puis utilisez-le comme mot de passe pour vous connecter à Azure PostgreSQL, ainsi qu’avec les informations de connexion fournies par le connecteur de services. 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.
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()
Installez des dépendances.
npm install --save @azure/identity
npm install --save pg
Dans le code, obtenez le jeton d’accès à l’aide de @azure/identity
et des informations de connexion PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Combinez-les pour établir la connexion. 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.
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();
})();
Pour PHP, il n’existe pas de plug-in ou de bibliothèque pour les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service et l’utiliser comme mot de passe pour vous connecter à la base de données. Le jeton d’accès peut être obtenu à l’aide de l’API REST Azure.
Dans le code, obtenez le jeton d’accès à l’aide de l’API REST avec votre bibliothèque préférée.
Concernant l’identité affectée par l’utilisateur et l’identité affectée par le système, App Service et Container Apps fournissent un point de terminaison REST accessible en interne afin de récupérer des jetons pour les identités managées en définissant deux variables d’environnement : IDENTITY_ENDPOINT
et IDENTITY_HEADER
. Pour plus d’informations, consultez la référence du point de terminaison REST.
Obtenez le jeton d’accès en effectuant une requête HTTP GET au point de terminaison d’identité et utilisez https://ossrdbms-aad.database.windows.net
comme resource
dans la requête. Pour l’identité affectée par l’utilisateur, incluez également l’ID client des variables d’environnement ajoutées par le connecteur de services dans la requête.
Pour le principal de service, reportez-vous à la demande de jeton d’accès de service à service Azure AD pour afficher les détails de l’acquisition du jeton d’accès. Effectuez la requête POST sur l’étendue de https://ossrdbms-aad.database.windows.net/.default
avec l’ID locataire, l’ID client et la clé secrète client du principal de service à partir des variables d’environnement ajoutées par le connecteur de services.
Combinez le jeton d’accès et la chaîne de connexion PostgreSQL à partir de variables d’environnement ajoutées par le service Service Connector pour établir la connexion.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Pour Ruby, il n’existe pas de plug-in ou de bibliothèque pour les connexions sans mot de passe. Vous pouvez obtenir un jeton d’accès pour l’identité managée ou le principal de service et l’utiliser comme mot de passe pour vous connecter à la base de données. Le jeton d’accès peut être obtenu à l’aide de l’API REST Azure.
Installez des dépendances.
gem install pg
Dans le code, obtenez le jeton d’accès à l’aide de l’API REST et des informations de connexion PostgreSQL à partir de variables d’environnement ajoutées par le connecteur de services. Combinez-les pour établir la connexion. 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.
App Service et container Apps fournissent un point de terminaison REST accessible en interne afin de récupérer des jetons pour les identités managées. Pour plus d’informations, consultez la référence du point de terminaison REST.
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,
)
Reportez-vous à la demande de jeton d’accès de service à service Azure AD pour voir plus d’informations sur l’acquisition du jeton d’accès pour le principal de service.
Pour les autres langages, utilisez les propriétés de connexion définis par le connecteur de services dans les variables d’environnement pour connecter la base de données. Pour plus d’informations sur les variables d’environnement, consultez l’article Intégrer Azure Database pour PostgreSQL avec Service Connector.
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.