In diesem Artikel werden unterstützte Authentifizierungsmethoden, Clients und Beispielcode behandelt, mit dem Sie Ihre Apps mithilfe von Service Connector mit Azure Database for PostgreSQL verbinden können. In diesem Artikel finden Sie auch standardumgebungsvariable Namen, Werte und Konfigurationen, die beim Erstellen von Dienstverbindungen abgerufen werden.
Unterstützte Computedienste
Mit dem Dienstconnector können Sie die folgenden Computedienste mit Azure Database for PostgreSQL verbinden:
- Azure App Service
- Azure Container Apps – ein Dienst für containerbasierte Anwendungen
- Azure-Funktionen
- Azure Kubernetes Service (AKS)
- Azure Spring Apps
Unterstützte Authentifizierungstypen und Clienttypen
Die folgende Tabelle zeigt, welche Kombinationen von Authentifizierungsmethoden und Clients für die Verbindung von Computediensten mit Azure-Datenbank für PostgreSQL mithilfe von Service Connector unterstützt werden. Ein „Ja“ gibt an, dass die Kombination unterstützt wird, während ein „Nein“ angibt, dass sie nicht unterstützt wird.
Clienttyp |
Systemseitig zugewiesene verwaltete Identität |
Benutzerseitig zugewiesene verwaltete Identität |
Geheimnis/Verbindungszeichenfolge |
Dienstprinzipal |
.NETTO |
Ja |
Ja |
Ja |
Ja |
Go (pg) |
Ja |
Ja |
Ja |
Ja |
Java (ENVIRONMENT) |
Ja |
Ja |
Ja |
Ja |
Java (Spring Boot) |
Ja |
Ja |
Ja |
Ja |
Node.js (pg) |
Ja |
Ja |
Ja |
Ja |
PHP (nativ) |
Ja |
Ja |
Ja |
Ja |
Python (psycopg2) |
Ja |
Ja |
Ja |
Ja |
Python-Django |
Ja |
Ja |
Ja |
Ja |
Ruby (ruby-pg) |
Ja |
Ja |
Ja |
Ja |
Keine |
Ja |
Ja |
Ja |
Ja |
Hinweis
Systemseitig zugewiesene verwaltete Identität, benutzerseitig zugewiesene verwaltete Identität und Dienstprinzipal werden nur in der Azure-Befehlszeilenschnittstelle unterstützt.
Namen von Standard-Umgebungsvariablen oder Anwendungseigenschaften und Beispielcode
Verweisen Sie auf die Verbindungsdetails und den Beispielcode in den folgenden Tabellen gemäß dem Authentifizierungstyp und dem Clienttyp Ihrer Verbindung. Weitere Informationen zu Benennungskonventionen finden Sie im Internen Artikel zu Service Connector .
Systemseitig zugewiesene verwaltete Identität
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für .NET |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL-Verbindungszeichenfolge |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Anwendungseigenschaften |
Beschreibung |
Beispielswert |
spring.datasource.azure.passwordless-enabled |
Aktivieren der kennwortlosen Authentifizierung |
true |
spring.datasource.url |
DATABASE URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Datenbankbenutzername |
username |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2-Verbindungszeichenfolge |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_NAME |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Datenbankbenutzername |
<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für Go |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_DATABASE |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_PORT |
Portnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-Option |
true |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Native PostgreSQL-Verbindungszeichenfolge für PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für Ruby |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_DATABASE |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_PORT |
Portnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-Option |
true |
Beispielcode
Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe einer systemseitig zugewiesenen verwalteten Identität herzustellen.
Für .NET gibt es kein Plug-In und keine Bibliothek, die kennwortlose Verbindungen unterstützen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal mithilfe einer Clientbibliothek wie Azure.Identity abrufen. Anschließend können Sie das Zugriffstoken als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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();
}
Fügen Sie die folgenden Abhängigkeiten in der Dateipom.xml hinzu:
<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>
Rufen Sie die Verbindungszeichenfolge aus Umgebungsvariablen ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
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);
Weitere Informationen finden Sie in den folgenden Ressourcen:
Installieren Sie Abhängigkeiten.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Rufen Sie einen Zugriffstoken mithilfe der azure-identity
-Bibliothek ab, und verwenden Sie das Token als Kennwort. Rufen Sie Verbindungsinformationen aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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)
Installieren Sie Abhängigkeiten.
pip install azure-identity
Rufen Sie ein Zugriffstoken mithilfe der azure-identity
-Bibliothek mithilfe der Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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')
Rufen Sie in der Einstellungsdatei die Informationen zur Azure PostgreSQL-Datenbank aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Verwenden Sie das im vorherigen Schritt abgerufene Zugriffstoken (accessToken
), um auf die Datenbank zuzugreifen.
# 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'},
}
}
Installieren Sie Abhängigkeiten.
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"
Rufen Sie im Code ein Zugriffstoken mittels azidentity
ab, und verwenden Sie es dann als Kennwort zusammen mit den vom Dienstconnector bereitgestellten Verbindungsinformationen, um eine Verbindung mit Azure PostgreSQL herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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()
Installieren Sie Abhängigkeiten.
npm install --save @azure/identity
npm install --save pg
Rufen Sie im Code das Zugriffstoken mittels @azure/identity
ab und die PostgreSQL-Verbindungsinformationen aus den vom Dienstconnector hinzugefügten Umgebungsvariablen. Kombinieren Sie sie, um die Verbindung herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Für PHP gibt es kein Plug-In und keine Bibliothek für kennwortlose Verbindungen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal abrufen und es als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Das Zugriffstoken kann mithilfe der Azure REST-API abgerufen werden.
Rufen Sie im Code das Zugriffstoken mittels der REST-API mit Ihrer bevorzugten Bibliothek ab.
Für benutzerseitig und systemseitig zugewiesene Identitäten dienen App Service und Container Apps als intern zugängliche REST-Endpunkte, um Token für verwaltete Identitäten abzurufen, indem zwei Umgebungsvariablen definiert werden: IDENTITY_ENDPOINT
und IDENTITY_HEADER
. Weitere Informationen finden Sie unter REST-Endpunktreferenz.
Rufen Sie das Zugriffstoken ab, indem Sie eine HTTP GET-Anforderung an den Identitätsendpunkt senden und https://ossrdbms-aad.database.windows.net
als resource
in der Abfrage verwenden. Fügen Sie für die benutzerseitig zugewiesene Identität auch die Client-ID aus den Umgebungsvariablen hinzu, die vom Dienstconnector zur Abfrage hinzugefügt wurden.
Für den Dienstprinzipal finden Sie Einzelheiten zum Abrufen von Zugriffstoken unter Dienst-zu-Dienst-Zugriffstokenanforderung in Azure AD. Geben Sie für die POST-Anforderung den Bereich https://ossrdbms-aad.database.windows.net/.default
sowie die Mandanten-ID, die Client-ID und den geheimen Clientschlüssel des Dienstprinzipals aus den vom Dienstconnector hinzugefügten Umgebungsvariablen an.
Kombinieren Sie das Zugriffstoken und die PostgreSQL-Verbindungszeichenfolge aus Umgebungsvariablen, die vom Service Connector-Dienst hinzugefügt wurden, um die Verbindung herzustellen.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Für Ruby gibt es kein Plug-In und keine Bibliothek für kennwortlose Verbindungen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal abrufen und es als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Das Zugriffstoken kann mithilfe der Azure REST-API abgerufen werden.
Installieren Sie Abhängigkeiten.
gem install pg
Rufen Sie im Code das Zugriffstoken über die REST-API und die PostgreSQL-Verbindungsinformationen aus den vom Dienstconnector hinzugefügten Verbindungsinformationen ab. Kombinieren Sie sie, um die Verbindung herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
App Service und Container Apps dienen als intern zugängliche REST-Endpunkte zum Abrufen von Token für verwaltete Identitäten. Weitere Informationen finden Sie unter REST-Endpunktreferenz.
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,
)
Einzelheiten zum Abrufen von Zugriffstoken für den Dienstprinzipal finden Sie unter Dienst-zu-Dienst-Zugriffstokenanforderung in Azure AD.
Wenn Sie vor der Verwendung des Dienstconnectors Tabellen und Sequenzen auf dem flexiblen PostgreSQL-Server erstellt haben, müssen Sie als Nächstes als der Besitzer eine Verbindung herstellen und dem vom Dienstconnector erstellten <aad-username>
die Berechtigung erteilen. Der Benutzername aus der Verbindungszeichenfolge oder der vom Dienstconnector festgelegten Konfiguration sollte aad_<connection name>
ähneln. Wenn Sie das Azure-Portal verwenden, wählen Sie die Schaltfläche „erweitern“ neben der Service Type
-Spalte aus, und rufen Sie den Wert ab. Wenn Sie die Azure CLI verwenden, überprüfen Sie configurations
in der CLI-Befehlsausgabe.
Führen Sie dann die Abfrage aus, um die Berechtigung zu erteilen.
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>\";"
Der <owner-username>
und das <owner-password>
sind der Besitzer einer vorhandenen Tabelle, der anderen Personen Berechtigungen erteilen kann.
<aad-username>
ist der bzw. die Benutzer*in, der bzw. die vom Dienstconnector erstellt wurde. Ersetzen Sie sie durch den tatsächlichen Wert.
Überprüfen Sie das Ergebnis mit dem folgenden Befehl:
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
Benutzerseitig zugewiesene verwaltete Identität
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für .NET |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL-Verbindungszeichenfolge |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Anwendungseigenschaften |
Beschreibung |
Beispielswert |
spring.datasource.azure.passwordless-enabled |
Aktivieren der kennwortlosen Authentifizierung |
true |
spring.cloud.azure.credential.client-id |
Ihre Client-ID |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Aktivieren einer clientseitig verwalteten Identität |
true |
spring.datasource.url |
DATABASE URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Datenbankbenutzername |
username |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2-Verbindungszeichenfolge |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_NAME |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<<identity-client-ID>> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für Go |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_DATABASE |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_PORT |
Portnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-Option |
true |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Native PostgreSQL-Verbindungszeichenfolge für PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für Ruby |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_DATABASE |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_PORT |
Portnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-Option |
true |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
Beispielcode
Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe einer benutzerseitig zugewiesenen verwalteten Identität herzustellen.
Für .NET gibt es kein Plug-In und keine Bibliothek, die kennwortlose Verbindungen unterstützen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal mithilfe einer Clientbibliothek wie Azure.Identity abrufen. Anschließend können Sie das Zugriffstoken als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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();
}
Fügen Sie die folgenden Abhängigkeiten in der Dateipom.xml hinzu:
<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>
Rufen Sie die Verbindungszeichenfolge aus Umgebungsvariablen ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
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);
Weitere Informationen finden Sie in den folgenden Ressourcen:
Installieren Sie Abhängigkeiten.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Rufen Sie einen Zugriffstoken mithilfe der azure-identity
-Bibliothek ab, und verwenden Sie das Token als Kennwort. Rufen Sie Verbindungsinformationen aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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)
Installieren Sie Abhängigkeiten.
pip install azure-identity
Rufen Sie ein Zugriffstoken mithilfe der azure-identity
-Bibliothek mithilfe der Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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')
Rufen Sie in der Einstellungsdatei die Informationen zur Azure PostgreSQL-Datenbank aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Verwenden Sie das im vorherigen Schritt abgerufene Zugriffstoken (accessToken
), um auf die Datenbank zuzugreifen.
# 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'},
}
}
Installieren Sie Abhängigkeiten.
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"
Rufen Sie im Code ein Zugriffstoken mittels azidentity
ab, und verwenden Sie es dann als Kennwort zusammen mit den vom Dienstconnector bereitgestellten Verbindungsinformationen, um eine Verbindung mit Azure PostgreSQL herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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()
Installieren Sie Abhängigkeiten.
npm install --save @azure/identity
npm install --save pg
Rufen Sie im Code das Zugriffstoken mittels @azure/identity
ab und die PostgreSQL-Verbindungsinformationen aus den vom Dienstconnector hinzugefügten Umgebungsvariablen. Kombinieren Sie sie, um die Verbindung herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Für PHP gibt es kein Plug-In und keine Bibliothek für kennwortlose Verbindungen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal abrufen und es als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Das Zugriffstoken kann mithilfe der Azure REST-API abgerufen werden.
Rufen Sie im Code das Zugriffstoken mittels der REST-API mit Ihrer bevorzugten Bibliothek ab.
Für benutzerseitig und systemseitig zugewiesene Identitäten dienen App Service und Container Apps als intern zugängliche REST-Endpunkte, um Token für verwaltete Identitäten abzurufen, indem zwei Umgebungsvariablen definiert werden: IDENTITY_ENDPOINT
und IDENTITY_HEADER
. Weitere Informationen finden Sie unter REST-Endpunktreferenz.
Rufen Sie das Zugriffstoken ab, indem Sie eine HTTP GET-Anforderung an den Identitätsendpunkt senden und https://ossrdbms-aad.database.windows.net
als resource
in der Abfrage verwenden. Fügen Sie für die benutzerseitig zugewiesene Identität auch die Client-ID aus den Umgebungsvariablen hinzu, die vom Dienstconnector zur Abfrage hinzugefügt wurden.
Für den Dienstprinzipal finden Sie Einzelheiten zum Abrufen von Zugriffstoken unter Dienst-zu-Dienst-Zugriffstokenanforderung in Azure AD. Geben Sie für die POST-Anforderung den Bereich https://ossrdbms-aad.database.windows.net/.default
sowie die Mandanten-ID, die Client-ID und den geheimen Clientschlüssel des Dienstprinzipals aus den vom Dienstconnector hinzugefügten Umgebungsvariablen an.
Kombinieren Sie das Zugriffstoken und die PostgreSQL-Verbindungszeichenfolge aus Umgebungsvariablen, die vom Service Connector-Dienst hinzugefügt wurden, um die Verbindung herzustellen.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Für Ruby gibt es kein Plug-In und keine Bibliothek für kennwortlose Verbindungen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal abrufen und es als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Das Zugriffstoken kann mithilfe der Azure REST-API abgerufen werden.
Installieren Sie Abhängigkeiten.
gem install pg
Rufen Sie im Code das Zugriffstoken über die REST-API und die PostgreSQL-Verbindungsinformationen aus den vom Dienstconnector hinzugefügten Verbindungsinformationen ab. Kombinieren Sie sie, um die Verbindung herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
App Service und Container Apps dienen als intern zugängliche REST-Endpunkte zum Abrufen von Token für verwaltete Identitäten. Weitere Informationen finden Sie unter REST-Endpunktreferenz.
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,
)
Einzelheiten zum Abrufen von Zugriffstoken für den Dienstprinzipal finden Sie unter Dienst-zu-Dienst-Zugriffstokenanforderung in Azure AD.
Wenn Sie vor der Verwendung des Dienstconnectors Tabellen und Sequenzen auf dem flexiblen PostgreSQL-Server erstellt haben, müssen Sie als Nächstes als der Besitzer eine Verbindung herstellen und dem vom Dienstconnector erstellten <aad-username>
die Berechtigung erteilen. Der Benutzername aus der Verbindungszeichenfolge oder der vom Dienstconnector festgelegten Konfiguration sollte aad_<connection name>
ähneln. Wenn Sie das Azure-Portal verwenden, wählen Sie die Schaltfläche „erweitern“ neben der Service Type
-Spalte aus, und rufen Sie den Wert ab. Wenn Sie die Azure CLI verwenden, überprüfen Sie configurations
in der CLI-Befehlsausgabe.
Führen Sie dann die Abfrage aus, um die Berechtigung zu erteilen.
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>\";"
Der <owner-username>
und das <owner-password>
sind der Besitzer einer vorhandenen Tabelle, der anderen Personen Berechtigungen erteilen kann.
<aad-username>
ist der bzw. die Benutzer*in, der bzw. die vom Dienstconnector erstellt wurde. Ersetzen Sie sie durch den tatsächlichen Wert.
Überprüfen Sie das Ergebnis mit dem folgenden Befehl:
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
Verbindungsstring
Warnung
Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden. Der in diesem Verfahren beschriebene Authentifizierungsflow erfordert ein sehr hohes Maß an Vertrauen in die Anwendung und birgt Risiken, die bei anderen Flows nicht vorhanden sind. Sie sollten diesen Flow nur verwenden, wenn andere sicherere Flows (z. B. verwaltete Identitäten) nicht anwendbar sind.
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für .NET |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL-Verbindungszeichenfolge |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
Anwendungseigenschaften |
Beschreibung |
Beispielswert |
spring.datasource.url |
DATABASE URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Datenbankbenutzername |
<username> |
spring.datasource.password |
Datenbankkennwort |
<password> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2-Verbindungszeichenfolge |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_NAME |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Datenbankkennwort |
<database-password> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für Go |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Datenbankkennwort |
<password> |
AZURE_POSTGRESQL_DATABASE |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_PORT |
Portnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-Option |
true |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Native PostgreSQL-Verbindungszeichenfolge für PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für Ruby |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_DATABASE |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_PORT |
Portnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-Option |
true |
AZURE_POSTGRESQL_PASSWORD |
Datenbankkennwort |
<password> |
Beispielcode
Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe einer Verbindungszeichenfolge herzustellen.
- Installieren von Abhängigkeiten nach dem Npgsql-Leitfaden
- Rufen Sie im Code die PostgreSQL-Verbindungszeichenfolge aus Umgebungsvariablen ab, die von Service Connector hinzugefügt wurden.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Installieren Sie Abhängigkeiten nach den pgJDBC-Anleitungen.
- Rufen Sie im Code die PostgreSQL-Verbindungszeichenfolge aus Umgebungsvariablen ab, die von Service Connector hinzugefügt wurden.
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());
}
- Installieren Sie das Spring Cloud Azure-JDBC-Startermodul für PostgreSQL, indem Sie in Ihrer Datei
pom.xml
die folgenden Abhängigkeiten hinzufügen. Hier finden Sie die Version von 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>
- Einrichten einer Spring Boot-Anwendung, weitere Details in diesem Abschnitt.
- Installieren Sie Abhängigkeiten gemäß der Psycopg2-Anleitung.
- Rufen Sie im Code die Informationen zur PostgreSQL-Verbindung von Umgebungsvariablen ab, die von Service Connector hinzugefügt wurden.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Installieren Sie Abhängigkeiten nach den Anleitungen zu Django und psycopg2.
pip install django
pip install psycopg2
- In der Konfigurationsdatei rufen Sie die Informationen der PostgreSQL-Datenbank von den Umgebungsvariablen ab, die vom Service Connector hinzugefügt wurden.
# 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'},
}
}
- Installieren Sie Abhängigkeiten.
go get github.com/lib/pq
- Rufen Sie im Code die PostgreSQL-Verbindungszeichenfolge aus Umgebungsvariablen ab, die von Service Connector hinzugefügt wurden.
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()
- Installieren Sie Abhängigkeiten.
npm install pg dotenv
- Rufen Sie im Code die Informationen zur PostgreSQL-Verbindung von Umgebungsvariablen ab, die von Service Connector hinzugefügt wurden.
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();
})();
- Rufen Sie im Code die Informationen zur PostgreSQL-Verbindung von Umgebungsvariablen ab, die von Service Connector hinzugefügt wurden.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Installieren Sie Abhängigkeiten.
gem install pg
- Rufen Sie im Code die Informationen zur PostgreSQL-Verbindung von Umgebungsvariablen ab, die von Service Connector hinzugefügt wurden.
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
Dienstprinzipal
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für .NET |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL-Verbindungszeichenfolge |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Anwendungseigenschaften |
Beschreibung |
Beispielswert |
spring.datasource.azure.passwordless-enabled |
Aktivieren der kennwortlosen Authentifizierung |
true |
spring.cloud.azure.credential.client-id |
Ihre Client-ID |
<client-ID> |
spring.cloud.azure.credential.client-secret |
Ihr geheimer Clientschlüssel |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
Ihre Mandanten-ID |
<tenant-ID> |
spring.datasource.url |
DATABASE URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Datenbankbenutzername |
username |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2-Verbindungszeichenfolge |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_NAME |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für Go |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_DATABASE |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_PORT |
Portnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-Option |
true |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Native PostgreSQL-Verbindungszeichenfolge für PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PostgreSQL-Verbindungszeichenfolge für Ruby |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Standardname der Umgebungsvariablen |
Beschreibung |
Beispielswert |
AZURE_POSTGRESQL_HOST |
URL des Datenbankhosts |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Datenbankbenutzername |
<username> |
AZURE_POSTGRESQL_DATABASE |
Datenbankname |
<database-name> |
AZURE_POSTGRESQL_PORT |
Portnummer |
5432 |
AZURE_POSTGRESQL_SSL |
SSL-Option |
true |
AZURE_POSTGRESQL_CLIENTID |
Ihre Client-ID |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Ihr geheimer Clientschlüssel |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Ihre Mandanten-ID |
<tenant-ID> |
Beispielcode
Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe eines Dienstprinzipals herzustellen.
Für .NET gibt es kein Plug-In und keine Bibliothek, die kennwortlose Verbindungen unterstützen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal mithilfe einer Clientbibliothek wie Azure.Identity abrufen. Anschließend können Sie das Zugriffstoken als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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();
}
Fügen Sie die folgenden Abhängigkeiten in der Dateipom.xml hinzu:
<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>
Rufen Sie die Verbindungszeichenfolge aus Umgebungsvariablen ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
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);
Weitere Informationen finden Sie in den folgenden Ressourcen:
Installieren Sie Abhängigkeiten.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Rufen Sie einen Zugriffstoken mithilfe der azure-identity
-Bibliothek ab, und verwenden Sie das Token als Kennwort. Rufen Sie Verbindungsinformationen aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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)
Installieren Sie Abhängigkeiten.
pip install azure-identity
Rufen Sie ein Zugriffstoken mithilfe der azure-identity
-Bibliothek mithilfe der Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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')
Rufen Sie in der Einstellungsdatei die Informationen zur Azure PostgreSQL-Datenbank aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Verwenden Sie das im vorherigen Schritt abgerufene Zugriffstoken (accessToken
), um auf die Datenbank zuzugreifen.
# 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'},
}
}
Installieren Sie Abhängigkeiten.
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"
Rufen Sie im Code ein Zugriffstoken mittels azidentity
ab, und verwenden Sie es dann als Kennwort zusammen mit den vom Dienstconnector bereitgestellten Verbindungsinformationen, um eine Verbindung mit Azure PostgreSQL herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
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()
Installieren Sie Abhängigkeiten.
npm install --save @azure/identity
npm install --save pg
Rufen Sie im Code das Zugriffstoken mittels @azure/identity
ab und die PostgreSQL-Verbindungsinformationen aus den vom Dienstconnector hinzugefügten Umgebungsvariablen. Kombinieren Sie sie, um die Verbindung herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Für PHP gibt es kein Plug-In und keine Bibliothek für kennwortlose Verbindungen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal abrufen und es als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Das Zugriffstoken kann mithilfe der Azure REST-API abgerufen werden.
Rufen Sie im Code das Zugriffstoken mittels der REST-API mit Ihrer bevorzugten Bibliothek ab.
Für benutzerseitig und systemseitig zugewiesene Identitäten dienen App Service und Container Apps als intern zugängliche REST-Endpunkte, um Token für verwaltete Identitäten abzurufen, indem zwei Umgebungsvariablen definiert werden: IDENTITY_ENDPOINT
und IDENTITY_HEADER
. Weitere Informationen finden Sie unter REST-Endpunktreferenz.
Rufen Sie das Zugriffstoken ab, indem Sie eine HTTP GET-Anforderung an den Identitätsendpunkt senden und https://ossrdbms-aad.database.windows.net
als resource
in der Abfrage verwenden. Fügen Sie für die benutzerseitig zugewiesene Identität auch die Client-ID aus den Umgebungsvariablen hinzu, die vom Dienstconnector zur Abfrage hinzugefügt wurden.
Für den Dienstprinzipal finden Sie Einzelheiten zum Abrufen von Zugriffstoken unter Dienst-zu-Dienst-Zugriffstokenanforderung in Azure AD. Geben Sie für die POST-Anforderung den Bereich https://ossrdbms-aad.database.windows.net/.default
sowie die Mandanten-ID, die Client-ID und den geheimen Clientschlüssel des Dienstprinzipals aus den vom Dienstconnector hinzugefügten Umgebungsvariablen an.
Kombinieren Sie das Zugriffstoken und die PostgreSQL-Verbindungszeichenfolge aus Umgebungsvariablen, die vom Service Connector-Dienst hinzugefügt wurden, um die Verbindung herzustellen.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Für Ruby gibt es kein Plug-In und keine Bibliothek für kennwortlose Verbindungen. Sie können ein Zugriffstoken für die verwaltete Identität oder den Dienstprinzipal abrufen und es als Kennwort verwenden, um eine Verbindung mit der Datenbank herzustellen. Das Zugriffstoken kann mithilfe der Azure REST-API abgerufen werden.
Installieren Sie Abhängigkeiten.
gem install pg
Rufen Sie im Code das Zugriffstoken über die REST-API und die PostgreSQL-Verbindungsinformationen aus den vom Dienstconnector hinzugefügten Verbindungsinformationen ab. Kombinieren Sie sie, um die Verbindung herzustellen. Wenn Sie den folgenden Code verwenden, heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
App Service und Container Apps dienen als intern zugängliche REST-Endpunkte zum Abrufen von Token für verwaltete Identitäten. Weitere Informationen finden Sie unter REST-Endpunktreferenz.
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,
)
Einzelheiten zum Abrufen von Zugriffstoken für den Dienstprinzipal finden Sie unter Dienst-zu-Dienst-Zugriffstokenanforderung in Azure AD.
Wenn Sie vor der Verwendung des Dienstconnectors Tabellen und Sequenzen auf dem flexiblen PostgreSQL-Server erstellt haben, müssen Sie als Nächstes als der Besitzer eine Verbindung herstellen und dem vom Dienstconnector erstellten <aad-username>
die Berechtigung erteilen. Der Benutzername aus der Verbindungszeichenfolge oder der vom Dienstconnector festgelegten Konfiguration sollte aad_<connection name>
ähneln. Wenn Sie das Azure-Portal verwenden, wählen Sie die Schaltfläche „erweitern“ neben der Service Type
-Spalte aus, und rufen Sie den Wert ab. Wenn Sie die Azure CLI verwenden, überprüfen Sie configurations
in der CLI-Befehlsausgabe.
Führen Sie dann die Abfrage aus, um die Berechtigung zu erteilen.
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>\";"
Der <owner-username>
und das <owner-password>
sind der Besitzer einer vorhandenen Tabelle, der anderen Personen Berechtigungen erteilen kann.
<aad-username>
ist der bzw. die Benutzer*in, der bzw. die vom Dienstconnector erstellt wurde. Ersetzen Sie sie durch den tatsächlichen Wert.
Überprüfen Sie das Ergebnis mit dem folgenden Befehl:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Nächste Schritte
Befolgen Sie die unten aufgeführten Tutorials, um mehr über Service Connector zu erfahren.