Azure Database for PostgreSQL integreren met Service Connector
Artikel
Op deze pagina ziet u ondersteunde verificatiemethoden en -clients en ziet u voorbeeldcode die u kunt gebruiken om Azure Database for PostgreSQL te verbinden met andere cloudservices met behulp van Service Connector. Mogelijk kunt u nog steeds verbinding maken met Azure Database for PostgreSQL in andere programmeertalen zonder serviceconnector te gebruiken. Op deze pagina ziet u ook de standaardnamen en waarden van omgevingsvariabelen (of Spring Boot-configuratie) die u krijgt wanneer u de serviceverbinding maakt.
Ondersteunde rekenservices
ServiceConnector kan worden gebruikt om de volgende rekenservices te verbinden met Azure Database for PostgreSQL:
Azure App Service
Azure Container Apps
Azure Functions
Azure Kubernetes Service (AKS)
Azure Spring Apps
Ondersteunde verificatietypen en clienttypen
In de onderstaande tabel ziet u welke combinaties van verificatiemethoden en clients worden ondersteund voor het verbinden van uw rekenservice met Azure Database for PostgreSQL met behulp van Service Connector. Een 'Ja' geeft aan dat de combinatie wordt ondersteund, terwijl een 'Nee' aangeeft dat deze niet wordt ondersteund.
Client-type
Door het systeem toegewezen beheerde identiteit
Door de gebruiker toegewezen beheerde identiteit
Geheim/verbindingsreeks
Service-principal
.NET
Ja
Ja
Ja
Ja
Go (pg)
Ja
Ja
Ja
Ja
Java (JDBC)
Ja
Ja
Ja
Ja
Java - Spring Boot (JDBC)
Ja
Ja
Ja
Ja
Node.js (pg)
Ja
Ja
Ja
Ja
PHP (systeemeigen)
Ja
Ja
Ja
Ja
Python (psycopg2)
Ja
Ja
Ja
Ja
Python-Django
Ja
Ja
Ja
Ja
Ruby (ruby-pg)
Ja
Ja
Ja
Ja
Geen
Ja
Ja
Ja
Ja
Deze tabel geeft aan dat alle combinaties van clienttypen en verificatiemethoden in de tabel worden ondersteund. Alle clienttypen kunnen elk van de verificatiemethoden gebruiken om verbinding te maken met Azure Database for PostgreSQL met behulp van Service Connector.
Notitie
Door het systeem toegewezen beheerde identiteit, door de gebruiker toegewezen beheerde identiteit en service-principal worden alleen ondersteund in Azure CLI.
Namen van standaardomgevingsvariabelen of toepassingseigenschappen en voorbeeldcode
Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een door het systeem toegewezen beheerde identiteit.
Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Voeg de volgende afhankelijkheden toe aan uw pom.xml-bestand :
Als u voor een Spring-toepassing een verbinding maakt met de optie --client-type springboot, stelt ServiceConnector de eigenschappen spring.datasource.azure.passwordless-enabledin spring.datasource.urlen spring.datasource.username op Azure Spring Apps.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Get access token using azure-identity library and use the token as password. Haal verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token)
Installeer afhankelijkheden.
pip install azure-identity
Toegangstoken ophalen met behulp van azure-identity bibliotheek met behulp van omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# credential = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token.
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
Haal bij het instellen van het bestand azure PostgreSQL-databasegegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Gebruik accessToken verkregen in de vorige stap om toegang te krijgen tot de database.
# In your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host,
'PORT': '5432', # Port is 5432 by default
'OPTIONS': {'sslmode': 'require'},
}
}
Installeer afhankelijkheden.
go get github.com/lib/pq
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
Haal in code het toegangstoken op met behulp van azidentityhet wachtwoord en gebruik het als wachtwoord om verbinding te maken met Azure PostgreSQL, samen met verbindingsgegevens van Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
import (
"database/sql"
"fmt"
"os"
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
_ "github.com/lib/pq"
)
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// For user-assigned identity.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// For service principal.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// tenantid := os.Getenv("AZURE_POSTGRESQL_TENANTID")
// clientsecret := os.Getenv("AZURE_POSTGRESQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
// error handling
}
// Acquire the access token
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
// Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING") + " password=" + token.Token
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
Haal in code het toegangstoken op met behulp van @azure/identity en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
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();
})();
Voor PHP is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Haal in code het toegangstoken op met behulp van REST API met uw favoriete bibliotheek.
Voor door de gebruiker toegewezen identiteit en door het systeem toegewezen identiteit biedt App Service en Container Apps een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten door twee omgevingsvariabelen te definiƫren: IDENTITY_ENDPOINT en IDENTITY_HEADER. Zie rest-eindpuntreferentie voor meer informatie.
Haal het toegangstoken op door een HTTP GET-aanvraag naar het identiteitseindpunt te maken en te gebruiken https://ossrdbms-aad.database.windows.net zoals resource in de query. Voor door de gebruiker toegewezen identiteit moet u ook de client-id van de omgevingsvariabelen opnemen die door Service Connector in de query zijn toegevoegd.
Raadpleeg de azure AD-service-to-service-toegangstokenaanvraag voor de service voor informatie over het verkrijgen van toegangstokens voor service-principals. Voer de POST-aanvraag uit voor het bereik van https://ossrdbms-aad.database.windows.net/.default en met de tenant-id, client-id en clientgeheim van de service-principal uit de omgevingsvariabelen die zijn toegevoegd door Service Connector.
Combineer het toegangstoken en de PostgreSQL-verbindingslijn van omgevingsvariabelen die zijn toegevoegd door de Service Connector-service om de verbinding tot stand te brengen.
Voor Ruby is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Installeer afhankelijkheden.
gem install pg
Haal in code het toegangstoken op met behulp van REST API en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
App Service en container Apps bieden een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten. Zie rest-eindpuntreferentie voor meer informatie.
require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client-id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
# :grant_type => 'client_credentials',
# :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
# :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
# :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
# http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password=" + access_token,
)
Voor andere talen gebruikt u de verbindingseigenschappen die serviceconnector instelt op de omgevingsvariabelen om de database te verbinden. Zie Azure Database for PostgreSQL integreren met Service Connector voor meer informatie over omgevingsvariabelen.
Als u vervolgens tabellen en reeksen hebt gemaakt in postgreSQL flexibele server voordat u Service Connector gebruikt, moet u verbinding maken als eigenaar en toestemming verlenen voor <aad-username> het maken van serviceconnector. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door serviceconnector, moet er als aad_<connection name>volgt uitzien. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert configurations u de uitvoer van de CLI-opdracht.
Voer vervolgens de query uit om toestemming te verlenen
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen. <aad-username> is de gebruiker die is gemaakt door Service Connector. Vervang ze door de werkelijke waarde.
Valideer het resultaat met de opdracht:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Database for PostgreSQL met behulp van een door de gebruiker toegewezen beheerde identiteit.
Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Voeg de volgende afhankelijkheden toe aan uw pom.xml-bestand :
Als u voor een Spring-toepassing een verbinding maakt met de optie --client-type springboot, stelt ServiceConnector de eigenschappen spring.datasource.azure.passwordless-enabledin spring.datasource.urlen spring.datasource.username op Azure Spring Apps.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Get access token using azure-identity library and use the token as password. Haal verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token)
Installeer afhankelijkheden.
pip install azure-identity
Toegangstoken ophalen met behulp van azure-identity bibliotheek met behulp van omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# credential = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token.
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
Haal bij het instellen van het bestand azure PostgreSQL-databasegegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Gebruik accessToken verkregen in de vorige stap om toegang te krijgen tot de database.
# In your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host,
'PORT': '5432', # Port is 5432 by default
'OPTIONS': {'sslmode': 'require'},
}
}
Installeer afhankelijkheden.
go get github.com/lib/pq
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
Haal in code het toegangstoken op met behulp van azidentityhet wachtwoord en gebruik het als wachtwoord om verbinding te maken met Azure PostgreSQL, samen met verbindingsgegevens van Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
import (
"database/sql"
"fmt"
"os"
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
_ "github.com/lib/pq"
)
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// For user-assigned identity.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// For service principal.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// tenantid := os.Getenv("AZURE_POSTGRESQL_TENANTID")
// clientsecret := os.Getenv("AZURE_POSTGRESQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
// error handling
}
// Acquire the access token
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
// Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING") + " password=" + token.Token
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
Haal in code het toegangstoken op met behulp van @azure/identity en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
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();
})();
Voor PHP is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Haal in code het toegangstoken op met behulp van REST API met uw favoriete bibliotheek.
Voor door de gebruiker toegewezen identiteit en door het systeem toegewezen identiteit biedt App Service en Container Apps een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten door twee omgevingsvariabelen te definiƫren: IDENTITY_ENDPOINT en IDENTITY_HEADER. Zie rest-eindpuntreferentie voor meer informatie.
Haal het toegangstoken op door een HTTP GET-aanvraag naar het identiteitseindpunt te maken en te gebruiken https://ossrdbms-aad.database.windows.net zoals resource in de query. Voor door de gebruiker toegewezen identiteit moet u ook de client-id van de omgevingsvariabelen opnemen die door Service Connector in de query zijn toegevoegd.
Raadpleeg de azure AD-service-to-service-toegangstokenaanvraag voor de service voor informatie over het verkrijgen van toegangstokens voor service-principals. Voer de POST-aanvraag uit voor het bereik van https://ossrdbms-aad.database.windows.net/.default en met de tenant-id, client-id en clientgeheim van de service-principal uit de omgevingsvariabelen die zijn toegevoegd door Service Connector.
Combineer het toegangstoken en de PostgreSQL-verbindingslijn van omgevingsvariabelen die zijn toegevoegd door de Service Connector-service om de verbinding tot stand te brengen.
Voor Ruby is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Installeer afhankelijkheden.
gem install pg
Haal in code het toegangstoken op met behulp van REST API en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
App Service en container Apps bieden een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten. Zie rest-eindpuntreferentie voor meer informatie.
require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client-id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
# :grant_type => 'client_credentials',
# :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
# :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
# :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
# http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password=" + access_token,
)
Voor andere talen gebruikt u de verbindingseigenschappen die serviceconnector instelt op de omgevingsvariabelen om de database te verbinden. Zie Azure Database for PostgreSQL integreren met Service Connector voor meer informatie over omgevingsvariabelen.
Als u vervolgens tabellen en reeksen hebt gemaakt in postgreSQL flexibele server voordat u Service Connector gebruikt, moet u verbinding maken als eigenaar en toestemming verlenen voor <aad-username> het maken van serviceconnector. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door serviceconnector, moet er als aad_<connection name>volgt uitzien. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert configurations u de uitvoer van de CLI-opdracht.
Voer vervolgens de query uit om toestemming te verlenen
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen. <aad-username> is de gebruiker die is gemaakt door Service Connector. Vervang ze door de werkelijke waarde.
Valideer het resultaat met de opdracht:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Verbindingsreeks
Waarschuwing
Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. U moet deze stroom alleen gebruiken wanneer andere veiligere stromen, zoals beheerde identiteiten, niet haalbaar zijn.
Haal in code de PostgreSQL-verbindingsreeks op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
Haal in code de PostgreSQL-verbindingsreeks op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
Installeer de Module Spring Cloud Azure Starter JDBC PostgreSQL door de volgende afhankelijkheden toe te voegen aan uw pom.xml bestand. Zoek hier de versie van Spring Cloud Azure.
Haal in code de PostgreSQL-verbindingsgegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
Haal bij het instellen van het bestand de PostgreSQL-databasegegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
# in your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = os.getenv('AZURE_POSTGRESQL_PASSWORD')
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host,
'PORT': '5432', # Port is 5432 by default
'OPTIONS': {'sslmode': 'require'},
}
}
Installeer afhankelijkheden.
go get github.com/lib/pq
Haal in code de PostgreSQL-verbindingsreeks op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
Haal in code de PostgreSQL-verbindingsgegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
Haal in code de PostgreSQL-verbindingsgegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
Haal in code de PostgreSQL-verbindingsgegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Raadpleeg deze stappen om TSL-configuraties voor PostgreSQL-server in te stellen.
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
Voor andere talen gebruikt u de verbindingseigenschappen die serviceconnector instelt op de omgevingsvariabelen om de database te verbinden. Zie Azure Database for PostgreSQL integreren met Service Connector voor meer informatie over omgevingsvariabelen.
Voor .NET is er geen invoegtoepassing of bibliotheek om wachtwoordloze verbindingen te ondersteunen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek, zoals Azure.Identity. Vervolgens kunt u het toegangstoken als wachtwoord gebruiken om verbinding te maken met de database. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Voeg de volgende afhankelijkheden toe aan uw pom.xml-bestand :
Als u voor een Spring-toepassing een verbinding maakt met de optie --client-type springboot, stelt ServiceConnector de eigenschappen spring.datasource.azure.passwordless-enabledin spring.datasource.urlen spring.datasource.username op Azure Spring Apps.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Get access token using azure-identity library and use the token as password. Haal verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token)
Installeer afhankelijkheden.
pip install azure-identity
Toegangstoken ophalen met behulp van azure-identity bibliotheek met behulp van omgevingsvariabelen die zijn toegevoegd door Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# credential = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token.
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
Haal bij het instellen van het bestand azure PostgreSQL-databasegegevens op uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Gebruik accessToken verkregen in de vorige stap om toegang te krijgen tot de database.
# In your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host,
'PORT': '5432', # Port is 5432 by default
'OPTIONS': {'sslmode': 'require'},
}
}
Installeer afhankelijkheden.
go get github.com/lib/pq
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
Haal in code het toegangstoken op met behulp van azidentityhet wachtwoord en gebruik het als wachtwoord om verbinding te maken met Azure PostgreSQL, samen met verbindingsgegevens van Service Connector. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
import (
"database/sql"
"fmt"
"os"
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
_ "github.com/lib/pq"
)
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// For user-assigned identity.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// For service principal.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// tenantid := os.Getenv("AZURE_POSTGRESQL_TENANTID")
// clientsecret := os.Getenv("AZURE_POSTGRESQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
// error handling
}
// Acquire the access token
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
// Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING") + " password=" + token.Token
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
Haal in code het toegangstoken op met behulp van @azure/identity en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
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();
})();
Voor PHP is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Haal in code het toegangstoken op met behulp van REST API met uw favoriete bibliotheek.
Voor door de gebruiker toegewezen identiteit en door het systeem toegewezen identiteit biedt App Service en Container Apps een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten door twee omgevingsvariabelen te definiƫren: IDENTITY_ENDPOINT en IDENTITY_HEADER. Zie rest-eindpuntreferentie voor meer informatie.
Haal het toegangstoken op door een HTTP GET-aanvraag naar het identiteitseindpunt te maken en te gebruiken https://ossrdbms-aad.database.windows.net zoals resource in de query. Voor door de gebruiker toegewezen identiteit moet u ook de client-id van de omgevingsvariabelen opnemen die door Service Connector in de query zijn toegevoegd.
Raadpleeg de azure AD-service-to-service-toegangstokenaanvraag voor de service voor informatie over het verkrijgen van toegangstokens voor service-principals. Voer de POST-aanvraag uit voor het bereik van https://ossrdbms-aad.database.windows.net/.default en met de tenant-id, client-id en clientgeheim van de service-principal uit de omgevingsvariabelen die zijn toegevoegd door Service Connector.
Combineer het toegangstoken en de PostgreSQL-verbindingslijn van omgevingsvariabelen die zijn toegevoegd door de Service Connector-service om de verbinding tot stand te brengen.
Voor Ruby is er geen invoegtoepassing of bibliotheek voor wachtwoordloze verbindingen. U kunt een toegangstoken ophalen voor de beheerde identiteit of service-principal en dit gebruiken als het wachtwoord om verbinding te maken met de database. Het toegangstoken kan worden verkregen met behulp van de Azure REST API.
Installeer afhankelijkheden.
gem install pg
Haal in code het toegangstoken op met behulp van REST API en PostgreSQL-verbindingsgegevens uit omgevingsvariabelen die zijn toegevoegd door de Service Connector-service. Combineer ze om de verbinding tot stand te brengen. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.
App Service en container Apps bieden een intern toegankelijk REST-eindpunt voor het ophalen van tokens voor beheerde identiteiten. Zie rest-eindpuntreferentie voor meer informatie.
require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client-id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
# :grant_type => 'client_credentials',
# :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
# :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
# :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
# http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password=" + access_token,
)
Voor andere talen gebruikt u de verbindingseigenschappen die serviceconnector instelt op de omgevingsvariabelen om de database te verbinden. Zie Azure Database for PostgreSQL integreren met Service Connector voor meer informatie over omgevingsvariabelen.
Als u vervolgens tabellen en reeksen hebt gemaakt in postgreSQL flexibele server voordat u Service Connector gebruikt, moet u verbinding maken als eigenaar en toestemming verlenen voor <aad-username> het maken van serviceconnector. De gebruikersnaam van de verbindingsreeks of configuratie die is ingesteld door serviceconnector, moet er als aad_<connection name>volgt uitzien. Als u Azure Portal gebruikt, selecteert u de uitvouwknop naast de Service Type kolom en haalt u de waarde op. Als u Azure CLI gebruikt, controleert configurations u de uitvoer van de CLI-opdracht.
Voer vervolgens de query uit om toestemming te verlenen
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
De <owner-username> en <owner-password> is de eigenaar van de bestaande tabel die machtigingen kan verlenen aan anderen. <aad-username> is de gebruiker die is gemaakt door Service Connector. Vervang ze door de werkelijke waarde.
Valideer het resultaat met de opdracht:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Volgende stappen
Volg de onderstaande zelfstudies voor meer informatie over Service Connector.