Поделиться через


Интеграция Базы данных Azure для PostgreSQL с помощью соединителя сервисов

На этой странице показаны поддерживаемые методы проверки подлинности и клиенты, а также показан пример кода, который можно использовать для подключения База данных Azure для PostgreSQL к другим облачным службам с помощью соединителя служб. Вы по-прежнему можете подключаться к Базе данных Azure для PostgreSQL, используя другие языки программирования без помощи соединителя сервисов. На этой странице также показаны имена и значения переменных среды по умолчанию (или конфигурация Spring Boot), которые вы получаете при создании подключения к службе.

Поддерживаемые службы вычислений

Соединитель служб можно использовать для подключения следующих вычислительных служб к База данных Azure для PostgreSQL:

  • Служба приложений Azure
  • Функции Azure
  • Настройка приложения Azure
  • Azure Spring Apps

Поддерживаемые типы проверки подлинности и типы клиентов

В таблице ниже показано, какие сочетания методов проверки подлинности и клиентов поддерживаются для подключения вычислительной службы к База данных Azure для PostgreSQL с помощью соединителя служб. Значение "Да" указывает, что сочетание поддерживается, а значение "Нет" указывает, что оно не поддерживается.

Тип клиента Управляемое удостоверение, назначаемое системой Управляемое удостоверение, назначаемое пользователем Секрет/строка подключения Субъект-служба
.NET Да Да Да Да
Go (pg) Да Да Да Да
Java (JDBC) Да Да Да Да
Java — Spring Boot (JDBC) Да Да Да Да
Node.js (pg) Да Да Да Да
PHP (нативный) Да Да Да Да
Python (psycopg2) Да Да Да Да
Python-Django Да Да Да Да
Ruby (ruby-pg) Да Да Да Да
Не допускается Да Да Да Да

Эта таблица указывает, что поддерживаются все сочетания типов клиентов и методов проверки подлинности в таблице. Все типы клиентов могут использовать любой из методов проверки подлинности для подключения к База данных Azure для PostgreSQL с помощью соединителя службы.

Примечание.

Назначаемое системой управляемое удостоверение, назначаемое пользователем управляемое удостоверение и субъект-служба, поддерживаются только в Azure CLI.

Имена переменных среды по умолчанию или свойства приложения и пример кода

Ссылайтесь на сведения о подключении и пример кода в следующих таблицах в соответствии с типом проверки подлинности подключения и типом клиента, чтобы подключить вычислительные службы к База данных Azure для PostgreSQL. Дополнительные сведения о соглашениях об именовании см. во внутренней статье соединителя служб.

Управляемое удостоверение, назначаемое системой

Имя переменной среды по умолчанию Description Пример значения
AZURE_POSTGRESQL_CONNECTIONSTRING Строка подключения .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Пример кода

Ознакомьтесь с инструкциями и кодом ниже, чтобы подключиться к База данных 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();
}

Затем, если вы создали таблицы и последовательности в гибком сервере 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

Управляемое удостоверение, назначаемое пользователем

Имя переменной среды по умолчанию Description Пример значения
AZURE_POSTGRESQL_CLIENTID Идентификатор клиента <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Строка подключения .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Пример кода

Ознакомьтесь с инструкциями и кодом ниже, чтобы подключиться к База данных 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();
}

Затем, если вы создали таблицы и последовательности в гибком сервере 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

Строка подключения

Имя переменной среды по умолчанию Description Пример значения
AZURE_POSTGRESQL_CONNECTIONSTRING Строка подключения .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Пример кода

Ознакомьтесь с инструкциями и кодом ниже, чтобы подключиться к База данных Azure для PostgreSQL с помощью строка подключения.

  1. Установите зависимости. Следуйте инструкциям по установке Npgsql
  2. В коде получите строка подключения PostgreSQL из переменных среды, добавленных службой Service Connector. Чтобы задать конфигурации TSL для сервера PostgreSQL, выполните следующие действия.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Субъект-служба

Имя переменной среды по умолчанию Description Пример значения
AZURE_POSTGRESQL_CLIENTID Идентификатор клиента <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Секрет клиента <client-secret>
AZURE_POSTGRESQL_TENANTID Идентификатор клиента <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Строка подключения .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Пример кода

Ознакомьтесь с инструкциями и кодом ниже, чтобы подключиться к База данных 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();
}

Затем, если вы создали таблицы и последовательности в гибком сервере 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

Следующие шаги

Дополнительные сведения о соединителе служб см. в приведенных ниже учебниках.