В этой статье рассматриваются поддерживаемые методы проверки подлинности, клиенты и пример кода, которые можно использовать для подключения приложений к Базе данных Azure для PostgreSQL с помощью соединителя службы. В этой статье также вы найдете имена переменных среды по умолчанию, значения и конфигурацию, полученные при создании подключений к службе.
Поддерживаемые службы вычислений
Соединитель служб можно использовать для подключения следующих вычислительных служб к Базе данных Azure для PostgreSQL:
- Служба приложений Azure
- Приложения контейнеров Azure
- Функции Azure
- Служба Azure Kubernetes (AKS)
- Azure Spring Apps
Поддерживаемые типы проверки подлинности и типы клиентов
В таблице ниже показано, какие сочетания методов проверки подлинности и клиентов поддерживаются для подключения вычислительных служб к Базе данных Azure для PostgreSQL с помощью соединителя служб. Значение "Да" указывает, что сочетание поддерживается, а значение "Нет" указывает, что оно не поддерживается.
Тип клиента |
Назначаемый системой управляемый идентификатор |
Управляемая идентификация, назначаемая пользователем |
Секретный ключ/строка подключения |
Принципал службы |
.СЕТЬ |
Да |
Да |
Да |
Да |
Иди (стр.) |
Да |
Да |
Да |
Да |
Java (JDBC) |
Да |
Да |
Да |
Да |
Java — Spring Boot (JDBC) |
Да |
Да |
Да |
Да |
Node.js (pg) |
Да |
Да |
Да |
Да |
PHP (нативный) |
Да |
Да |
Да |
Да |
Python (psycopg2) |
Да |
Да |
Да |
Да |
Python-Django |
Да |
Да |
Да |
Да |
Ruby (ruby-pg) |
Да |
Да |
Да |
Да |
Отсутствует |
Да |
Да |
Да |
Да |
Замечание
Назначаемое системой управляемое удостоверение, назначаемое пользователем управляемое удостоверение и принципал службы поддерживаются только в Azure CLI.
Имена переменных среды по умолчанию или свойства приложения и пример кода
Ссылайтесь на сведения о подключении и пример кода в следующих таблицах в соответствии с типом проверки подлинности подключения и типом клиента. Для получения дополнительной информации о соглашениях об именовании ознакомьтесь со статьей внутренний механизм соединителя служб.
Назначаемый системой управляемый идентификатор
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения PostgreSQL для .NET |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения PostgreSQL для JDBC |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Свойства приложения |
Описание |
Пример значения |
spring.datasource.azure.passwordless-enabled |
Включение проверки подлинности без пароля |
true |
spring.datasource.url |
URL-адрес базы данных |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Имя пользователя базы данных |
username |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения для psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_NAME |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Имя пользователя базы данных |
<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения для Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_DATABASE |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_PORT |
Номер порта |
5432 |
AZURE_POSTGRESQL_SSL |
Параметр SSL |
true |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Родная строка подключения PHP к PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Подключительная строка Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_DATABASE |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_PORT |
Номер порта |
5432 |
AZURE_POSTGRESQL_SSL |
Параметр SSL |
true |
Пример кода
Ознакомьтесь с инструкциями и кодом ниже, чтобы подключиться к базе данных Azure для PostgreSQL с помощью управляемого удостоверения, назначаемого системой.
Для .NET нет плагина или библиотеки для поддержки подключений без пароля. Токен доступа для управляемой идентичности или сервисного принципала можно получить, например, с помощью клиентской библиотеки Azure.Identity. Затем вы можете использовать маркер доступа в качестве пароля для подключения к базе данных. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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();
}
Добавьте следующие зависимости в файл 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>
Получите строку подключения из переменных среды и добавьте название плагина для подключения к базе данных.
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);
Дополнительные сведения см. в следующих ресурсах:
Установите зависимости.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Получите маркер доступа с помощью библиотеки azure-identity
и используйте маркер в качестве пароля. Получение сведений о подключении из переменных среды, добавленных служебным коннектором. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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)
Установите зависимости.
pip install azure-identity
Получите токен доступа, используя библиотеку azure-identity
и переменные среды, добавленные соединителем службы. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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')
В файле параметров получите сведения о базе данных Azure PostgreSQL из переменных среды, добавленных службой Service Connector. Используйте accessToken
полученный на предыдущем шаге для доступа к базе данных.
# 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'},
}
}
Установите зависимости.
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"
В коде получите маркер доступа с помощью azidentity
, затем используйте его как пароль для подключения к Azure PostgreSQL вместе с информацией о подключении, предоставленной соединителем службы. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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()
Установите зависимости.
npm install --save @azure/identity
npm install --save pg
В коде вы получите токен доступа с помощью @azure/identity
и сведения о подключении PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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();
})();
Для PHP нет плагина или библиотеки для работе без пароля. Маркер доступа для управляемого удостоверения или учетной записи службы можно получить и использовать в качестве пароля для подключения к базе данных. Маркер доступа можно получить с помощью REST API Azure.
В коде получите токен доступа с использованием REST API, используя вашу предпочитаемую библиотеку.
Для удостоверений, назначаемых пользователем, и удостоверений, назначаемых системой, Служба приложений и контейнерные приложения предоставляют внутреннюю конечную точку REST для получения токенов для управляемых удостоверений путем определения двух переменных среды: IDENTITY_ENDPOINT
и IDENTITY_HEADER
. Дополнительные сведения см. в справочнике конечных точек REST.
Получите маркер доступа, выполнив HTTP-запрос GET к конечной точке удостоверения и используя https://ossrdbms-aad.database.windows.net
вместо resource
в запросе. Для идентификации, назначенной пользователем, в запрос также добавьте идентификатор клиента из переменных окружения, добавленных соединителем службы.
Сведения о том, как получить маркер доступа, см. в запросе маркера доступа между службами Azure AD . Сделайте запрос POST в рамках области https://ossrdbms-aad.database.windows.net/.default
с идентификатором арендатора, идентификатором клиента и клиентским секретом служебного принципала, полученными из значений переменных среды, добавленных соединителем службы.
Объедините токен доступа и строку подключения PostgreSQL из переменных среды, которые добавила служба соединителя сервисов, для установления подключения.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Для Ruby нет подключаемого модуля или библиотеки для соединений без пароля. Маркер доступа для управляемого удостоверения или учетной записи службы можно получить и использовать в качестве пароля для подключения к базе данных. Маркер доступа можно получить с помощью REST API Azure.
Установите зависимости.
gem install pg
В коде получите маркер доступа с помощью REST API и сведений о подключении PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
Сервис приложений и приложения в контейнерах предоставляют внутреннюю конечную точку REST для получения токенов для управляемых удостоверений. Дополнительные сведения см. в справочнике конечных точек 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,
)
Дополнительные сведения о получении маркера доступа для субъекта-службы см. в запросе маркера доступа к службе Azure AD .
Затем, если вы создали таблицы и последовательности на гибком сервере PostgreSQL до использования соединителя служб, необходимо подключиться под учетной записью владельца и предоставить разрешения объекту <aad-username>
, созданному соединителем службы. Имя пользователя из строка подключения или конфигурации, заданное соединителем службы, должно выглядеть следующим образомaad_<connection name>
. Если вы используете портал Azure, нажмите кнопку развертывания рядом с столбцом Service Type
и получите значение. Если вы используете Azure CLI, проверьте configurations
в выводе команды CLI.
Затем выполните запрос, чтобы предоставить разрешение
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>
и <owner-password>
, являющиеся владельцами существующих таблиц, могут предоставлять разрешения другим пользователям.
<aad-username>
— это пользователь, созданный с помощью сервисного соединителя. Замените их фактическим значением.
Проверьте результат с помощью команды:
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
Управляемая идентификация, назначаемая пользователем
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения PostgreSQL для .NET |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения PostgreSQL для JDBC |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Свойства приложения |
Описание |
Пример значения |
spring.datasource.azure.passwordless-enabled |
Включение проверки подлинности без пароля |
true |
spring.cloud.azure.credential.client-id |
Идентификатор клиента |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Включение управляемой идентификации клиента |
true |
spring.datasource.url |
URL-адрес базы данных |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Имя пользователя базы данных |
username |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения для psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_NAME |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<<identity-client-ID>> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения для Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_DATABASE |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_PORT |
Номер порта |
5432 |
AZURE_POSTGRESQL_SSL |
Параметр SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Родная строка подключения PHP к PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Подключительная строка Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_DATABASE |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_PORT |
Номер порта |
5432 |
AZURE_POSTGRESQL_SSL |
Параметр SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
Пример кода
Ознакомьтесь с инструкциями и кодом ниже, чтобы подключиться к Базе данных Azure для PostgreSQL с помощью управляемого удостоверения, назначаемого пользователем.
Для .NET нет плагина или библиотеки для поддержки подключений без пароля. Токен доступа для управляемой идентичности или сервисного принципала можно получить, например, с помощью клиентской библиотеки Azure.Identity. Затем вы можете использовать маркер доступа в качестве пароля для подключения к базе данных. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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();
}
Добавьте следующие зависимости в файл 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>
Получите строку подключения из переменных среды и добавьте название плагина для подключения к базе данных.
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);
Дополнительные сведения см. в следующих ресурсах:
Установите зависимости.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Получите маркер доступа с помощью библиотеки azure-identity
и используйте маркер в качестве пароля. Получение сведений о подключении из переменных среды, добавленных служебным коннектором. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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)
Установите зависимости.
pip install azure-identity
Получите токен доступа, используя библиотеку azure-identity
и переменные среды, добавленные соединителем службы. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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')
В файле параметров получите сведения о базе данных Azure PostgreSQL из переменных среды, добавленных службой Service Connector. Используйте accessToken
полученный на предыдущем шаге для доступа к базе данных.
# 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'},
}
}
Установите зависимости.
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"
В коде получите маркер доступа с помощью azidentity
, затем используйте его как пароль для подключения к Azure PostgreSQL вместе с информацией о подключении, предоставленной соединителем службы. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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()
Установите зависимости.
npm install --save @azure/identity
npm install --save pg
В коде вы получите токен доступа с помощью @azure/identity
и сведения о подключении PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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();
})();
Для PHP нет плагина или библиотеки для работе без пароля. Маркер доступа для управляемого удостоверения или учетной записи службы можно получить и использовать в качестве пароля для подключения к базе данных. Маркер доступа можно получить с помощью REST API Azure.
В коде получите токен доступа с использованием REST API, используя вашу предпочитаемую библиотеку.
Для удостоверений, назначаемых пользователем, и удостоверений, назначаемых системой, Служба приложений и контейнерные приложения предоставляют внутреннюю конечную точку REST для получения токенов для управляемых удостоверений путем определения двух переменных среды: IDENTITY_ENDPOINT
и IDENTITY_HEADER
. Дополнительные сведения см. в справочнике конечных точек REST.
Получите маркер доступа, выполнив HTTP-запрос GET к конечной точке удостоверения и используя https://ossrdbms-aad.database.windows.net
вместо resource
в запросе. Для идентификации, назначенной пользователем, в запрос также добавьте идентификатор клиента из переменных окружения, добавленных соединителем службы.
Сведения о том, как получить маркер доступа, см. в запросе маркера доступа между службами Azure AD . Сделайте запрос POST в рамках области https://ossrdbms-aad.database.windows.net/.default
с идентификатором арендатора, идентификатором клиента и клиентским секретом служебного принципала, полученными из значений переменных среды, добавленных соединителем службы.
Объедините токен доступа и строку подключения PostgreSQL из переменных среды, которые добавила служба соединителя сервисов, для установления подключения.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Для Ruby нет подключаемого модуля или библиотеки для соединений без пароля. Маркер доступа для управляемого удостоверения или учетной записи службы можно получить и использовать в качестве пароля для подключения к базе данных. Маркер доступа можно получить с помощью REST API Azure.
Установите зависимости.
gem install pg
В коде получите маркер доступа с помощью REST API и сведений о подключении PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
Сервис приложений и приложения в контейнерах предоставляют внутреннюю конечную точку REST для получения токенов для управляемых удостоверений. Дополнительные сведения см. в справочнике конечных точек 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,
)
Дополнительные сведения о получении маркера доступа для субъекта-службы см. в запросе маркера доступа к службе Azure AD .
Затем, если вы создали таблицы и последовательности на гибком сервере PostgreSQL до использования соединителя служб, необходимо подключиться под учетной записью владельца и предоставить разрешения объекту <aad-username>
, созданному соединителем службы. Имя пользователя из строка подключения или конфигурации, заданное соединителем службы, должно выглядеть следующим образомaad_<connection name>
. Если вы используете портал Azure, нажмите кнопку развертывания рядом с столбцом Service Type
и получите значение. Если вы используете Azure CLI, проверьте configurations
в выводе команды CLI.
Затем выполните запрос, чтобы предоставить разрешение
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>
и <owner-password>
, являющиеся владельцами существующих таблиц, могут предоставлять разрешения другим пользователям.
<aad-username>
— это пользователь, созданный с помощью сервисного соединителя. Замените их фактическим значением.
Проверьте результат с помощью команды:
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
строка подключения
Предупреждение
Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Поток проверки подлинности, описанный в этой процедуре, требует очень высокого уровня доверия к приложению и несет риски, которые отсутствуют в других потоках. Этот поток следует использовать только в том случае, если другие более безопасные потоки, такие как идентификации с управлением, не являются приемлемыми.
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения PostgreSQL для .NET |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения PostgreSQL для JDBC |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
Свойства приложения |
Описание |
Пример значения |
spring.datasource.url |
URL-адрес базы данных |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Имя пользователя базы данных |
<username> |
spring.datasource.password |
Пароль базы данных |
<password> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения для psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_NAME |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Пароль базы данных |
<database-password> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения для Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Пароль базы данных |
<password> |
AZURE_POSTGRESQL_DATABASE |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_PORT |
Номер порта |
5432 |
AZURE_POSTGRESQL_SSL |
Параметр SSL |
true |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Родная строка подключения PHP к PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Подключительная строка Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_DATABASE |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_PORT |
Номер порта |
5432 |
AZURE_POSTGRESQL_SSL |
Параметр SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
Пароль базы данных |
<password> |
Пример кода
Чтобы подключиться к Базе данных Azure для PostgreSQL с помощью строки подключения, см. приведенные ниже действия и код.
- Установите зависимости в соответствии с руководством Npgsql
- В коде получите строку подключения к PostgreSQL из переменных окружения, добавленных Service Connector.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Установите зависимости согласно руководству pgJDBC.
- В коде получите строку подключения к PostgreSQL из переменных окружения, добавленных Service Connector.
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());
}
- Установите модуль Spring Cloud Azure Starter JDBC PostgreSQL, добавив следующие зависимости в файл
pom.xml
. Найдите версию 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>
- Настройте приложение Spring Boot, дополнительные сведения в этом разделе .
- Установите зависимости в соответствии с руководством psycopg2.
- В коде получите информацию о подключении к PostgreSQL из переменных среды, которые добавляются соединителем сервисов.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Установите зависимости в соответствии с руководством Django и руководством psycopg2.
pip install django
pip install psycopg2
- В файле параметров получите сведения о базе данных PostgreSQL из переменных среды, добавленных соединителем службы.
# 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'},
}
}
- Установите зависимости.
go get github.com/lib/pq
- В коде получите строку подключения к PostgreSQL из переменных окружения, добавленных Service Connector.
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()
- Установите зависимости.
npm install pg dotenv
- В коде получите информацию о подключении к PostgreSQL из переменных среды, которые добавляются соединителем сервисов.
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();
})();
- В коде получите информацию о подключении к PostgreSQL из переменных среды, которые добавляются соединителем сервисов.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Установите зависимости.
gem install pg
- В коде получите информацию о подключении к PostgreSQL из переменных среды, которые добавляются соединителем сервисов.
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
Принципал службы
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения PostgreSQL для .NET |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения PostgreSQL для JDBC |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Свойства приложения |
Описание |
Пример значения |
spring.datasource.azure.passwordless-enabled |
Включение проверки подлинности без пароля |
true |
spring.cloud.azure.credential.client-id |
Идентификатор клиента |
<client-ID> |
spring.cloud.azure.credential.client-secret |
Секрет клиента |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
Идентификатор клиента |
<tenant-ID> |
spring.datasource.url |
URL-адрес базы данных |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Имя пользователя базы данных |
username |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения для psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_NAME |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Строка подключения для Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_DATABASE |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_PORT |
Номер порта |
5432 |
AZURE_POSTGRESQL_SSL |
Параметр SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Родная строка подключения PHP к PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Подключительная строка Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Имя переменной среды по умолчанию |
Описание |
Пример значения |
AZURE_POSTGRESQL_HOST |
URL-адрес узла базы данных |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Имя пользователя базы данных |
<username> |
AZURE_POSTGRESQL_DATABASE |
Название базы данных |
<database-name> |
AZURE_POSTGRESQL_PORT |
Номер порта |
5432 |
AZURE_POSTGRESQL_SSL |
Параметр SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Идентификатор клиента |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Секрет клиента |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Идентификатор клиента |
<tenant-ID> |
Пример кода
Ознакомьтесь с инструкциями и кодом ниже, чтобы подключиться к базе данных Azure для PostgreSQL с помощью служебного принципала.
Для .NET нет плагина или библиотеки для поддержки подключений без пароля. Токен доступа для управляемой идентичности или сервисного принципала можно получить, например, с помощью клиентской библиотеки Azure.Identity. Затем вы можете использовать маркер доступа в качестве пароля для подключения к базе данных. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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();
}
Добавьте следующие зависимости в файл 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>
Получите строку подключения из переменных среды и добавьте название плагина для подключения к базе данных.
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);
Дополнительные сведения см. в следующих ресурсах:
Установите зависимости.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Получите маркер доступа с помощью библиотеки azure-identity
и используйте маркер в качестве пароля. Получение сведений о подключении из переменных среды, добавленных служебным коннектором. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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)
Установите зависимости.
pip install azure-identity
Получите токен доступа, используя библиотеку azure-identity
и переменные среды, добавленные соединителем службы. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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')
В файле параметров получите сведения о базе данных Azure PostgreSQL из переменных среды, добавленных службой Service Connector. Используйте accessToken
полученный на предыдущем шаге для доступа к базе данных.
# 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'},
}
}
Установите зависимости.
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"
В коде получите маркер доступа с помощью azidentity
, затем используйте его как пароль для подключения к Azure PostgreSQL вместе с информацией о подключении, предоставленной соединителем службы. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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()
Установите зависимости.
npm install --save @azure/identity
npm install --save pg
В коде вы получите токен доступа с помощью @azure/identity
и сведения о подключении PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
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();
})();
Для PHP нет плагина или библиотеки для работе без пароля. Маркер доступа для управляемого удостоверения или учетной записи службы можно получить и использовать в качестве пароля для подключения к базе данных. Маркер доступа можно получить с помощью REST API Azure.
В коде получите токен доступа с использованием REST API, используя вашу предпочитаемую библиотеку.
Для удостоверений, назначаемых пользователем, и удостоверений, назначаемых системой, Служба приложений и контейнерные приложения предоставляют внутреннюю конечную точку REST для получения токенов для управляемых удостоверений путем определения двух переменных среды: IDENTITY_ENDPOINT
и IDENTITY_HEADER
. Дополнительные сведения см. в справочнике конечных точек REST.
Получите маркер доступа, выполнив HTTP-запрос GET к конечной точке удостоверения и используя https://ossrdbms-aad.database.windows.net
вместо resource
в запросе. Для идентификации, назначенной пользователем, в запрос также добавьте идентификатор клиента из переменных окружения, добавленных соединителем службы.
Сведения о том, как получить маркер доступа, см. в запросе маркера доступа между службами Azure AD . Сделайте запрос POST в рамках области https://ossrdbms-aad.database.windows.net/.default
с идентификатором арендатора, идентификатором клиента и клиентским секретом служебного принципала, полученными из значений переменных среды, добавленных соединителем службы.
Объедините токен доступа и строку подключения PostgreSQL из переменных среды, которые добавила служба соединителя сервисов, для установления подключения.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Для Ruby нет подключаемого модуля или библиотеки для соединений без пароля. Маркер доступа для управляемого удостоверения или учетной записи службы можно получить и использовать в качестве пароля для подключения к базе данных. Маркер доступа можно получить с помощью REST API Azure.
Установите зависимости.
gem install pg
В коде получите маркер доступа с помощью REST API и сведений о подключении PostgreSQL из переменных среды, добавленных службой Service Connector. Объедините их для установления соединения. При использовании приведенного ниже кода удалите комментарий с той части фрагмента, которая соответствует типу проверки подлинности, который вы хотите использовать.
Сервис приложений и приложения в контейнерах предоставляют внутреннюю конечную точку REST для получения токенов для управляемых удостоверений. Дополнительные сведения см. в справочнике конечных точек 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,
)
Дополнительные сведения о получении маркера доступа для субъекта-службы см. в запросе маркера доступа к службе Azure AD .
Затем, если вы создали таблицы и последовательности на гибком сервере PostgreSQL до использования соединителя служб, необходимо подключиться под учетной записью владельца и предоставить разрешения объекту <aad-username>
, созданному соединителем службы. Имя пользователя из строка подключения или конфигурации, заданное соединителем службы, должно выглядеть следующим образомaad_<connection name>
. Если вы используете портал Azure, нажмите кнопку развертывания рядом с столбцом Service Type
и получите значение. Если вы используете Azure CLI, проверьте configurations
в выводе команды CLI.
Затем выполните запрос, чтобы предоставить разрешение
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>
и <owner-password>
, являющиеся владельцами существующих таблиц, могут предоставлять разрешения другим пользователям.
<aad-username>
— это пользователь, созданный с помощью сервисного соединителя. Замените их фактическим значением.
Проверьте результат с помощью команды:
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
Дальнейшие шаги
Чтобы узнать больше о Service Connector, ознакомьтесь с учебными материалами ниже.