Tento článek popisuje podporované metody ověřování, klienty a ukázkový kód, které můžete použít k připojení aplikací ke službě Azure Database for PostgreSQL pomocí konektoru služby. V tomto článku najdete také výchozí názvy proměnných prostředí, hodnoty a konfiguraci získané při vytváření připojení služeb.
Podporované výpočetní služby
Konektor služby se dá použít k připojení následujících výpočetních služeb ke službě Azure Database for PostgreSQL:
- Azure App Service
- Azure Container Apps
- Azure Functions
- Azure Kubernetes Service (AKS)
- Azure Spring Apps
Podporované typy ověřování a typy klientů
Následující tabulka ukazuje, které kombinace metod ověřování a klientů se podporují pro připojení výpočetních služeb ke službě Azure Database for PostgreSQL pomocí konektoru služby. "Ano" označuje, že kombinace je podporována, zatímco "Ne" označuje, že není podporována.
| Typ klienta |
Spravovaná identita přiřazená systémem |
Spravovaná identita přiřazená uživatelem |
Tajný kód/připojovací řetězec |
Principál služby |
| platforma .NET |
Ano |
Ano |
Ano |
Ano |
| Jít (pg) |
Ano |
Ano |
Ano |
Ano |
| Java (JDBC) |
Ano |
Ano |
Ano |
Ano |
| Java – Spring Boot (JDBC) |
Ano |
Ano |
Ano |
Ano |
| Node.js (pg) |
Ano |
Ano |
Ano |
Ano |
| PHP (nativní) |
Ano |
Ano |
Ano |
Ano |
| Python (psycopg2) |
Ano |
Ano |
Ano |
Ano |
| Python-Django |
Ano |
Ano |
Ano |
Ano |
| Ruby (ruby-pg) |
Ano |
Ano |
Ano |
Ano |
| Nic |
Ano |
Ano |
Ano |
Ano |
Poznámka:
Spravovaná identita přiřazená systémem, spravovaná identita přiřazená uživatelem a role služby jsou podporovány pouze v Azure CLI.
Výchozí názvy proměnných prostředí nebo vlastnosti aplikace a ukázkový kód
Podívejte se na podrobnosti o připojení a vzorový kód v následujících tabulkách podle typu ověřování a klienta vašeho připojení. Další informace o konvencích pojmenování najdete v článku o interních procesech Service Connector.
Spravovaná identita přiřazená systémem
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Vlastnosti aplikace |
Popis |
Příklad hodnoty |
spring.datasource.azure.passwordless-enabled |
Povolení ověřování bez hesla |
true |
spring.datasource.url |
Adresa URL databáze |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Uživatelské jméno databáze |
username |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 připojovací řetězec |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_NAME |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Uživatelské jméno databáze |
<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL připojovací řetězec |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_DATABASE |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_PORT |
Číslo portu |
5432 |
AZURE_POSTGRESQL_SSL |
Možnost SSL |
true |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Nativní připojovací řetězec PostgreSQL v PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_DATABASE |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_PORT |
Číslo portu |
5432 |
AZURE_POSTGRESQL_SSL |
Možnost SSL |
true |
Ukázkový kód
Projděte si následující kroky a kód a připojte se ke službě Azure Database for PostgreSQL pomocí spravované identity přiřazené systémem.
Pro .NET neexistuje modul plug-in ani knihovna, které podporují připojení bez hesla. Přístupový token pro spravovanou identitu nebo instanční objekt můžete získat pomocí klientské knihovny, jako je Azure.Identity. Přístupový token pak můžete použít jako heslo pro připojení k databázi. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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();
}
Do souboru pom.xml přidejte následující závislosti:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Získejte připojovací text z proměnných prostředí a přidejte název pluginu pro připojení k databázi.
import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
Další informace naleznete v následujících zdrojích:
Nainstalujte závislosti.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Získejte přístupový token pomocí azure-identity knihovny a použijte token jako heslo. Získejte informace o připojení z proměnných prostředí přidaných konektorem Service Connector. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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)
Nainstalujte závislosti.
pip install azure-identity
Získání přístupového tokenu pomocí azure-identity knihovny pomocí proměnných prostředí přidaných konektorem Service Connector Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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')
V souboru nastavení získejte informace o databázi Azure PostgreSQL z proměnných prostředí přidaných službou Service Connector. Pro přístup k databázi použijte accessToken získané v předchozím kroku.
# 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'},
}
}
Nainstalujte závislosti.
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"
V kódu získejte přístupový token pomocí azidentitya pak ho použijte jako heslo pro připojení k Azure PostgreSQL spolu s informacemi o připojení poskytovaných konektorem služby. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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()
Nainstalujte závislosti.
npm install --save @azure/identity
npm install --save pg
Ve kódu získejte přístupový token pomocí @azure/identity a informací o připojení PostgreSQL z proměnných prostředí přidaných službou Service Connector. Zkombinujte je za účelem navázání připojení. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Pro PHP neexistuje modul plug-in ani knihovna pro připojení bez hesla. Můžete získat přístupový token pro spravovanou identitu nebo instanční objekt a použít ho jako heslo pro připojení k databázi. Přístupový token je možné získat pomocí rozhraní Azure REST API.
V kódu získejte přístupový token pomocí rozhraní REST API s vaší oblíbenou knihovnou.
Pro identitu přiřazenou uživatelem a identitu přiřazenou systémem poskytuje Azure App Service a Azure Container Apps interně přístupný koncový bod REST pro načtení tokenů pro spravované identity definováním dvou proměnných prostředí: IDENTITY_ENDPOINT a IDENTITY_HEADER. Další informace najdete v referenčních informacích ke koncovému bodu REST.
Získejte přístupový token tím, že provedete požadavek HTTP GET na koncový bod identity a použijete https://ossrdbms-aad.database.windows.net jako resource v dotazu. Pro identitu přiřazenou uživatelem, prosím, zahrňte ID klienta z proměnných prostředí přidaných Service Connector do dotazu.
V případě instančního objektu se podívejte na žádost o přístupový token služby Azure AD, kde najdete podrobnosti o získání přístupového tokenu. Proveďte požadavek POST v rozsahu https://ossrdbms-aad.database.windows.net/.default a s ID tenanta, ID klienta a tajným klíčem klienta service principal z proměnných prostředí přidaných konektorem služby.
Zkombinujte přístupový token a připojovací řetězec PostgreSQL z proměnných prostředí přidaných službou Service Connector a vytvořte připojení.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Pro Ruby neexistuje modul plug-in ani knihovna pro připojení bez hesla. Můžete získat přístupový token pro spravovanou identitu nebo instanční objekt a použít ho jako heslo pro připojení k databázi. Přístupový token je možné získat pomocí rozhraní Azure REST API.
Nainstalujte závislosti.
gem install pg
V kódu získáte přístupový token pomocí rozhraní REST API a informací o připojení PostgreSQL z proměnných prostředí, které přidala služba Konektor služeb. Zkombinujte je za účelem navázání připojení. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
Azure App Service a Azure Container Apps poskytují interně přístupný koncový bod REST pro načítání tokenů pro spravované identity. Další informace najdete v referenčních informacích ke koncovému bodu REST.
require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client_id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
# :grant_type => 'client_credentials',
# :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
# :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
# :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
# http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password=" + access_token,
)
Podrobnosti o získání přístupového tokenu pro služební principal najdete v žádosti o přístupový token Azure AD.
Pokud jste před použitím konektoru služby vytvořili tabulky a sekvence na flexibilním serveru PostgreSQL, musíte se připojit jako vlastník a udělit oprávnění k objektům vytvořeným konektorem služby <aad-username>. Uživatelské jméno z připojovacího řetězce nebo konfigurace nastavené konektorem služby by mělo vypadat jako aad_<connection name>. Pokud používáte Azure portal, vyberte tlačítko pro rozbalení vedle Service Type sloupce a získejte hodnotu. Pokud používáte Azure CLI, zkontrolujte ve výstupu příkazu rozhraní příkazového řádku configurations.
Pak spusťte dotaz, který udělí oprávnění.
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
<owner-username> a <owner-password> jsou vlastníky existující tabulky, která může udělit oprávnění ostatním.
<aad-username> je uživatel vytvořený služebním konektorem. Nahraďte je skutečnou hodnotou.
Pomocí příkazu ověřte výsledek:
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
Spravovaná identita přiřazená uživatelem
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Vlastnosti aplikace |
Popis |
Příklad hodnoty |
spring.datasource.azure.passwordless-enabled |
Povolení ověřování bez hesla |
true |
spring.cloud.azure.credential.client-id |
ID klienta |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Povolení spravované identity klienta |
true |
spring.datasource.url |
Adresa URL databáze |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Uživatelské jméno databáze |
username |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 připojovací řetězec |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_NAME |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<<identity-client-ID>> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL připojovací řetězec |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_DATABASE |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_PORT |
Číslo portu |
5432 |
AZURE_POSTGRESQL_SSL |
Možnost SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Nativní připojovací řetězec PostgreSQL v PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_DATABASE |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_PORT |
Číslo portu |
5432 |
AZURE_POSTGRESQL_SSL |
Možnost SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
Ukázkový kód
Projděte si následující kroky a kód a připojte se ke službě Azure Database for PostgreSQL pomocí spravované identity přiřazené uživatelem.
Pro .NET neexistuje modul plug-in ani knihovna, které podporují připojení bez hesla. Přístupový token pro spravovanou identitu nebo instanční objekt můžete získat pomocí klientské knihovny, jako je Azure.Identity. Přístupový token pak můžete použít jako heslo pro připojení k databázi. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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();
}
Do souboru pom.xml přidejte následující závislosti:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Získejte připojovací text z proměnných prostředí a přidejte název pluginu pro připojení k databázi.
import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
Další informace naleznete v následujících zdrojích:
Nainstalujte závislosti.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Získejte přístupový token pomocí azure-identity knihovny a použijte token jako heslo. Získejte informace o připojení z proměnných prostředí přidaných konektorem Service Connector. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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)
Nainstalujte závislosti.
pip install azure-identity
Získání přístupového tokenu pomocí azure-identity knihovny pomocí proměnných prostředí přidaných konektorem Service Connector Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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')
V souboru nastavení získejte informace o databázi Azure PostgreSQL z proměnných prostředí přidaných službou Service Connector. Pro přístup k databázi použijte accessToken získané v předchozím kroku.
# 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'},
}
}
Nainstalujte závislosti.
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"
V kódu získejte přístupový token pomocí azidentitya pak ho použijte jako heslo pro připojení k Azure PostgreSQL spolu s informacemi o připojení poskytovaných konektorem služby. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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()
Nainstalujte závislosti.
npm install --save @azure/identity
npm install --save pg
Ve kódu získejte přístupový token pomocí @azure/identity a informací o připojení PostgreSQL z proměnných prostředí přidaných službou Service Connector. Zkombinujte je za účelem navázání připojení. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Pro PHP neexistuje modul plug-in ani knihovna pro připojení bez hesla. Můžete získat přístupový token pro spravovanou identitu nebo instanční objekt a použít ho jako heslo pro připojení k databázi. Přístupový token je možné získat pomocí rozhraní Azure REST API.
V kódu získejte přístupový token pomocí rozhraní REST API s vaší oblíbenou knihovnou.
Pro identitu přiřazenou uživatelem a identitu přiřazenou systémem poskytuje Azure App Service a Azure Container Apps interně přístupný koncový bod REST pro načtení tokenů pro spravované identity definováním dvou proměnných prostředí: IDENTITY_ENDPOINT a IDENTITY_HEADER. Další informace najdete v referenčních informacích ke koncovému bodu REST.
Získejte přístupový token tím, že provedete požadavek HTTP GET na koncový bod identity a použijete https://ossrdbms-aad.database.windows.net jako resource v dotazu. Pro identitu přiřazenou uživatelem, prosím, zahrňte ID klienta z proměnných prostředí přidaných Service Connector do dotazu.
V případě instančního objektu se podívejte na žádost o přístupový token služby Azure AD, kde najdete podrobnosti o získání přístupového tokenu. Proveďte požadavek POST v rozsahu https://ossrdbms-aad.database.windows.net/.default a s ID tenanta, ID klienta a tajným klíčem klienta service principal z proměnných prostředí přidaných konektorem služby.
Zkombinujte přístupový token a připojovací řetězec PostgreSQL z proměnných prostředí přidaných službou Service Connector a vytvořte připojení.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Pro Ruby neexistuje modul plug-in ani knihovna pro připojení bez hesla. Můžete získat přístupový token pro spravovanou identitu nebo instanční objekt a použít ho jako heslo pro připojení k databázi. Přístupový token je možné získat pomocí rozhraní Azure REST API.
Nainstalujte závislosti.
gem install pg
V kódu získáte přístupový token pomocí rozhraní REST API a informací o připojení PostgreSQL z proměnných prostředí, které přidala služba Konektor služeb. Zkombinujte je za účelem navázání připojení. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
Azure App Service a Azure Container Apps poskytují interně přístupný koncový bod REST pro načítání tokenů pro spravované identity. Další informace najdete v referenčních informacích ke koncovému bodu REST.
require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client_id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
# :grant_type => 'client_credentials',
# :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
# :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
# :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
# http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password=" + access_token,
)
Podrobnosti o získání přístupového tokenu pro služební principal najdete v žádosti o přístupový token Azure AD.
Pokud jste před použitím konektoru služby vytvořili tabulky a sekvence na flexibilním serveru PostgreSQL, musíte se připojit jako vlastník a udělit oprávnění k objektům vytvořeným konektorem služby <aad-username>. Uživatelské jméno z připojovacího řetězce nebo konfigurace nastavené konektorem služby by mělo vypadat jako aad_<connection name>. Pokud používáte Azure portal, vyberte tlačítko pro rozbalení vedle Service Type sloupce a získejte hodnotu. Pokud používáte Azure CLI, zkontrolujte ve výstupu příkazu rozhraní příkazového řádku configurations.
Pak spusťte dotaz, který udělí oprávnění.
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
<owner-username> a <owner-password> jsou vlastníky existující tabulky, která může udělit oprávnění ostatním.
<aad-username> je uživatel vytvořený služebním konektorem. Nahraďte je skutečnou hodnotou.
Pomocí příkazu ověřte výsledek:
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
Připojovací řetězec
Varování
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Ověřovací tok popsaný v tomto postupu vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok byste měli použít jenom v případě, že jiné bezpečnější toky, jako jsou spravované identity, nejsou přijatelné.
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
| Vlastnosti aplikace |
Popis |
Příklad hodnoty |
spring.datasource.url |
Adresa URL databáze |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Uživatelské jméno databáze |
<username> |
spring.datasource.password |
Heslo databáze |
<password> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 připojovací řetězec |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_NAME |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Heslo databáze |
<database-password> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL připojovací řetězec |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Heslo databáze |
<password> |
AZURE_POSTGRESQL_DATABASE |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_PORT |
Číslo portu |
5432 |
AZURE_POSTGRESQL_SSL |
Možnost SSL |
true |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Nativní připojovací řetězec PostgreSQL v PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_DATABASE |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_PORT |
Číslo portu |
5432 |
AZURE_POSTGRESQL_SSL |
Možnost SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
Heslo databáze |
<password> |
Ukázkový kód
Pokud se chcete připojit ke službě Azure Database for PostgreSQL pomocí připojovací řetězec, projděte si následující postup a kód.
- Nainstalujte závislosti podle pokynů k Npgsql
- V kódu získejte připojovací řetězec PostgreSQL z proměnných prostředí přidaných konektorem služeb.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Nainstalujte závislosti podle pokynů pgJDBC.
- V kódu získejte připojovací řetězec PostgreSQL z proměnných prostředí přidaných konektorem služeb.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
String connectionString = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
Connection connection = null;
try {
connection = DriverManager.getConnection(connectionString);
System.out.println("Connection successful!");
} catch (SQLException e){
System.out.println(e.getMessage());
}
- Nainstalujte modul Spring Cloud Azure Starter JDBC PostgreSQL přidáním následujících závislostí do souboru
pom.xml . Tady najdete verzi Spring Cloud Azure.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-dependencies</artifactId>
<version>5.20.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
- Nastavte aplikaci Spring Boot, další podrobnosti v této části.
- Nainstalujte závislosti podle pokynů pro psycopg2.
- V rámci kódu získejte informace o připojení PostgreSQL z proměnných prostředí přidaných Service Connector.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Nainstalujte závislosti podle pokynů Django a pokynů k psycopg2.
pip install django
pip install psycopg2
- V souboru nastavení získejte informace o databázi PostgreSQL z proměnných prostředí přidaných konektorem služby.
# 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'},
}
}
- Nainstalujte závislosti.
go get github.com/lib/pq
- V kódu získejte připojovací řetězec PostgreSQL z proměnných prostředí přidaných konektorem služeb.
import (
"database/sql"
"fmt"
"os"
_ "github.com/lib/pq"
)
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
- Nainstalujte závislosti.
npm install pg dotenv
- V rámci kódu získejte informace o připojení PostgreSQL z proměnných prostředí přidaných Service Connector.
import { Client } from 'pg';
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: process.env.AZURE_POSTGRESQL_PASSWORD,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
- V rámci kódu získejte informace o připojení PostgreSQL z proměnných prostředí přidaných Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Nainstalujte závislosti.
gem install pg
- V rámci kódu získejte informace o připojení PostgreSQL z proměnných prostředí přidaných Service Connector.
require 'pg'
require 'dotenv/load'
begin
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'],
)
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Principál služby
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Vaše klientské tajemství |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Vaše klientské tajemství |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Vlastnosti aplikace |
Popis |
Příklad hodnoty |
spring.datasource.azure.passwordless-enabled |
Povolení ověřování bez hesla |
true |
spring.cloud.azure.credential.client-id |
ID klienta |
<client-ID> |
spring.cloud.azure.credential.client-secret |
Vaše klientské tajemství |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
ID vašeho tenanta |
<tenant-ID> |
spring.datasource.url |
Adresa URL databáze |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Uživatelské jméno databáze |
username |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Vaše klientské tajemství |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 připojovací řetězec |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_NAME |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Tajné informace o vašem klientovi |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Vaše klientské tajemství |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL připojovací řetězec |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_DATABASE |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_PORT |
Číslo portu |
5432 |
AZURE_POSTGRESQL_SSL |
Možnost SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Vaše klientské tajemství |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Vaše klientské tajemství |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Nativní připojovací řetězec PostgreSQL v PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Vaše klientské tajemství |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Připojovací řetězec Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Výchozí název proměnné prostředí |
Popis |
Příklad hodnoty |
AZURE_POSTGRESQL_HOST |
Adresa URL hostitele databáze |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Uživatelské jméno databáze |
<username> |
AZURE_POSTGRESQL_DATABASE |
Název databáze |
<database-name> |
AZURE_POSTGRESQL_PORT |
Číslo portu |
5432 |
AZURE_POSTGRESQL_SSL |
Možnost SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
ID klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Vaše klientské tajemství |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID vašeho tenanta |
<tenant-ID> |
Ukázkový kód
Informace o připojení ke službě Azure Database for PostgreSQL pomocí instančního objektu najdete v následujících krocích a kódu.
Pro .NET neexistuje modul plug-in ani knihovna, které podporují připojení bez hesla. Přístupový token pro spravovanou identitu nebo instanční objekt můžete získat pomocí klientské knihovny, jako je Azure.Identity. Přístupový token pak můžete použít jako heslo pro připojení k databázi. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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();
}
Do souboru pom.xml přidejte následující závislosti:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Získejte připojovací text z proměnných prostředí a přidejte název pluginu pro připojení k databázi.
import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
Další informace naleznete v následujících zdrojích:
Nainstalujte závislosti.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Získejte přístupový token pomocí azure-identity knihovny a použijte token jako heslo. Získejte informace o připojení z proměnných prostředí přidaných konektorem Service Connector. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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)
Nainstalujte závislosti.
pip install azure-identity
Získání přístupového tokenu pomocí azure-identity knihovny pomocí proměnných prostředí přidaných konektorem Service Connector Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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')
V souboru nastavení získejte informace o databázi Azure PostgreSQL z proměnných prostředí přidaných službou Service Connector. Pro přístup k databázi použijte accessToken získané v předchozím kroku.
# 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'},
}
}
Nainstalujte závislosti.
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"
V kódu získejte přístupový token pomocí azidentitya pak ho použijte jako heslo pro připojení k Azure PostgreSQL spolu s informacemi o připojení poskytovaných konektorem služby. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
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()
Nainstalujte závislosti.
npm install --save @azure/identity
npm install --save pg
Ve kódu získejte přístupový token pomocí @azure/identity a informací o připojení PostgreSQL z proměnných prostředí přidaných službou Service Connector. Zkombinujte je za účelem navázání připojení. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from 'pg';
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
Pro PHP neexistuje modul plug-in ani knihovna pro připojení bez hesla. Můžete získat přístupový token pro spravovanou identitu nebo instanční objekt a použít ho jako heslo pro připojení k databázi. Přístupový token je možné získat pomocí rozhraní Azure REST API.
V kódu získejte přístupový token pomocí rozhraní REST API s vaší oblíbenou knihovnou.
Pro identitu přiřazenou uživatelem a identitu přiřazenou systémem poskytuje Azure App Service a Azure Container Apps interně přístupný koncový bod REST pro načtení tokenů pro spravované identity definováním dvou proměnných prostředí: IDENTITY_ENDPOINT a IDENTITY_HEADER. Další informace najdete v referenčních informacích ke koncovému bodu REST.
Získejte přístupový token tím, že provedete požadavek HTTP GET na koncový bod identity a použijete https://ossrdbms-aad.database.windows.net jako resource v dotazu. Pro identitu přiřazenou uživatelem, prosím, zahrňte ID klienta z proměnných prostředí přidaných Service Connector do dotazu.
V případě instančního objektu se podívejte na žádost o přístupový token služby Azure AD, kde najdete podrobnosti o získání přístupového tokenu. Proveďte požadavek POST v rozsahu https://ossrdbms-aad.database.windows.net/.default a s ID tenanta, ID klienta a tajným klíčem klienta service principal z proměnných prostředí přidaných konektorem služby.
Zkombinujte přístupový token a připojovací řetězec PostgreSQL z proměnných prostředí přidaných službou Service Connector a vytvořte připojení.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Pro Ruby neexistuje modul plug-in ani knihovna pro připojení bez hesla. Můžete získat přístupový token pro spravovanou identitu nebo instanční objekt a použít ho jako heslo pro připojení k databázi. Přístupový token je možné získat pomocí rozhraní Azure REST API.
Nainstalujte závislosti.
gem install pg
V kódu získáte přístupový token pomocí rozhraní REST API a informací o připojení PostgreSQL z proměnných prostředí, které přidala služba Konektor služeb. Zkombinujte je za účelem navázání připojení. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.
Azure App Service a Azure Container Apps poskytují interně přístupný koncový bod REST pro načítání tokenů pro spravované identity. Další informace najdete v referenčních informacích ke koncovému bodu REST.
require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client_id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
# :grant_type => 'client_credentials',
# :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
# :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
# :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
# http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password=" + access_token,
)
Podrobnosti o získání přístupového tokenu pro služební principal najdete v žádosti o přístupový token Azure AD.
Pokud jste před použitím konektoru služby vytvořili tabulky a sekvence na flexibilním serveru PostgreSQL, musíte se připojit jako vlastník a udělit oprávnění k objektům vytvořeným konektorem služby <aad-username>. Uživatelské jméno z připojovacího řetězce nebo konfigurace nastavené konektorem služby by mělo vypadat jako aad_<connection name>. Pokud používáte Azure portal, vyberte tlačítko pro rozbalení vedle Service Type sloupce a získejte hodnotu. Pokud používáte Azure CLI, zkontrolujte ve výstupu příkazu rozhraní příkazového řádku configurations.
Pak spusťte dotaz, který udělí oprávnění.
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
<owner-username> a <owner-password> jsou vlastníky existující tabulky, která může udělit oprávnění ostatním.
<aad-username> je uživatel vytvořený služebním konektorem. Nahraďte je skutečnou hodnotou.
Pomocí příkazu ověřte výsledek:
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
Další kroky
Další informace o konektoru Service Connector najdete v následujících kurzech.