En este artículo se describen los métodos de autenticación, los clientes y el código de ejemplo admitidos que puede usar para conectar las aplicaciones a Azure Database for PostgreSQL mediante Service Connector. En este artículo, también encontrará nombres de variables de entorno, valores y configuración predeterminados obtenidos al crear conexiones de servicio.
Servicios de proceso admitidos
Service Connector puede utilizarse para conectar los siguientes servicios informáticos a Azure Database for PostgreSQL:
- Azure App Service
- Azure Container Apps (Aplicaciones de Contenedores de Azure)
- Funciones de Azure
- Azure Kubernetes Service (AKS)
- Aplicaciones de Azure Spring
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 los servicios de proceso a Azure Database for PostgreSQL mediante Service Connector. 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 |
.RED |
Sí |
Sí |
Sí |
Sí |
Go (pg) |
Sí |
Sí |
Sí |
Sí |
Java (JDBC) |
Sí |
Sí |
Sí |
Sí |
Java: Spring Boot (JDBC) |
Sí |
Sí |
Sí |
Sí |
Node.js (pg) |
Sí |
Sí |
Sí |
Sí |
PHP (nativo) |
Sí |
Sí |
Sí |
Sí |
Python (psycopg2) |
Sí |
Sí |
Sí |
Sí |
Python-Django |
Sí |
Sí |
Sí |
Sí |
Ruby (ruby-pg) |
Sí |
Sí |
Sí |
Sí |
Ninguno |
Sí |
Sí |
Sí |
Sí |
Nota:
La identidad administrada asignada por el sistema, la identidad administrada asignada por el usuario y la entidad de seguridad de servicio sólo se admiten en la Azure CLI.
Nombres de variables de entorno predeterminados o propiedades de aplicación y código de ejemplo
Haga referencia a los detalles de conexión y el código de ejemplo en las tablas siguientes, según el tipo de autenticación y el tipo de cliente de la conexión. Para más información sobre las convenciones de nomenclatura, consulte el artículo sobre los elementos internos del conector de servicio.
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>; |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadena de conexión de JDBC para PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Propiedades de la aplicación |
Descripción |
Valor de ejemplo |
spring.datasource.azure.passwordless-enabled |
Habilitar la autenticación sin contraseña |
true |
spring.datasource.url |
Dirección URL de la base de datos |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nombre de usuario de la base de datos |
username |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadena de conexión de psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_NAME |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nombre de usuario de la base de datos |
<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ir a la cadena de conexión PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número de puerto |
5432 |
AZURE_POSTGRESQL_SSL |
Opción SSL |
true |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadena de conexión PostgreSQL nativa de PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadena de conexión Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número de puerto |
5432 |
AZURE_POSTGRESQL_SSL |
Opción SSL |
true |
Código de ejemplo
Consulte los pasos y el código siguientes para conectarse a Azure Database for PostgreSQL utilizando 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 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();
}
Agregue las siguientes dependencias al archivo 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>
Obtenga la cadena de conexión de las variables de entorno y agregue el nombre del complemento para conectarse a la base de datos:
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);
Para obtener más información, vea los siguientes recursos:
Instale las dependencias.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenga el token de acceso mediante la biblioteca azure-identity
y use el token como contraseña. Obtenga información de conexión de las variables de entorno agregadas por el conector de servicio. 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.
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)
Instale las dependencias.
pip install azure-identity
Obtenga el token de acceso a través de la biblioteca azure-identity
mediante variables de entorno agregadas por el conector de servicio. 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.
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')
En el archivo de configuración, obtenga información de la base de datos de Azure PostgreSQL de las variables de entorno agregadas por el servicio del conector de servicio. Use accessToken
adquirido en el paso anterior para acceder a la base de datos.
# 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'},
}
}
Instale las dependencias.
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"
En el código, obtenga el token de acceso mediante azidentity
y úselo como contraseña para conectarse a Azure PostgreSQL junto con la información de conexión proporcionada por el conector de servicio. 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.
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()
Instale las dependencias.
npm install --save @azure/identity
npm install --save pg
En el código, obtenga el token de acceso mediante @azure/identity
y la información de conexión de PostgreSQL a partir de variables de entorno agregadas por el conector de servicio. Combínelos para establecer la conexión. 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.
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();
})();
Para PHP, no hay un complemento ni una biblioteca para las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio y usarla como contraseña para conectarse a la base de datos. El token de acceso se puede adquirir mediante la API REST de Azure.
En el código, obtenga el token de acceso mediante la API REST con su biblioteca favorita.
Para la identidad asignada por el usuario y la identidad asignada por el sistema, App Service y Container Apps proporcionan un punto de conexión REST accesible internamente para recuperar tokens para identidades administradas mediante la definición de dos variables de entorno: IDENTITY_ENDPOINT
y IDENTITY_HEADER
. Para obtener más información, consulte Referencia de puntos de conexión de REST.
Obtenga el token de acceso mediante la realización de una solicitud HTTP GET al punto de conexión de identidad y use https://ossrdbms-aad.database.windows.net
como resource
en la consulta. Para la identidad asignada por el usuario, incluya también el identificador de cliente de las variables de entorno agregadas por el conector de servicio en la consulta.
Para la entidad de servicio, consulte la solicitud de token de acceso de servicio a servicio de Azure AD para ver los detalles de cómo adquirir el token de acceso. Haga que POST solicite el ámbito de https://ossrdbms-aad.database.windows.net/.default
y con el identificador de inquilino, el identificador de cliente y el secreto de cliente de la entidad de servicio de las variables de entorno agregadas por el conector de servicio.
Combine el token de acceso y la cadena de conexión de PostgreSQL de las variables de entorno agregadas por el servicio Service Connector para establecer la conexión.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Para Ruby, no hay un complemento ni una biblioteca para las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio y usarla como contraseña para conectarse a la base de datos. El token de acceso se puede adquirir mediante la API REST de Azure.
Instale las dependencias.
gem install pg
En el código, obtenga el token de acceso mediante la API REST y la información de conexión de PostgreSQL a partir de variables de entorno agregadas por el conector de servicio. Combínelos para establecer la conexión. 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.
App Service y Container Apps proporcionan un punto de conexión REST accesible internamente para recuperar tokens para identidades administradas. Para obtener más información, consulte Referencia de puntos de conexión de 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,
)
Para la entidad de servicio, consulte la solicitud de token de acceso de servicio a servicio de Azure AD para ver los detalles de cómo adquirir el token de acceso.
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>; |
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 JDBC para PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Propiedades de la aplicación |
Descripción |
Valor de ejemplo |
spring.datasource.azure.passwordless-enabled |
Habilitar la autenticación sin contraseña |
true |
spring.cloud.azure.credential.client-id |
Id. de cliente |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Habilitar la identidad administrada por el cliente |
true |
spring.datasource.url |
Dirección URL de la base de datos |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nombre de usuario de la base de datos |
username |
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 psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_NAME |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Id. de cliente |
<<identity-client-ID>> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CLIENTID |
Id. de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ir a la cadena de conexión PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número de puerto |
5432 |
AZURE_POSTGRESQL_SSL |
Opción SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Id. de cliente |
<identity-client-ID> |
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 PostgreSQL nativa de PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
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 Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número de puerto |
5432 |
AZURE_POSTGRESQL_SSL |
Opción SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Id. de cliente |
<identity-client-ID> |
Código de ejemplo
Consulte los pasos y el código siguientes para conectarse a Azure Database for PostgreSQL utilizando 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 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();
}
Agregue las siguientes dependencias al archivo 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>
Obtenga la cadena de conexión de las variables de entorno y agregue el nombre del complemento para conectarse a la base de datos:
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);
Para obtener más información, vea los siguientes recursos:
Instale las dependencias.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenga el token de acceso mediante la biblioteca azure-identity
y use el token como contraseña. Obtenga información de conexión de las variables de entorno agregadas por el conector de servicio. 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.
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)
Instale las dependencias.
pip install azure-identity
Obtenga el token de acceso a través de la biblioteca azure-identity
mediante variables de entorno agregadas por el conector de servicio. 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.
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')
En el archivo de configuración, obtenga información de la base de datos de Azure PostgreSQL de las variables de entorno agregadas por el servicio del conector de servicio. Use accessToken
adquirido en el paso anterior para acceder a la base de datos.
# 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'},
}
}
Instale las dependencias.
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"
En el código, obtenga el token de acceso mediante azidentity
y úselo como contraseña para conectarse a Azure PostgreSQL junto con la información de conexión proporcionada por el conector de servicio. 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.
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()
Instale las dependencias.
npm install --save @azure/identity
npm install --save pg
En el código, obtenga el token de acceso mediante @azure/identity
y la información de conexión de PostgreSQL a partir de variables de entorno agregadas por el conector de servicio. Combínelos para establecer la conexión. 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.
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();
})();
Para PHP, no hay un complemento ni una biblioteca para las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio y usarla como contraseña para conectarse a la base de datos. El token de acceso se puede adquirir mediante la API REST de Azure.
En el código, obtenga el token de acceso mediante la API REST con su biblioteca favorita.
Para la identidad asignada por el usuario y la identidad asignada por el sistema, App Service y Container Apps proporcionan un punto de conexión REST accesible internamente para recuperar tokens para identidades administradas mediante la definición de dos variables de entorno: IDENTITY_ENDPOINT
y IDENTITY_HEADER
. Para obtener más información, consulte Referencia de puntos de conexión de REST.
Obtenga el token de acceso mediante la realización de una solicitud HTTP GET al punto de conexión de identidad y use https://ossrdbms-aad.database.windows.net
como resource
en la consulta. Para la identidad asignada por el usuario, incluya también el identificador de cliente de las variables de entorno agregadas por el conector de servicio en la consulta.
Para la entidad de servicio, consulte la solicitud de token de acceso de servicio a servicio de Azure AD para ver los detalles de cómo adquirir el token de acceso. Haga que POST solicite el ámbito de https://ossrdbms-aad.database.windows.net/.default
y con el identificador de inquilino, el identificador de cliente y el secreto de cliente de la entidad de servicio de las variables de entorno agregadas por el conector de servicio.
Combine el token de acceso y la cadena de conexión de PostgreSQL de las variables de entorno agregadas por el servicio Service Connector para establecer la conexión.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Para Ruby, no hay un complemento ni una biblioteca para las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio y usarla como contraseña para conectarse a la base de datos. El token de acceso se puede adquirir mediante la API REST de Azure.
Instale las dependencias.
gem install pg
En el código, obtenga el token de acceso mediante la API REST y la información de conexión de PostgreSQL a partir de variables de entorno agregadas por el conector de servicio. Combínelos para establecer la conexión. 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.
App Service y Container Apps proporcionan un punto de conexión REST accesible internamente para recuperar tokens para identidades administradas. Para obtener más información, consulte Referencia de puntos de conexión de 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,
)
Para la entidad de servicio, consulte la solicitud de token de acceso de servicio a servicio de Azure AD para ver los detalles de cómo adquirir el token de acceso.
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
Advertencia
Microsoft recomienda usar el flujo de autenticación más seguro disponible. El flujo de autenticación que se describe en este procedimiento requiere un alto grado de confianza en la aplicación y conlleva riesgos que no están presentes en otros flujos. Solo debe usar este flujo cuando otros flujos más seguros, como las identidades administradas, no sean viables.
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>; |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadena de conexión de JDBC para PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
Propiedades de la aplicación |
Descripción |
Valor de ejemplo |
spring.datasource.url |
Dirección URL de la base de datos |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nombre de usuario de la base de datos |
<username> |
spring.datasource.password |
Contraseña de la base de datos |
<password> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadena de conexión de psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_NAME |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Contraseña de la base de datos |
<database-password> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ir a la cadena de conexión PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Contraseña de la base de datos |
<password> |
AZURE_POSTGRESQL_DATABASE |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número de puerto |
5432 |
AZURE_POSTGRESQL_SSL |
Opción SSL |
true |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadena de conexión PostgreSQL nativa de PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Cadena de conexión Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número de puerto |
5432 |
AZURE_POSTGRESQL_SSL |
Opción SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
Contraseña de la base de datos |
<password> |
Código de ejemplo
Consulte los pasos y el código siguientes para conectarse a Azure Database for PostgreSQL utilizando una cadena de conexión.
- Instalación de dependencias siguiendo las instrucciones de Npgsql
- En el código, obtenga la cadena de conexión de PostgreSQL de las variables de entorno agregadas por Service Connector.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- Instale las dependencias siguiendo las instrucciones de pgJDBC.
- En el código, obtenga la cadena de conexión de PostgreSQL de las variables de entorno agregadas por 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());
}
- Instale el módulo Spring Cloud Azure Starter JDBC PostgreSQL agregando las siguientes dependencias a su archivo
pom.xml
. Encuentre la versión de Spring Cloud Azure aquí.
<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>
- Configure una aplicación de Spring Boot, más detalles en esta sección.
- Instale las dependencias siguiendo las instrucciones de psycopg2.
- En el código, obtenga la información de conexión de PostgreSQL de las variables de entorno agregadas por Service Connector.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Instale las dependencias siguiendo las instrucciones de Django y psycopg2.
pip install django
pip install psycopg2
- En el archivo de configuración, obtenga la información de la base de datos postgreSQL de las variables de entorno agregadas por Service Connector.
# 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'},
}
}
- Instale las dependencias.
go get github.com/lib/pq
- En el código, obtenga la cadena de conexión de PostgreSQL de las variables de entorno agregadas por 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()
- Instale las dependencias.
npm install pg dotenv
- En el código, obtenga la información de conexión de PostgreSQL de las variables de entorno agregadas por Service Connector.
import { Client } from 'pg';
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: process.env.AZURE_POSTGRESQL_PASSWORD,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
- En el código, obtenga la información de conexión de PostgreSQL de las variables de entorno agregadas por Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Instale las dependencias.
gem install pg
- En el código, obtenga la información de conexión de PostgreSQL de las variables de entorno agregadas por Service Connector.
require 'pg'
require 'dotenv/load'
begin
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'],
)
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
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>; |
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 JDBC para PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
Propiedades de la aplicación |
Descripción |
Valor de ejemplo |
spring.datasource.azure.passwordless-enabled |
Habilitar la autenticación sin contraseña |
true |
spring.cloud.azure.credential.client-id |
Id. de cliente |
<client-ID> |
spring.cloud.azure.credential.client-secret |
Secreto de cliente |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
El identificador de inquilino |
<tenant-ID> |
spring.datasource.url |
Dirección URL de la base de datos |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nombre de usuario de la base de datos |
username |
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 psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_NAME |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_CLIENTID |
Id. de cliente |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
El SECRET de su cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
El identificador de inquilino |
<tenant-ID> |
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 |
Ir a la cadena de conexión PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número de puerto |
5432 |
AZURE_POSTGRESQL_SSL |
Opción SSL |
true |
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> |
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 PostgreSQL nativa de PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
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 Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
Nombre de la variable de entorno predeterminado |
Descripción |
Valor de ejemplo |
AZURE_POSTGRESQL_HOST |
Dirección URL del host de base de datos |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nombre de usuario de la base de datos |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nombre de la base de datos |
<database-name> |
AZURE_POSTGRESQL_PORT |
Número de puerto |
5432 |
AZURE_POSTGRESQL_SSL |
Opción SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
Id. de cliente |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Secreto de cliente |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
El identificador de inquilino |
<tenant-ID> |
Código de ejemplo
Consulte los pasos y el código a continuación para conectarse a Azure Database for PostgreSQL utilizando una entidad de seguridad 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 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();
}
Agregue las siguientes dependencias al archivo 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>
Obtenga la cadena de conexión de las variables de entorno y agregue el nombre del complemento para conectarse a la base de datos:
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);
Para obtener más información, vea los siguientes recursos:
Instale las dependencias.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Obtenga el token de acceso mediante la biblioteca azure-identity
y use el token como contraseña. Obtenga información de conexión de las variables de entorno agregadas por el conector de servicio. 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.
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)
Instale las dependencias.
pip install azure-identity
Obtenga el token de acceso a través de la biblioteca azure-identity
mediante variables de entorno agregadas por el conector de servicio. 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.
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')
En el archivo de configuración, obtenga información de la base de datos de Azure PostgreSQL de las variables de entorno agregadas por el servicio del conector de servicio. Use accessToken
adquirido en el paso anterior para acceder a la base de datos.
# 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'},
}
}
Instale las dependencias.
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"
En el código, obtenga el token de acceso mediante azidentity
y úselo como contraseña para conectarse a Azure PostgreSQL junto con la información de conexión proporcionada por el conector de servicio. 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.
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()
Instale las dependencias.
npm install --save @azure/identity
npm install --save pg
En el código, obtenga el token de acceso mediante @azure/identity
y la información de conexión de PostgreSQL a partir de variables de entorno agregadas por el conector de servicio. Combínelos para establecer la conexión. 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.
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();
})();
Para PHP, no hay un complemento ni una biblioteca para las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio y usarla como contraseña para conectarse a la base de datos. El token de acceso se puede adquirir mediante la API REST de Azure.
En el código, obtenga el token de acceso mediante la API REST con su biblioteca favorita.
Para la identidad asignada por el usuario y la identidad asignada por el sistema, App Service y Container Apps proporcionan un punto de conexión REST accesible internamente para recuperar tokens para identidades administradas mediante la definición de dos variables de entorno: IDENTITY_ENDPOINT
y IDENTITY_HEADER
. Para obtener más información, consulte Referencia de puntos de conexión de REST.
Obtenga el token de acceso mediante la realización de una solicitud HTTP GET al punto de conexión de identidad y use https://ossrdbms-aad.database.windows.net
como resource
en la consulta. Para la identidad asignada por el usuario, incluya también el identificador de cliente de las variables de entorno agregadas por el conector de servicio en la consulta.
Para la entidad de servicio, consulte la solicitud de token de acceso de servicio a servicio de Azure AD para ver los detalles de cómo adquirir el token de acceso. Haga que POST solicite el ámbito de https://ossrdbms-aad.database.windows.net/.default
y con el identificador de inquilino, el identificador de cliente y el secreto de cliente de la entidad de servicio de las variables de entorno agregadas por el conector de servicio.
Combine el token de acceso y la cadena de conexión de PostgreSQL de las variables de entorno agregadas por el servicio Service Connector para establecer la conexión.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Para Ruby, no hay un complemento ni una biblioteca para las conexiones sin contraseña. Puede obtener un token de acceso para la identidad administrada o la entidad de servicio y usarla como contraseña para conectarse a la base de datos. El token de acceso se puede adquirir mediante la API REST de Azure.
Instale las dependencias.
gem install pg
En el código, obtenga el token de acceso mediante la API REST y la información de conexión de PostgreSQL a partir de variables de entorno agregadas por el conector de servicio. Combínelos para establecer la conexión. 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.
App Service y Container Apps proporcionan un punto de conexión REST accesible internamente para recuperar tokens para identidades administradas. Para obtener más información, consulte Referencia de puntos de conexión de 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,
)
Para la entidad de servicio, consulte la solicitud de token de acceso de servicio a servicio de Azure AD para ver los detalles de cómo adquirir el token de acceso.
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.