Integrieren von Azure Database für PostgreSQL mit Service Connector
Artikel
Auf dieser Seite werden unterstützte Authentifizierungsmethoden und Clients sowie Beispielcode gezeigt, den Sie verwenden können, um Azure Database for PostgreSQL mit anderen Clouddiensten mithilfe des Dienstconnectors zu verbinden. Möglicherweise können Sie weiterhin eine Verbindung mit Azure Database für PostgreSQL in anderen Programmiersprachen herstellen, ohne den Service Connector zu verwenden. Auf dieser Seite werden auch die Namen und Werte der Standardumgebungsvariablen (oder die Spring Boot-Konfiguration) angezeigt, die Sie erhalten, wenn Sie die Dienstverbindung erstellen.
Unterstützte Computedienste
Mit dem Dienstconnector können Sie die folgenden Computedienste mit Azure Database for PostgreSQL verbinden:
Azure App Service
Azure Container Apps
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 Ihres Computediensts mit Azure Database for PostgreSQL mithilfe des Dienstconnectors 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
.NET
Ja
Ja
Ja
Ja
Go (pg)
Ja
Ja
Ja
Ja
Java (JDBC)
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
In der Tabelle wird angegeben, dass alle Kombinationen von Clienttypen und Authentifizierungsmethoden in der Tabelle unterstützt werden. Alle Clienttypen können jede der Authentifizierungsmethoden verwenden, um mithilfe des Dienstconnectors eine Verbindung mit Azure Database for PostgreSQL herzustellen.
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
Nutzen Sie die Verbindungsdetails und den Beispielcode in den folgenden Tabellen für den Authentifizierungstyp und den Clienttyp Ihrer Verbindung, um Computedienste mit Azure Database for PostgreSQL zu verbinden. Weitere Informationen zu Benennungskonventionen finden Sie im Artikel Besonderheiten des Dienstconnectors.
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 der Datei pom.xml die folgenden Abhängigkeiten hinzu:
Rufen Sie die Verbindungszeichenfolge aus Umgebungsvariablen ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
Spring-Anwendung: Wenn Sie mit der Option --client-type springboot eine Verbindung herstellen, legt der Dienstconnector die Eigenschaften spring.datasource.azure.passwordless-enabled, spring.datasource.url und spring.datasource.username auf Azure Spring Apps fest.
Aktualisieren Sie Ihre Anwendung nach dem Tutorial Binden einer Azure Database for PostgreSQL an Ihre Anwendung in Azure Spring Apps. Denken Sie daran, die Konfigurationseigenschaft spring.datasource.password zu entfernen, wenn sie zuvor festgelegt wurde, und fügen Sie die richtigen Abhängigkeiten zu Ihrer Spring-Anwendung hinzu.
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()
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";
const { Client } = require('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;
// 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 Referenz zu REST-Endpunkten.
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 den Umgebungsvariablen, die vom Dienstconnector hinzugefügt wurden, um die Verbindung herzustellen.
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 Referenz zu REST-Endpunkten.
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,
)
Für andere Sprachen können Sie die Verbindungseigenschaften verwenden, die der Dienstconnector auf die Umgebungsvariablen festgelegt hat, um eine Verbindung mit der Datenbank herzustellen. Weitere Informationen zu Umgebungsvariablen finden Sie unter Integrieren von Azure Database for MySQL mit Dienstconnector.
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
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 der Datei pom.xml die folgenden Abhängigkeiten hinzu:
Rufen Sie die Verbindungszeichenfolge aus Umgebungsvariablen ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
Spring-Anwendung: Wenn Sie mit der Option --client-type springboot eine Verbindung herstellen, legt der Dienstconnector die Eigenschaften spring.datasource.azure.passwordless-enabled, spring.datasource.url und spring.datasource.username auf Azure Spring Apps fest.
Aktualisieren Sie Ihre Anwendung nach dem Tutorial Binden einer Azure Database for PostgreSQL an Ihre Anwendung in Azure Spring Apps. Denken Sie daran, die Konfigurationseigenschaft spring.datasource.password zu entfernen, wenn sie zuvor festgelegt wurde, und fügen Sie die richtigen Abhängigkeiten zu Ihrer Spring-Anwendung hinzu.
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()
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";
const { Client } = require('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;
// 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 Referenz zu REST-Endpunkten.
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 den Umgebungsvariablen, die vom Dienstconnector hinzugefügt wurden, um die Verbindung herzustellen.
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 Referenz zu REST-Endpunkten.
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,
)
Für andere Sprachen können Sie die Verbindungseigenschaften verwenden, die der Dienstconnector auf die Umgebungsvariablen festgelegt hat, um eine Verbindung mit der Datenbank herzustellen. Weitere Informationen zu Umgebungsvariablen finden Sie unter Integrieren von Azure Database for MySQL mit Dienstconnector.
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
Verbindungszeichenfolge
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.
Nutzen Sie die folgenden Schritte und den folgenden Code, um eine Verbindung mit Azure Database for PostgreSQL mithilfe einer Verbindungszeichenfolge herzustellen.
Rufen Sie im Code die PostgreSQL-Verbindungszeichenfolge aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
Rufen Sie im Code die PostgreSQL-Verbindungszeichenfolge aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
Installieren Sie das Spring Cloud Azure-JDBC-Startermodul für PostgreSQL, indem Sie in Ihrer Datei pom.xml die folgenden Abhängigkeiten hinzufügen. Die Version von Spring Cloud Azure finden Sie hier.
Weitere Informationen zum Einrichten einer Spring App-Anwendung finden Sie in diesem Abschnitt. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
Rufen Sie im Code die PostgreSQL-Verbindungsinformationen aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
Rufen Sie in der Einstellungsdatei die Informationen zur PostgreSQL-Datenbank aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
# 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 den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
Rufen Sie im Code die PostgreSQL-Verbindungsinformationen aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
Rufen Sie im Code die PostgreSQL-Verbindungsinformationen aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
Rufen Sie im Code die PostgreSQL-Verbindungsinformationen aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Weitere Informationen zum Festlegen von TSL-Konfigurationen für PostgreSQL-Server finden Sie in diesen Schritten.
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
Für andere Sprachen können Sie die Verbindungseigenschaften verwenden, die der Dienstconnector auf die Umgebungsvariablen festgelegt hat, um eine Verbindung mit der Datenbank herzustellen. Weitere Informationen zu Umgebungsvariablen finden Sie unter Integrieren von Azure Database for MySQL mit Dienstconnector.
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 der Datei pom.xml die folgenden Abhängigkeiten hinzu:
Rufen Sie die Verbindungszeichenfolge aus Umgebungsvariablen ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
Spring-Anwendung: Wenn Sie mit der Option --client-type springboot eine Verbindung herstellen, legt der Dienstconnector die Eigenschaften spring.datasource.azure.passwordless-enabled, spring.datasource.url und spring.datasource.username auf Azure Spring Apps fest.
Aktualisieren Sie Ihre Anwendung nach dem Tutorial Binden einer Azure Database for PostgreSQL an Ihre Anwendung in Azure Spring Apps. Denken Sie daran, die Konfigurationseigenschaft spring.datasource.password zu entfernen, wenn sie zuvor festgelegt wurde, und fügen Sie die richtigen Abhängigkeiten zu Ihrer Spring-Anwendung hinzu.
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()
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";
const { Client } = require('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;
// 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 Referenz zu REST-Endpunkten.
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 den Umgebungsvariablen, die vom Dienstconnector hinzugefügt wurden, um die Verbindung herzustellen.
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 Referenz zu REST-Endpunkten.
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,
)
Für andere Sprachen können Sie die Verbindungseigenschaften verwenden, die der Dienstconnector auf die Umgebungsvariablen festgelegt hat, um eine Verbindung mit der Datenbank herzustellen. Weitere Informationen zu Umgebungsvariablen finden Sie unter Integrieren von Azure Database for MySQL mit Dienstconnector.
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.