Integración de Azure Database for PostgreSQL en Service Connector

En esta página se muestran los métodos de autenticación y los clientes admitidos y se muestra el código de ejemplo que puede usar para conectar Azure Database for PostgreSQL a otros servicios en la nube mediante Service Conectar or. Es posible que todavía pueda conectarse a Azure Database for PostgreSQL en otros lenguajes de programación sin usar Service Connector. Esta página también muestra los nombres y valores predeterminados de las variables de entorno o la configuración de Spring Boot que se obtiene al crear la conexión de servicio.

Servicios de proceso admitidos

Service Conectar or se puede usar para conectar los siguientes servicios de proceso a Azure Database for PostgreSQL:

  • Azure App Service
  • Azure Functions
  • Azure App Configuration
  • Azure Spring Apps

Tipos de autenticación y tipos de cliente admitidos

En la tabla siguiente se muestran las combinaciones de métodos de autenticación y clientes que se admiten para conectar el servicio de proceso a Azure Database for PostgreSQL mediante service Conectar or. Un valor "Sí" indica que se admite la combinación, mientras que "No" indica que no se admite.

Tipo de cliente Identidad administrada asignada por el sistema Identidad administrada asignada por el usuario Secreto/cadena de conexión Entidad de servicio
.NET
Go (pg)
Java (JDBC)
Java - Spring Boot (JDBC)
Node.js (pg)
PHP (nativo)
Python (psycopg2)
Python-Django
Ruby (ruby-pg)
None

Esta tabla indica que se admiten todas las combinaciones de tipos de cliente y métodos de autenticación de la tabla. Todos los tipos de cliente pueden usar cualquiera de los métodos de autenticación para conectarse a Azure Database for PostgreSQL mediante Service Conectar or.

Nota:

La identidad administrada asignada por el sistema, la identidad administrada asignada por el usuario y la entidad de servicio solo se admiten en la CLI de Azure.

Nombres de variables de entorno predeterminados o propiedades de aplicación y código de ejemplo

Consulte los detalles de conexión y el código de ejemplo de las tablas siguientes, según el tipo de autenticación y el tipo de cliente de la conexión, para conectar los servicios de proceso a Azure Database for PostgreSQL. Para obtener más información sobre las convenciones de nomenclatura, consulte el artículo Service Conectar or internals (Interno de service Conectar).

Identidad administrada asignada por el sistema

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
AZURE_POSTGRESQL_CONNECTIONSTRING Cadena de conexión de .NET para PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Código de ejemplo

Consulte los pasos y el código siguientes para conectarse a Azure Database for PostgreSQL mediante una identidad administrada asignada por el sistema.

Para .NET, no hay un complemento ni una biblioteca que admita las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio utilizando una biblioteca de cliente como Azure.Identity. Luego puede usar el token de acceso como contraseña para conectarse a la base de datos. Al usar el código siguiente, quite la marca de comentario de la parte del fragmento de código para el tipo de autenticación que desea usar.

using Azure.Identity;
using Azure.Core;
using Npgsql;

// Uncomment the following lines according to the authentication type.
// 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();
}

A continuación, si ha creado tablas y secuencias en el servidor flexible de PostgreSQL antes de usar el conector de servicio, debe conectarse como propietario y conceder permiso a <aad-username>, que se crea mediante el conector de servicio. El nombre de usuario de la cadena de conexión o la configuración establecida por el conector de servicio debería parecerse a aad_<connection name>. Si usa Azure Portal, seleccione el botón expandir situado junto a la columna Service Type y obtenga el valor. Si usa la CLI de Azure, compruebe configurations en la salida del comando de la CLI.

A continuación, ejecute la consulta para conceder permiso

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> y <owner-password> es el propietario de la tabla existente que puede conceder permisos a otros usuarios. <aad-username> es el usuario creado por Service Connector. Reemplácelos por el valor real.

Valide el resultado con el comando:

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

