Aracılığıyla paylaş


hizmet bağlayıcısı ile PostgreSQL için Azure Veritabanı tümleştirme

Bu makale, Service Connector kullanarak uygulamalarınızı PostgreSQL için Azure Veritabanı'na bağlamak için kullanabileceğiniz desteklenen kimlik doğrulama yöntemlerini, istemcileri ve örnek kodu kapsar. Bu makalede, hizmet bağlantıları oluştururken elde edilen varsayılan ortam değişkeni adlarını, değerlerini ve yapılandırmasını da bulacaksınız.

Desteklenen işlem hizmetleri

Hizmet Bağlayıcısı, aşağıdaki işlem hizmetlerini PostgreSQL için Azure Veritabanı bağlamak için kullanılabilir:

  • Azure App Service
  • Azure Container Apps (Azure Konteyner Uygulamaları)
  • Azure İşlevleri
  • Azure Kubernetes Hizmeti (AKS)
  • Azure Bahar Uygulamaları

Desteklenen kimlik doğrulama türleri ve istemci türleri

Aşağıdaki tabloda, Service Connector kullanarak işlem hizmetlerini PostgreSQL için Azure Veritabanı'na bağlamak için hangi kimlik doğrulama yöntemlerinin ve istemcilerinin desteklendiği gösterilmektedir. "Evet", birleşimin desteklendiğini, "Hayır" ise bunun desteklenmediğini gösterir.

İstemci türü Sistem tarafından atanan yönetilen kimlik Kullanıcı atamalı yönetilen kimlik Gizli anahtar/bağlantı dizesi Hizmet sorumlusu
.NET Evet Evet Evet Evet
Go (Tavsiye Edilen Yaş: 8+) Evet Evet Evet Evet
Java (JDBC) Evet Evet Evet Evet
Java - Spring Boot (JDBC) Evet Evet Evet Evet
Node.js (pg) Evet Evet Evet Evet
PHP (yerleşik) Evet Evet Evet Evet
Python (psycopg2) Evet Evet Evet Evet
Python-Django Evet Evet Evet Evet
Ruby (ruby-pg) Evet Evet Evet Evet
Hiçbiri Evet Evet Evet Evet

Not

Sistem tarafından atanan yönetilen kimlik, Kullanıcı tarafından atanan yönetilen kimlik ve Hizmet sorumlusu yalnızca Azure CLI'da desteklenir.

Varsayılan ortam değişkeni adları veya uygulama özellikleri ve örnek kod

Bağlantınızın kimlik doğrulama türüne ve istemci türüne göre aşağıdaki tablolarda bağlantı ayrıntılarına ve örnek koda başvurun. Adlandırma kuralları hakkında daha fazla bilgi için Hizmet Bağlayıcısı iç bilgileri makalesine bakın.

Sistem tarafından atanan yönetilen kimlik

Varsayılan ortam değişkeni adı Açıklama Örnek değer
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL bağlantı dizesi Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Örnek kod

Sistem tarafından atanan yönetilen kimliği kullanarak PostgreSQL için Azure Veritabanı bağlanmak için aşağıdaki adımlara ve koda bakın.

.NET için parolasız bağlantıları destekleyen bir eklenti veya kitaplık yoktur. Azure.Identity gibi istemci kitaplığını kullanarak yönetilen kimlik veya hizmet sorumlusu için erişim belirteci alabilirsiniz. Ardından veritabanına bağlanmak için parola olarak erişim belirtecini kullanabilirsiniz. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.

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();
}

Ardından, Hizmet Bağlayıcısı'nı kullanmadan önce PostgreSQL esnek sunucusunda tablolar ve diziler oluşturduysanız, sahip olarak bağlanmanız ve Hizmet Bağlayıcısı tarafından oluşturulma izni <aad-username> vermeniz gerekir. Hizmet Bağlayıcısı tarafından ayarlanan bağlantı dizesi veya yapılandırmadaki kullanıcı adı gibi aad_<connection name>görünmelidir. Azure portalını kullanıyorsanız sütunun yanındaki Service Type genişlet düğmesini seçin ve değeri alın. Azure CLI kullanıyorsanız CLI komut çıkışını denetleyin configurations .

Ardından, izin vermek için sorguyu yürütün

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> ve<owner-password>, başkalarına izin verebilen mevcut tablonun sahibidir. <aad-username> , Service Connector tarafından oluşturulan kullanıcıdır. Bunları gerçek değerle değiştirin.

Sonucu şu komutla doğrulayın:

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

