In dit artikel worden ondersteunde verificatiemethoden, clients en voorbeeldcode beschreven die u kunt gebruiken om uw apps te verbinden met Azure Database for PostgreSQL met behulp van Service Connector. In dit artikel vindt u ook de standaardnaam, waarden en configuratie van omgevingsvariabelen die zijn verkregen bij het maken van serviceverbindingen.
Ondersteunde rekenservices
ServiceConnector kan worden gebruikt om de volgende rekenservices te verbinden met Azure Database for PostgreSQL:
- Azure App Service
- Azure Container Apps - een dienst van Microsoft waarmee je containers kunt uitvoeren en beheren in de cloud.
- Azure Functions (serverloze computerdiensten van Azure)
- Azure Kubernetes Service (AKS)
- Azure Spring Apps
Ondersteunde verificatietypen en clienttypen
In de onderstaande tabel ziet u welke combinaties van verificatiemethoden en -clients worden ondersteund voor het verbinden van rekenservices met Azure Database for PostgreSQL met behulp van Service Connector. Een 'Ja' geeft aan dat de combinatie wordt ondersteund, terwijl een 'Nee' aangeeft dat deze niet wordt ondersteund.
| Cliënttype |
Door het systeem toegewezen beheerde identiteit |
Door de gebruiker toegewezen beheerde identiteit |
Geheim/verbindingsreeks |
Service-principal |
| .NET |
Ja |
Ja |
Ja |
Ja |
| Ga (pg) |
Ja |
Ja |
Ja |
Ja |
| Java (JDBC) |
Ja |
Ja |
Ja |
Ja |
| Java - Spring Boot (JDBC) |
Ja |
Ja |
Ja |
Ja |
| Node.js (pg) |
Ja |
Ja |
Ja |
Ja |
| PHP (systeemeigen) |
Ja |
Ja |
Ja |
Ja |
| Python (psycopg2) |
Ja |
Ja |
Ja |
Ja |
| Python-Django |
Ja |
Ja |
Ja |
Ja |
| Ruby (ruby-pg) |
Ja |
Ja |
Ja |
Ja |
| Geen |
Ja |
Ja |
Ja |
Ja |
Notitie
Door het systeem toegewezen beheerde identiteit, door de gebruiker toegewezen beheerde identiteit en service-principal worden alleen ondersteund in Azure CLI.
Namen van standaardomgevingsvariabelen of toepassingseigenschappen en voorbeeldcode
Verwijs naar de verbindingsgegevens en voorbeeldcode in de volgende tabellen, afhankelijk van het verificatietype en het clienttype van uw verbinding. Raadpleeg het artikel Service Connector-interne werking voor meer informatie over naamconventies.
Door het systeem toegewezen beheerde identiteit
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL-verbindingsreeks |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL-verbindingsreeks |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Toepassingseigenschappen |
Beschrijving |
Voorbeeldwaarde |
spring.datasource.azure.passwordless-enabled |
Verificatie zonder wachtwoord inschakelen |
true |
spring.datasource.url |
URL van de database |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Gebruikersnaam van database |
username |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 verbindingsreeks |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_NAME |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Gebruikersnaam van database |
<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL-verbindingsreeks |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_PORT |
Poortnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-optie |
true |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Systeemeigen PHP PostgreSQL-verbindingsreeks |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL-verbindingsreeks |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_PORT |
Poortnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-optie |
true |
Voorbeeldcode
Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een door het systeem toegewezen beheerde identiteit.
Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Voeg de volgende afhankelijkheden toe aan uw pom.xml-bestand :
<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>
Haal de verbindingsreeks op uit omgevingsvariabelen en voeg de naam van de invoegtoepassing toe om verbinding te maken met de database:
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);
Voor meer informatie raadpleegt u de volgende bronnen:
Installeer afhankelijkheden.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Verkrijg toegangstoken met behulp van de azure-identity bibliotheek en gebruik de token als wachtwoord. Haal verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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)
Installeer afhankelijkheden.
pip install azure-identity
Toegangstoken ophalen met behulp van azure-identity bibliotheek met behulp van omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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')
Haal bij het instellen van het bestand azure PostgreSQL-databasegegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Gebruik accessToken verkregen in de vorige stap om toegang te krijgen tot de database.
# 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'},
}
}
Installeer afhankelijkheden.
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"
Haal in de code het toegangstoken op met behulp van azidentity, en gebruik het vervolgens als wachtwoord om verbinding te maken met Azure PostgreSQL, samen met de verbindingsinformatie die door Service Connector wordt verstrekt. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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()
Installeer afhankelijkheden.
npm install --save @azure/identity
npm install --save pg
Haal in code het toegangstoken op met behulp van @azure/identity en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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();
})();
Voor PHP is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Haal in code het toegangstoken op met behulp van REST API met uw favoriete bibliotheek.
Voor door de gebruiker toegewezen identiteit en door het systeem toegewezen identiteit biedt App Service en Container Apps een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten door twee omgevingsvariabelen te definiëren: IDENTITY_ENDPOINT en IDENTITY_HEADER. Zie rest-eindpuntreferentie voor meer informatie.
Haal het toegangstoken op door een HTTP GET-aanvraag naar het identiteitseindpunt te maken en te gebruiken https://ossrdbms-aad.database.windows.net zoals resource in de query. Voor door de gebruiker toegewezen identiteit moet u ook de client-id van de omgevingsvariabelen opnemen die door Service Connector in de query zijn toegevoegd.
Raadpleeg de Azure AD-service-to-service-toegangstokenaanvraag voor informatie over het verkrijgen van toegangstokens voor service-principals. Voer de POST-aanvraag uit binnen de scope van https://ossrdbms-aad.database.windows.net/.default en met de Tenant ID, Client ID en Client Secret van de service-principal uit de omgevingsvariabelen die zijn toegevoegd door de Service Connector.
Combineer het toegangstoken en de PostgreSQL-verbindingsreeks uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service om de verbinding tot stand te brengen.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Voor Ruby is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Installeer afhankelijkheden.
gem install pg
Haal in code het toegangstoken op met behulp van REST API en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
App Service en container Apps bieden een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten. Zie rest-eindpuntreferentie voor meer informatie.
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,
)
Raadpleeg de azure AD-service-to-service-toegangstokenaanvraag voor meer informatie over het verkrijgen van toegangstokens voor de service-principal.
Als u vervolgens tabellen en sequenties hebt aangemaakt in PostgreSQL Flexibele Server voordat u Service Connector gebruikt, moet u als eigenaar verbinding maken en toestemming verlenen voor wat door Service Connector is aangemaakt. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door de Service Connector, moet er als volgt uitzien: aad_<connection name>. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert u de uitvoer van de CLI-opdracht in configurations.
Voer vervolgens de query uit om toestemming te verlenen
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen.
<aad-username> is de gebruiker die door Service Connector is aangemaakt. Vervang ze door de werkelijke waarde.
Valideer het resultaat met de opdracht:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Door de gebruiker toegewezen beheerde identiteit
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL-verbindingsreeks |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL-verbindingsreeks |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Toepassingseigenschappen |
Beschrijving |
Voorbeeldwaarde |
spring.datasource.azure.passwordless-enabled |
Verificatie zonder wachtwoord inschakelen |
true |
spring.cloud.azure.credential.client-id |
Uw cliënt-ID |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Client-beheerde identiteit inschakelen |
true |
spring.datasource.url |
URL van de database |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Gebruikersnaam van database |
username |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 verbindingsreeks |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_NAME |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<<identity-client-ID>> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL-verbindingsreeks |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_PORT |
Poortnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-optie |
true |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Systeemeigen PHP PostgreSQL-verbindingsreeks |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL-verbindingsreeks |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_PORT |
Poortnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-optie |
true |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
Voorbeeldcode
Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een door de gebruiker toegewezen beheerde identiteit.
Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Voeg de volgende afhankelijkheden toe aan uw pom.xml-bestand :
<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>
Haal de verbindingsreeks op uit omgevingsvariabelen en voeg de naam van de invoegtoepassing toe om verbinding te maken met de database:
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);
Voor meer informatie raadpleegt u de volgende bronnen:
Installeer afhankelijkheden.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Verkrijg toegangstoken met behulp van de azure-identity bibliotheek en gebruik de token als wachtwoord. Haal verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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)
Installeer afhankelijkheden.
pip install azure-identity
Toegangstoken ophalen met behulp van azure-identity bibliotheek met behulp van omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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')
Haal bij het instellen van het bestand azure PostgreSQL-databasegegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Gebruik accessToken verkregen in de vorige stap om toegang te krijgen tot de database.
# 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'},
}
}
Installeer afhankelijkheden.
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"
Haal in de code het toegangstoken op met behulp van azidentity, en gebruik het vervolgens als wachtwoord om verbinding te maken met Azure PostgreSQL, samen met de verbindingsinformatie die door Service Connector wordt verstrekt. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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()
Installeer afhankelijkheden.
npm install --save @azure/identity
npm install --save pg
Haal in code het toegangstoken op met behulp van @azure/identity en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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();
})();
Voor PHP is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Haal in code het toegangstoken op met behulp van REST API met uw favoriete bibliotheek.
Voor door de gebruiker toegewezen identiteit en door het systeem toegewezen identiteit biedt App Service en Container Apps een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten door twee omgevingsvariabelen te definiëren: IDENTITY_ENDPOINT en IDENTITY_HEADER. Zie rest-eindpuntreferentie voor meer informatie.
Haal het toegangstoken op door een HTTP GET-aanvraag naar het identiteitseindpunt te maken en te gebruiken https://ossrdbms-aad.database.windows.net zoals resource in de query. Voor door de gebruiker toegewezen identiteit moet u ook de client-id van de omgevingsvariabelen opnemen die door Service Connector in de query zijn toegevoegd.
Raadpleeg de Azure AD-service-to-service-toegangstokenaanvraag voor informatie over het verkrijgen van toegangstokens voor service-principals. Voer de POST-aanvraag uit binnen de scope van https://ossrdbms-aad.database.windows.net/.default en met de Tenant ID, Client ID en Client Secret van de service-principal uit de omgevingsvariabelen die zijn toegevoegd door de Service Connector.
Combineer het toegangstoken en de PostgreSQL-verbindingsreeks uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service om de verbinding tot stand te brengen.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Voor Ruby is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Installeer afhankelijkheden.
gem install pg
Haal in code het toegangstoken op met behulp van REST API en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
App Service en container Apps bieden een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten. Zie rest-eindpuntreferentie voor meer informatie.
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,
)
Raadpleeg de azure AD-service-to-service-toegangstokenaanvraag voor meer informatie over het verkrijgen van toegangstokens voor de service-principal.
Als u vervolgens tabellen en sequenties hebt aangemaakt in PostgreSQL Flexibele Server voordat u Service Connector gebruikt, moet u als eigenaar verbinding maken en toestemming verlenen voor wat door Service Connector is aangemaakt. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door de Service Connector, moet er als volgt uitzien: aad_<connection name>. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert u de uitvoer van de CLI-opdracht in configurations.
Voer vervolgens de query uit om toestemming te verlenen
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen.
<aad-username> is de gebruiker die door Service Connector is aangemaakt. Vervang ze door de werkelijke waarde.
Valideer het resultaat met de opdracht:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Verbindingstekst
Waarschuwing
Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. U moet deze stroom alleen gebruiken wanneer andere veiligere stromen, zoals beheerde identiteiten, niet haalbaar zijn.
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL-verbindingsreeks |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL-verbindingsreeks |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
| Toepassingseigenschappen |
Beschrijving |
Voorbeeldwaarde |
spring.datasource.url |
URL van de database |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Gebruikersnaam van database |
<username> |
spring.datasource.password |
Databasewachtwoord |
<password> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 verbindingsreeks |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_NAME |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Databasewachtwoord |
<database-password> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL-verbindingsreeks |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Databasewachtwoord |
<password> |
AZURE_POSTGRESQL_DATABASE |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_PORT |
Poortnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-optie |
true |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Systeemeigen PHP PostgreSQL-verbindingsreeks |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL-verbindingsreeks |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_PORT |
Poortnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-optie |
true |
AZURE_POSTGRESQL_PASSWORD |
Databasewachtwoord |
<password> |
Voorbeeldcode
Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een verbindingsreeks.
- Afhankelijkheden installeren volgens de Npgsql-richtlijnen
- Haal in code de PostgreSQL-verbindingsreeks op uit omgevingsvariabelen die zijn toegevoegd door Service Connector.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Installeer afhankelijkheden volgens de pgJDBC-richtlijnen.
- Haal in code de PostgreSQL-verbindingsreeks op uit omgevingsvariabelen die zijn toegevoegd door 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());
}
- Installeer de Module Spring Cloud Azure Starter JDBC PostgreSQL door de volgende afhankelijkheden toe te voegen aan uw
pom.xml bestand. Zoek hier de versie van Spring Cloud Azure.
<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>
- Stel een Spring Boot-toepassing in, meer informatie in deze sectie.
- Installeer afhankelijkheden volgens de psycopg2-richtlijnen.
- Haal in code de PostgreSQL-verbindingsgegevens op uit omgevingsvariabelen die zijn toegevoegd door Service Connector.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Installeer afhankelijkheden volgens de Django-richtlijnen en psycopg2-richtlijnen.
pip install django
pip install psycopg2
- Haal in het instellingsbestand de PostgreSQL-databasegegevens op uit omgevingsvariabelen die zijn toegevoegd door 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'},
}
}
- Installeer afhankelijkheden.
go get github.com/lib/pq
- Haal in code de PostgreSQL-verbindingsreeks op uit omgevingsvariabelen die zijn toegevoegd door 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()
- Installeer afhankelijkheden.
npm install pg dotenv
- Haal in code de PostgreSQL-verbindingsgegevens op uit omgevingsvariabelen die zijn toegevoegd door 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();
})();
- Haal in code de PostgreSQL-verbindingsgegevens op uit omgevingsvariabelen die zijn toegevoegd door Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Installeer afhankelijkheden.
gem install pg
- Haal in code de PostgreSQL-verbindingsgegevens op uit omgevingsvariabelen die zijn toegevoegd door 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
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw clientgeheim |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL-verbindingsreeks |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw clientgeheim |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL-verbindingsreeks |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Toepassingseigenschappen |
Beschrijving |
Voorbeeldwaarde |
spring.datasource.azure.passwordless-enabled |
Verificatie zonder wachtwoord inschakelen |
true |
spring.cloud.azure.credential.client-id |
Uw cliënt-ID |
<client-ID> |
spring.cloud.azure.credential.client-secret |
Uw clientgeheim |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
Uw tenant-ID |
<tenant-ID> |
spring.datasource.url |
URL van de database |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Gebruikersnaam van database |
username |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw clientgeheim |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 verbindingsreeks |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_NAME |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw cliënt GEHEIM |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw clientgeheim |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL-verbindingsreeks |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_PORT |
Poortnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-optie |
true |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw clientgeheim |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw clientgeheim |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Systeemeigen PHP PostgreSQL-verbindingsreeks |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw clientgeheim |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL-verbindingsreeks |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Naam van standaardomgevingsvariabele |
Beschrijving |
Voorbeeldwaarde |
AZURE_POSTGRESQL_HOST |
URL van de databasehost |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Gebruikersnaam van database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Databasenaam |
<database-name> |
AZURE_POSTGRESQL_PORT |
Poortnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-optie |
true |
AZURE_POSTGRESQL_CLIENTID |
Uw cliënt-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Uw clientgeheim |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Uw tenant-ID |
<tenant-ID> |
Voorbeeldcode
Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een service-principal.
Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Voeg de volgende afhankelijkheden toe aan uw pom.xml-bestand :
<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>
Haal de verbindingsreeks op uit omgevingsvariabelen en voeg de naam van de invoegtoepassing toe om verbinding te maken met de database:
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);
Voor meer informatie raadpleegt u de volgende bronnen:
Installeer afhankelijkheden.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Verkrijg toegangstoken met behulp van de azure-identity bibliotheek en gebruik de token als wachtwoord. Haal verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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)
Installeer afhankelijkheden.
pip install azure-identity
Toegangstoken ophalen met behulp van azure-identity bibliotheek met behulp van omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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')
Haal bij het instellen van het bestand azure PostgreSQL-databasegegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Gebruik accessToken verkregen in de vorige stap om toegang te krijgen tot de database.
# 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'},
}
}
Installeer afhankelijkheden.
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"
Haal in de code het toegangstoken op met behulp van azidentity, en gebruik het vervolgens als wachtwoord om verbinding te maken met Azure PostgreSQL, samen met de verbindingsinformatie die door Service Connector wordt verstrekt. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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()
Installeer afhankelijkheden.
npm install --save @azure/identity
npm install --save pg
Haal in code het toegangstoken op met behulp van @azure/identity en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
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();
})();
Voor PHP is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Haal in code het toegangstoken op met behulp van REST API met uw favoriete bibliotheek.
Voor door de gebruiker toegewezen identiteit en door het systeem toegewezen identiteit biedt App Service en Container Apps een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten door twee omgevingsvariabelen te definiëren: IDENTITY_ENDPOINT en IDENTITY_HEADER. Zie rest-eindpuntreferentie voor meer informatie.
Haal het toegangstoken op door een HTTP GET-aanvraag naar het identiteitseindpunt te maken en te gebruiken https://ossrdbms-aad.database.windows.net zoals resource in de query. Voor door de gebruiker toegewezen identiteit moet u ook de client-id van de omgevingsvariabelen opnemen die door Service Connector in de query zijn toegevoegd.
Raadpleeg de Azure AD-service-to-service-toegangstokenaanvraag voor informatie over het verkrijgen van toegangstokens voor service-principals. Voer de POST-aanvraag uit binnen de scope van https://ossrdbms-aad.database.windows.net/.default en met de Tenant ID, Client ID en Client Secret van de service-principal uit de omgevingsvariabelen die zijn toegevoegd door de Service Connector.
Combineer het toegangstoken en de PostgreSQL-verbindingsreeks uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service om de verbinding tot stand te brengen.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Voor Ruby is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Installeer afhankelijkheden.
gem install pg
Haal in code het toegangstoken op met behulp van REST API en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
App Service en container Apps bieden een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten. Zie rest-eindpuntreferentie voor meer informatie.
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,
)
Raadpleeg de azure AD-service-to-service-toegangstokenaanvraag voor meer informatie over het verkrijgen van toegangstokens voor de service-principal.
Als u vervolgens tabellen en sequenties hebt aangemaakt in PostgreSQL Flexibele Server voordat u Service Connector gebruikt, moet u als eigenaar verbinding maken en toestemming verlenen voor wat door Service Connector is aangemaakt. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door de Service Connector, moet er als volgt uitzien: aad_<connection name>. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert u de uitvoer van de CLI-opdracht in configurations.
Voer vervolgens de query uit om toestemming te verlenen
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen.
<aad-username> is de gebruiker die door Service Connector is aangemaakt. Vervang ze door de werkelijke waarde.
Valideer het resultaat met de opdracht:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Volgende stappen
Volg de onderstaande zelfstudies voor meer informatie over Service Connector.