Identidad administrada asignada por el usuario

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
AZURE_POSTGRESQL_CLIENTID Id. de cliente <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Cadena de conexión de .NET para PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Código de ejemplo

Consulte los pasos y el código siguientes para conectarse a Azure Database for PostgreSQL mediante una identidad administrada asignada por el usuario.

Para .NET, no hay un complemento ni una biblioteca que admita las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio utilizando una biblioteca de cliente como Azure.Identity. Luego puede usar el token de acceso como contraseña para conectarse a la base de datos. Al usar el código siguiente, quite la marca de comentario de la parte del fragmento de código para el tipo de autenticación que desea usar.

using Azure.Identity;
using Azure.Core;
using Npgsql;

// Uncomment the following lines according to the authentication type.
// 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();
}

A continuación, si ha creado tablas y secuencias en el servidor flexible de PostgreSQL antes de usar el conector de servicio, debe conectarse como propietario y conceder permiso a <aad-username>, que se crea mediante el conector de servicio. El nombre de usuario de la cadena de conexión o la configuración establecida por el conector de servicio debería parecerse a aad_<connection name>. Si usa Azure Portal, seleccione el botón expandir situado junto a la columna Service Type y obtenga el valor. Si usa la CLI de Azure, compruebe configurations en la salida del comando de la CLI.

A continuación, ejecute la consulta para conceder permiso

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> y <owner-password> es el propietario de la tabla existente que puede conceder permisos a otros usuarios. <aad-username> es el usuario creado por Service Connector. Reemplácelos por el valor real.

Valide el resultado con el comando:

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

Cadena de conexión

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
AZURE_POSTGRESQL_CONNECTIONSTRING Cadena de conexión de .NET para PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Código de ejemplo

Consulte los pasos y el código siguientes para conectarse a Azure Database for PostgreSQL mediante un cadena de conexión.

  1. Instale las dependencias. Siga las instrucciones para instalar Npgsql.
  2. En el código, obtenga el cadena de conexión postgreSQL de las variables de entorno agregadas por service Conectar or service. Para establecer configuraciones de TSL para el servidor postgreSQL, consulte estos pasos.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Entidad de servicio

Nombre de la variable de entorno predeterminado Descripción Valor de ejemplo
AZURE_POSTGRESQL_CLIENTID Id. de cliente <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Secreto de cliente <client-secret>
AZURE_POSTGRESQL_TENANTID El identificador de inquilino <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING Cadena de conexión de .NET para PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Código de ejemplo

Consulte los pasos y el código siguientes para conectarse a Azure Database for PostgreSQL mediante una entidad de servicio.

Para .NET, no hay un complemento ni una biblioteca que admita las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio utilizando una biblioteca de cliente como Azure.Identity. Luego puede usar el token de acceso como contraseña para conectarse a la base de datos. Al usar el código siguiente, quite la marca de comentario de la parte del fragmento de código para el tipo de autenticación que desea usar.

using Azure.Identity;
using Azure.Core;
using Npgsql;

// Uncomment the following lines according to the authentication type.
// 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();
}

A continuación, si ha creado tablas y secuencias en el servidor flexible de PostgreSQL antes de usar el conector de servicio, debe conectarse como propietario y conceder permiso a <aad-username>, que se crea mediante el conector de servicio. El nombre de usuario de la cadena de conexión o la configuración establecida por el conector de servicio debería parecerse a aad_<connection name>. Si usa Azure Portal, seleccione el botón expandir situado junto a la columna Service Type y obtenga el valor. Si usa la CLI de Azure, compruebe configurations en la salida del comando de la CLI.

A continuación, ejecute la consulta para conceder permiso

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> y <owner-password> es el propietario de la tabla existente que puede conceder permisos a otros usuarios. <aad-username> es el usuario creado por Service Connector. Reemplácelos por el valor real.

Valide el resultado con el comando:

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

Pasos siguientes

Para más información sobre Service Connector, siga los tutoriales que se enumeran a continuación.