Kullanıcı atamalı yönetilen kimlik

Varsayılan ortam değişkeni adı Açıklama Örnek değer
AZURE_POSTGRESQL_CLIENTID İstemci kimliğiniz <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL bağlantı dizesi Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Örnek kod

Kullanıcı tarafından atanan yönetilen kimliği kullanarak PostgreSQL için Azure Veritabanı bağlanmak için aşağıdaki adımlara ve koda bakın.

.NET için parolasız bağlantıları destekleyen bir eklenti veya kitaplık yoktur. Azure.Identity gibi istemci kitaplığını kullanarak yönetilen kimlik veya hizmet sorumlusu için erişim belirteci alabilirsiniz. Ardından veritabanına bağlanmak için parola olarak erişim belirtecini kullanabilirsiniz. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.

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();
}

Ardından, Hizmet Bağlayıcısı'nı kullanmadan önce PostgreSQL esnek sunucusunda tablolar ve diziler oluşturduysanız, sahip olarak bağlanmanız ve Hizmet Bağlayıcısı tarafından oluşturulma izni <aad-username> vermeniz gerekir. Hizmet Bağlayıcısı tarafından ayarlanan bağlantı dizesi veya yapılandırmadaki kullanıcı adı gibi aad_<connection name>görünmelidir. Azure portalını kullanıyorsanız sütunun yanındaki Service Type genişlet düğmesini seçin ve değeri alın. Azure CLI kullanıyorsanız CLI komut çıkışını denetleyin configurations .

Ardından, izin vermek için sorguyu yürütün

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> ve<owner-password>, başkalarına izin verebilen mevcut tablonun sahibidir. <aad-username> , Service Connector tarafından oluşturulan kullanıcıdır. Bunları gerçek değerle değiştirin.

Sonucu şu komutla doğrulayın:

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

Bağlantı dizesi

Uyarı

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Bu yordamda açıklanan kimlik doğrulama akışı, uygulamada çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskleri taşır. Bu akışı yalnızca yönetilen kimlikler gibi diğer daha güvenli akışlar uygun olmadığında kullanmalısınız.

Varsayılan ortam değişkeni adı Açıklama Örnek değer
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL bağlantı dizesi Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Örnek kod

bağlantı dizesi kullanarak PostgreSQL için Azure Veritabanı bağlanmak için aşağıdaki adımlara ve koda bakın.

  1. Npgsql yönergelerini izleyerek bağımlılıkları yükleme
  2. Kodda, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı dizesini alın.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Hizmet sorumlusu

Varsayılan ortam değişkeni adı Açıklama Örnek değer
AZURE_POSTGRESQL_CLIENTID İstemci kimliğiniz <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET İstemci gizli anahtarınız <client-secret>
AZURE_POSTGRESQL_TENANTID Kiracı kimliğiniz <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL bağlantı dizesi Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Örnek kod

Hizmet sorumlusu kullanarak PostgreSQL için Azure Veritabanı bağlanmak için aşağıdaki adımlara ve koda bakın.

.NET için parolasız bağlantıları destekleyen bir eklenti veya kitaplık yoktur. Azure.Identity gibi istemci kitaplığını kullanarak yönetilen kimlik veya hizmet sorumlusu için erişim belirteci alabilirsiniz. Ardından veritabanına bağlanmak için parola olarak erişim belirtecini kullanabilirsiniz. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.

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();
}

Ardından, Hizmet Bağlayıcısı'nı kullanmadan önce PostgreSQL esnek sunucusunda tablolar ve diziler oluşturduysanız, sahip olarak bağlanmanız ve Hizmet Bağlayıcısı tarafından oluşturulma izni <aad-username> vermeniz gerekir. Hizmet Bağlayıcısı tarafından ayarlanan bağlantı dizesi veya yapılandırmadaki kullanıcı adı gibi aad_<connection name>görünmelidir. Azure portalını kullanıyorsanız sütunun yanındaki Service Type genişlet düğmesini seçin ve değeri alın. Azure CLI kullanıyorsanız CLI komut çıkışını denetleyin configurations .

Ardından, izin vermek için sorguyu yürütün

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> ve<owner-password>, başkalarına izin verebilen mevcut tablonun sahibidir. <aad-username> , Service Connector tarafından oluşturulan kullanıcıdır. Bunları gerçek değerle değiştirin.

Sonucu şu komutla doğrulayın:

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

Sonraki adımlar

Service Connector hakkında daha fazla bilgi edinmek için aşağıda listelenen öğreticileri izleyin.