W tym artykule opisano obsługiwane metody uwierzytelniania, klientów i przykładowy kod, którego można użyć do łączenia aplikacji z usługą Azure Database for PostgreSQL przy użyciu łącznika usługi Service Connector. W tym artykule znajdziesz również domyślne nazwy zmiennych środowiskowych, wartości i konfigurację uzyskaną podczas tworzenia połączeń usług.
Obsługiwane usługi obliczeniowe
Łącznik usługi może służyć do łączenia następujących usług obliczeniowych z usługą Azure Database for PostgreSQL:
- Azure App Service
- Azure Container Apps
- Azure Functions
- Azure Kubernetes Service (AKS)
- Azure Spring Apps
Obsługiwane typy uwierzytelniania i typy klientów
W poniższej tabeli przedstawiono kombinacje metod uwierzytelniania i klientów, które są obsługiwane do łączenia usług obliczeniowych z usługą Azure Database for PostgreSQL przy użyciu łącznika usługi Service Connector. Wartość "Tak" wskazuje, że kombinacja jest obsługiwana, a wartość "Nie" wskazuje, że nie jest obsługiwana.
| Typ klienta |
Zarządzana tożsamość przypisana przez system |
Tożsamość zarządzana przypisana użytkownikowi |
Tajny klucz/ciąg połączenia |
Główna jednostka serwisowa |
| .NET |
Tak |
Tak |
Tak |
Tak |
| Idź (pg) |
Tak |
Tak |
Tak |
Tak |
| Java (JDBC) |
Tak |
Tak |
Tak |
Tak |
| Java — Spring Boot (JDBC) |
Tak |
Tak |
Tak |
Tak |
| Node.js (pg) |
Tak |
Tak |
Tak |
Tak |
| PHP (natywne) |
Tak |
Tak |
Tak |
Tak |
| Python (psycopg2) |
Tak |
Tak |
Tak |
Tak |
| Python-Django |
Tak |
Tak |
Tak |
Tak |
| Ruby (ruby-pg) |
Tak |
Tak |
Tak |
Tak |
| Żaden |
Tak |
Tak |
Tak |
Tak |
Uwaga / Notatka
Tożsamość zarządzana przydzielona przez system, tożsamość zarządzana przydzielona przez użytkownika i główny element usługi są obsługiwane wyłącznie w interfejsie wiersza polecenia platformy Azure.
Domyślne nazwy zmiennych środowiskowych lub właściwości aplikacji i przykładowy kod
Zapoznaj się ze szczegółami połączenia i przykładowym kodem w poniższych tabelach, zgodnie z typem uwierzytelniania połączenia i typem klienta. Aby uzyskać więcej informacji na temat konwencji nazewnictwa, zapoznaj się z artykułem Dotyczącym wewnętrznych łączników usług .
Zarządzana tożsamość przypisana przez system
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Właściwości aplikacji |
Opis |
Przykładowa wartość |
spring.datasource.azure.passwordless-enabled |
Włączanie uwierzytelniania bez hasła |
true |
spring.datasource.url |
Adres URL bazy danych |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nazwa użytkownika bazy danych |
username |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 parametry połączenia |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_NAME |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nazwa użytkownika bazy danych |
<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL parametry połączenia |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numer portu |
5432 |
AZURE_POSTGRESQL_SSL |
Opcja SSL |
true |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Natywny ciąg połączenia PostgreSQL PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia języka Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numer portu |
5432 |
AZURE_POSTGRESQL_SSL |
Opcja SSL |
true |
Przykładowy kod
Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu tożsamości zarządzanej przypisanej przez system.
W przypadku platformy .NET nie ma wtyczki ani biblioteki do obsługi połączeń bez hasła. Token dostępu dla tożsamości zarządzanej lub jednostki usługi można uzyskać przy użyciu biblioteki klienta, takiej jak Azure.Identity. Następnie możesz użyć tokenu dostępu jako hasła, aby nawiązać połączenie z bazą danych. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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();
}
Dodaj następujące zależności w pliku pom.xml :
<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>
Pobierz parametry połączenia ze zmiennych środowiskowych i dodaj nazwę wtyczki, aby nawiązać połączenie z bazą danych:
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);
Aby uzyskać więcej informacji, zobacz następujące zasoby:
Instalowanie zależności.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Uzyskiwanie tokenu dostępu przy użyciu azure-identity biblioteki i używanie tokenu jako hasła. Pobierz informacje o połączeniu ze zmiennych środowiskowych dodanych przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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)
Instalowanie zależności.
pip install azure-identity
Uzyskiwanie tokenu dostępu przy użyciu biblioteki przy użyciu azure-identity zmiennych środowiskowych dodanych przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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')
W pliku ustawień pobierz informacje o bazie danych Azure PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Użyj accessToken metody uzyskanej w poprzednim kroku, aby uzyskać dostęp do bazy danych.
# 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'},
}
}
Instalowanie zależności.
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"
W kodzie uzyskaj token dostępu przy użyciu metody azidentity, a następnie użyj go jako hasła, aby nawiązać połączenie z usługą Azure PostgreSQL wraz z informacjami o połączeniu dostarczonymi przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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()
Instalowanie zależności.
npm install --save @azure/identity
npm install --save pg
W kodzie uzyskaj token dostępu przy użyciu informacji o połączeniu i @azure/identity usłudze PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Połącz je, aby nawiązać połączenie. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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();
})();
W przypadku języka PHP nie ma wtyczki ani biblioteki dla połączeń bez hasła. Możesz uzyskać token dostępu dla tożsamości zarządzanej lub jednostki usługi i użyć go jako hasła w celu nawiązania połączenia z bazą danych. Token dostępu można uzyskać przy użyciu interfejsu API REST platformy Azure.
W kodzie pobierz token dostępu przy użyciu interfejsu API REST z ulubioną biblioteką.
W przypadku tożsamości przypisanej przez użytkownika i tożsamości przypisanej przez system usługa Azure App Service i usługa Azure Container Apps zapewniają wewnętrznie dostępny punkt końcowy REST do pobierania tokenów dla tożsamości zarządzanych przez zdefiniowanie dwóch zmiennych środowiskowych: IDENTITY_ENDPOINT i IDENTITY_HEADER. Aby uzyskać więcej informacji, zobacz Referencja punktu końcowego REST.
Pobierz token dostępu, wysyłając żądanie HTTP GET do punktu końcowego tożsamości i używając go https://ossrdbms-aad.database.windows.net tak jak resource w zapytaniu. W przypadku tożsamości przypisanej przez użytkownika dołącz identyfikator klienta ze zmiennych środowiskowych dodanych przez łącznik usługi w zapytaniu.
Aby uzyskać szczegółowe informacje na temat uzyskiwania tokenu dostępu, zapoznaj się z żądaniem tokenu dostępu do usługi Azure AD . Utwórz żądanie POST zakresu https://ossrdbms-aad.database.windows.net/.default i za pomocą identyfikatora dzierżawy, identyfikatora klienta i wpisu tajnego klienta jednostki usługi ze zmiennych środowiskowych dodanych przez łącznik usługi.
Połącz token dostępu i ciąg połączenia PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector, aby nawiązać połączenie.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
W przypadku języka Ruby nie ma wtyczki ani biblioteki dla połączeń bez hasła. Możesz uzyskać token dostępu dla tożsamości zarządzanej lub jednostki usługi i użyć go jako hasła w celu nawiązania połączenia z bazą danych. Token dostępu można uzyskać przy użyciu interfejsu API REST platformy Azure.
Instalowanie zależności.
gem install pg
W kodzie uzyskaj token dostępu przy użyciu interfejsu API REST i informacji o połączeniu PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Połącz je, aby nawiązać połączenie. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
Usługi Azure App Service i Azure Container Apps zapewniają wewnętrznie dostępny punkt końcowy REST do pobierania tokenów dla tożsamości zarządzanych. Aby uzyskać więcej informacji, zobacz Referencja punktu końcowego 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,
)
Aby uzyskać więcej informacji na temat uzyskiwania tokenu dostępu dla podmiotu usługi, odwołaj się do żądania tokenu dostępu od usługi do usługi w Azure AD.
Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem łącznika usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> utworzenia przez łącznik usługi. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez łącznik usługi powinna wyglądać następująco: aad_<connection name>. Jeśli używasz witryny Azure Portal, wybierz przycisk rozwijania obok Service Type kolumny i pobierz wartość. Jeśli używasz interfejsu wiersza polecenia platformy Azure, sprawdź configurations dane wyjściowe polecenia interfejsu wiersza polecenia.
Następnie wykonaj zapytanie, aby udzielić uprawnienia
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>\";"
Element <owner-username> i <owner-password> jest właścicielem istniejącej tabeli, która może udzielić uprawnień innym osobom.
<aad-username> to użytkownik utworzony przez łącznik usługi. Zastąp je rzeczywistą wartością.
Zweryfikuj wynik za pomocą polecenia :
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
Tożsamość zarządzana przypisana użytkownikowi
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Właściwości aplikacji |
Opis |
Przykładowa wartość |
spring.datasource.azure.passwordless-enabled |
Włączanie uwierzytelniania bez hasła |
true |
spring.cloud.azure.credential.client-id |
Identyfikator klienta |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Włącz tożsamość zarządzaną klienta |
true |
spring.datasource.url |
Adres URL bazy danych |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nazwa użytkownika bazy danych |
username |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 parametry połączenia |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_NAME |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<<identity-client-ID>> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL parametry połączenia |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numer portu |
5432 |
AZURE_POSTGRESQL_SSL |
Opcja SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Natywny ciąg połączenia PostgreSQL PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia języka Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numer portu |
5432 |
AZURE_POSTGRESQL_SSL |
Opcja SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
Przykładowy kod
Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu tożsamości zarządzanej przypisanej przez użytkownika.
W przypadku platformy .NET nie ma wtyczki ani biblioteki do obsługi połączeń bez hasła. Token dostępu dla tożsamości zarządzanej lub jednostki usługi można uzyskać przy użyciu biblioteki klienta, takiej jak Azure.Identity. Następnie możesz użyć tokenu dostępu jako hasła, aby nawiązać połączenie z bazą danych. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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();
}
Dodaj następujące zależności w pliku pom.xml :
<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>
Pobierz parametry połączenia ze zmiennych środowiskowych i dodaj nazwę wtyczki, aby nawiązać połączenie z bazą danych:
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);
Aby uzyskać więcej informacji, zobacz następujące zasoby:
Instalowanie zależności.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Uzyskiwanie tokenu dostępu przy użyciu azure-identity biblioteki i używanie tokenu jako hasła. Pobierz informacje o połączeniu ze zmiennych środowiskowych dodanych przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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)
Instalowanie zależności.
pip install azure-identity
Uzyskiwanie tokenu dostępu przy użyciu biblioteki przy użyciu azure-identity zmiennych środowiskowych dodanych przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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')
W pliku ustawień pobierz informacje o bazie danych Azure PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Użyj accessToken metody uzyskanej w poprzednim kroku, aby uzyskać dostęp do bazy danych.
# 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'},
}
}
Instalowanie zależności.
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"
W kodzie uzyskaj token dostępu przy użyciu metody azidentity, a następnie użyj go jako hasła, aby nawiązać połączenie z usługą Azure PostgreSQL wraz z informacjami o połączeniu dostarczonymi przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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()
Instalowanie zależności.
npm install --save @azure/identity
npm install --save pg
W kodzie uzyskaj token dostępu przy użyciu informacji o połączeniu i @azure/identity usłudze PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Połącz je, aby nawiązać połączenie. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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();
})();
W przypadku języka PHP nie ma wtyczki ani biblioteki dla połączeń bez hasła. Możesz uzyskać token dostępu dla tożsamości zarządzanej lub jednostki usługi i użyć go jako hasła w celu nawiązania połączenia z bazą danych. Token dostępu można uzyskać przy użyciu interfejsu API REST platformy Azure.
W kodzie pobierz token dostępu przy użyciu interfejsu API REST z ulubioną biblioteką.
W przypadku tożsamości przypisanej przez użytkownika i tożsamości przypisanej przez system usługa Azure App Service i usługa Azure Container Apps zapewniają wewnętrznie dostępny punkt końcowy REST do pobierania tokenów dla tożsamości zarządzanych przez zdefiniowanie dwóch zmiennych środowiskowych: IDENTITY_ENDPOINT i IDENTITY_HEADER. Aby uzyskać więcej informacji, zobacz Referencja punktu końcowego REST.
Pobierz token dostępu, wysyłając żądanie HTTP GET do punktu końcowego tożsamości i używając go https://ossrdbms-aad.database.windows.net tak jak resource w zapytaniu. W przypadku tożsamości przypisanej przez użytkownika dołącz identyfikator klienta ze zmiennych środowiskowych dodanych przez łącznik usługi w zapytaniu.
Aby uzyskać szczegółowe informacje na temat uzyskiwania tokenu dostępu, zapoznaj się z żądaniem tokenu dostępu do usługi Azure AD . Utwórz żądanie POST zakresu https://ossrdbms-aad.database.windows.net/.default i za pomocą identyfikatora dzierżawy, identyfikatora klienta i wpisu tajnego klienta jednostki usługi ze zmiennych środowiskowych dodanych przez łącznik usługi.
Połącz token dostępu i ciąg połączenia PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector, aby nawiązać połączenie.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
W przypadku języka Ruby nie ma wtyczki ani biblioteki dla połączeń bez hasła. Możesz uzyskać token dostępu dla tożsamości zarządzanej lub jednostki usługi i użyć go jako hasła w celu nawiązania połączenia z bazą danych. Token dostępu można uzyskać przy użyciu interfejsu API REST platformy Azure.
Instalowanie zależności.
gem install pg
W kodzie uzyskaj token dostępu przy użyciu interfejsu API REST i informacji o połączeniu PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Połącz je, aby nawiązać połączenie. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
Usługi Azure App Service i Azure Container Apps zapewniają wewnętrznie dostępny punkt końcowy REST do pobierania tokenów dla tożsamości zarządzanych. Aby uzyskać więcej informacji, zobacz Referencja punktu końcowego 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,
)
Aby uzyskać więcej informacji na temat uzyskiwania tokenu dostępu dla podmiotu usługi, odwołaj się do żądania tokenu dostępu od usługi do usługi w Azure AD.
Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem łącznika usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> utworzenia przez łącznik usługi. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez łącznik usługi powinna wyglądać następująco: aad_<connection name>. Jeśli używasz witryny Azure Portal, wybierz przycisk rozwijania obok Service Type kolumny i pobierz wartość. Jeśli używasz interfejsu wiersza polecenia platformy Azure, sprawdź configurations dane wyjściowe polecenia interfejsu wiersza polecenia.
Następnie wykonaj zapytanie, aby udzielić uprawnienia
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>\";"
Element <owner-username> i <owner-password> jest właścicielem istniejącej tabeli, która może udzielić uprawnień innym osobom.
<aad-username> to użytkownik utworzony przez łącznik usługi. Zastąp je rzeczywistą wartością.
Zweryfikuj wynik za pomocą polecenia :
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
Łańcuch połączenia
Ostrzeżenie
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze wymaga bardzo wysokiego poziomu zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Tego przepływu należy używać tylko wtedy, gdy inne bezpieczniejsze przepływy, takie jak tożsamości zarządzane, nie są opłacalne.
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
| Właściwości aplikacji |
Opis |
Przykładowa wartość |
spring.datasource.url |
Adres URL bazy danych |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nazwa użytkownika bazy danych |
<username> |
spring.datasource.password |
Hasło bazy danych |
<password> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 parametry połączenia |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_NAME |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Hasło bazy danych |
<database-password> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL parametry połączenia |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Hasło bazy danych |
<password> |
AZURE_POSTGRESQL_DATABASE |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numer portu |
5432 |
AZURE_POSTGRESQL_SSL |
Opcja SSL |
true |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Natywny ciąg połączenia PostgreSQL PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia języka Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numer portu |
5432 |
AZURE_POSTGRESQL_SSL |
Opcja SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
Hasło bazy danych |
<password> |
Przykładowy kod
Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu parametrów połączenia.
- Instalowanie zależności zgodnie ze wskazówkami dotyczącymi narzędzia Npgsql
- W kodzie pobierz parametry połączenia PostgreSQL ze zmiennych środowiskowych dodanych przez łącznik usługi.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Zainstaluj zależności zgodnie ze wskazówkami pgJDBC.
- W kodzie pobierz parametry połączenia PostgreSQL ze zmiennych środowiskowych dodanych przez łącznik usługi.
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());
}
- Zainstaluj moduł Spring Cloud Azure Starter JDBC PostgreSQL, dodając następujące zależności do pliku
pom.xml . Znajdź wersję platformy Azure Spring Cloud tutaj.
<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>
- Skonfiguruj aplikację Spring Boot, więcej szczegółów w tej sekcji.
- Zainstaluj zależności zgodnie ze wskazówkami psycopg2.
- W kodzie pobierz informacje o połączeniu PostgreSQL z zmiennych środowiskowych dodanych przez Service Connector.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Zainstaluj zależności zgodnie ze wskazówkami Django i wskazówkami psycopg2.
pip install django
pip install psycopg2
- W pliku ustawień pobierz informacje o bazie danych PostgreSQL ze zmiennych środowiskowych dodanych przez łącznik usługi.
# 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'},
}
}
- Instalowanie zależności.
go get github.com/lib/pq
- W kodzie pobierz parametry połączenia PostgreSQL ze zmiennych środowiskowych dodanych przez łącznik usługi.
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()
- Instalowanie zależności.
npm install pg dotenv
- W kodzie pobierz informacje o połączeniu PostgreSQL z zmiennych środowiskowych dodanych przez 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();
})();
- W kodzie pobierz informacje o połączeniu PostgreSQL z zmiennych środowiskowych dodanych przez Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Instalowanie zależności.
gem install pg
- W kodzie pobierz informacje o połączeniu PostgreSQL z zmiennych środowiskowych dodanych przez 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
Główna jednostka serwisowa
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Sekret klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia .NET PostgreSQL |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Sekret klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Właściwości aplikacji |
Opis |
Przykładowa wartość |
spring.datasource.azure.passwordless-enabled |
Włączanie uwierzytelniania bez hasła |
true |
spring.cloud.azure.credential.client-id |
Identyfikator klienta |
<client-ID> |
spring.cloud.azure.credential.client-secret |
Sekret klienta |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
Twój identyfikator dzierżawy |
<tenant-ID> |
spring.datasource.url |
Adres URL bazy danych |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nazwa użytkownika bazy danych |
username |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Sekret klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 parametry połączenia |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_NAME |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Klucz TAJNY klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Sekret klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL parametry połączenia |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numer portu |
5432 |
AZURE_POSTGRESQL_SSL |
Opcja SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Sekret klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Sekret klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Natywny ciąg połączenia PostgreSQL PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Sekret klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Parametry połączenia języka Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Domyślna nazwa zmiennej środowiskowej |
Opis |
Przykładowa wartość |
AZURE_POSTGRESQL_HOST |
Adres URL hosta bazy danych |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nazwa użytkownika bazy danych |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nazwa bazy danych |
<database-name> |
AZURE_POSTGRESQL_PORT |
Numer portu |
5432 |
AZURE_POSTGRESQL_SSL |
Opcja SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Identyfikator klienta |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Sekret klienta |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Twój identyfikator dzierżawy |
<tenant-ID> |
Przykładowy kod
Poniższe kroki i kod pomogą nawiązać połączenie z usługą Azure Database for PostgreSQL przy użyciu głównego użytkownika usługi.
W przypadku platformy .NET nie ma wtyczki ani biblioteki do obsługi połączeń bez hasła. Token dostępu dla tożsamości zarządzanej lub jednostki usługi można uzyskać przy użyciu biblioteki klienta, takiej jak Azure.Identity. Następnie możesz użyć tokenu dostępu jako hasła, aby nawiązać połączenie z bazą danych. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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();
}
Dodaj następujące zależności w pliku pom.xml :
<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>
Pobierz parametry połączenia ze zmiennych środowiskowych i dodaj nazwę wtyczki, aby nawiązać połączenie z bazą danych:
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);
Aby uzyskać więcej informacji, zobacz następujące zasoby:
Instalowanie zależności.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Uzyskiwanie tokenu dostępu przy użyciu azure-identity biblioteki i używanie tokenu jako hasła. Pobierz informacje o połączeniu ze zmiennych środowiskowych dodanych przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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)
Instalowanie zależności.
pip install azure-identity
Uzyskiwanie tokenu dostępu przy użyciu biblioteki przy użyciu azure-identity zmiennych środowiskowych dodanych przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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')
W pliku ustawień pobierz informacje o bazie danych Azure PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Użyj accessToken metody uzyskanej w poprzednim kroku, aby uzyskać dostęp do bazy danych.
# 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'},
}
}
Instalowanie zależności.
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"
W kodzie uzyskaj token dostępu przy użyciu metody azidentity, a następnie użyj go jako hasła, aby nawiązać połączenie z usługą Azure PostgreSQL wraz z informacjami o połączeniu dostarczonymi przez łącznik usługi. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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()
Instalowanie zależności.
npm install --save @azure/identity
npm install --save pg
W kodzie uzyskaj token dostępu przy użyciu informacji o połączeniu i @azure/identity usłudze PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Połącz je, aby nawiązać połączenie. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
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();
})();
W przypadku języka PHP nie ma wtyczki ani biblioteki dla połączeń bez hasła. Możesz uzyskać token dostępu dla tożsamości zarządzanej lub jednostki usługi i użyć go jako hasła w celu nawiązania połączenia z bazą danych. Token dostępu można uzyskać przy użyciu interfejsu API REST platformy Azure.
W kodzie pobierz token dostępu przy użyciu interfejsu API REST z ulubioną biblioteką.
W przypadku tożsamości przypisanej przez użytkownika i tożsamości przypisanej przez system usługa Azure App Service i usługa Azure Container Apps zapewniają wewnętrznie dostępny punkt końcowy REST do pobierania tokenów dla tożsamości zarządzanych przez zdefiniowanie dwóch zmiennych środowiskowych: IDENTITY_ENDPOINT i IDENTITY_HEADER. Aby uzyskać więcej informacji, zobacz Referencja punktu końcowego REST.
Pobierz token dostępu, wysyłając żądanie HTTP GET do punktu końcowego tożsamości i używając go https://ossrdbms-aad.database.windows.net tak jak resource w zapytaniu. W przypadku tożsamości przypisanej przez użytkownika dołącz identyfikator klienta ze zmiennych środowiskowych dodanych przez łącznik usługi w zapytaniu.
Aby uzyskać szczegółowe informacje na temat uzyskiwania tokenu dostępu, zapoznaj się z żądaniem tokenu dostępu do usługi Azure AD . Utwórz żądanie POST zakresu https://ossrdbms-aad.database.windows.net/.default i za pomocą identyfikatora dzierżawy, identyfikatora klienta i wpisu tajnego klienta jednostki usługi ze zmiennych środowiskowych dodanych przez łącznik usługi.
Połącz token dostępu i ciąg połączenia PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector, aby nawiązać połączenie.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
W przypadku języka Ruby nie ma wtyczki ani biblioteki dla połączeń bez hasła. Możesz uzyskać token dostępu dla tożsamości zarządzanej lub jednostki usługi i użyć go jako hasła w celu nawiązania połączenia z bazą danych. Token dostępu można uzyskać przy użyciu interfejsu API REST platformy Azure.
Instalowanie zależności.
gem install pg
W kodzie uzyskaj token dostępu przy użyciu interfejsu API REST i informacji o połączeniu PostgreSQL ze zmiennych środowiskowych dodanych przez usługę Service Connector. Połącz je, aby nawiązać połączenie. Korzystając z poniższego kodu, odkomentuj część fragmentu kodu odpowiadającą typowi uwierzytelniania, którego chcesz użyć.
Usługi Azure App Service i Azure Container Apps zapewniają wewnętrznie dostępny punkt końcowy REST do pobierania tokenów dla tożsamości zarządzanych. Aby uzyskać więcej informacji, zobacz Referencja punktu końcowego 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,
)
Aby uzyskać więcej informacji na temat uzyskiwania tokenu dostępu dla podmiotu usługi, odwołaj się do żądania tokenu dostępu od usługi do usługi w Azure AD.
Następnie, jeśli utworzono tabele i sekwencje na serwerze elastycznym PostgreSQL przed użyciem łącznika usługi, musisz nawiązać połączenie jako właściciel i udzielić uprawnień do <aad-username> utworzenia przez łącznik usługi. Nazwa użytkownika z parametry połączenia lub konfiguracji ustawionej przez łącznik usługi powinna wyglądać następująco: aad_<connection name>. Jeśli używasz witryny Azure Portal, wybierz przycisk rozwijania obok Service Type kolumny i pobierz wartość. Jeśli używasz interfejsu wiersza polecenia platformy Azure, sprawdź configurations dane wyjściowe polecenia interfejsu wiersza polecenia.
Następnie wykonaj zapytanie, aby udzielić uprawnienia
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>\";"
Element <owner-username> i <owner-password> jest właścicielem istniejącej tabeli, która może udzielić uprawnień innym osobom.
<aad-username> to użytkownik utworzony przez łącznik usługi. Zastąp je rzeczywistą wartością.
Zweryfikuj wynik za pomocą polecenia :
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
Dalsze kroki
Postępuj zgodnie z samouczkami wymienionymi poniżej, aby dowiedzieć się więcej o Service Connector.