Bagikan melalui


Mengintegrasikan Azure Database for PostgreSQL dengan Konektor Layanan

Artikel ini membahas metode autentikasi, klien, dan kode sampel yang didukung yang dapat Anda gunakan untuk menyambungkan aplikasi Anda ke Azure Database for PostgreSQL menggunakan Konektor Layanan. Dalam artikel ini, Anda juga akan menemukan nama variabel lingkungan default, nilai, dan konfigurasi yang diperoleh saat membuat koneksi layanan.

Layanan komputasi yang didukung

Konektor Layanan dapat digunakan untuk menyambungkan layanan komputasi berikut ke Azure Database for PostgreSQL:

  • Azure App Service
  • Azure Container Apps
  • Azure Functions
  • Azure Kubernetes Service (AKS)
  • Azure Spring Apps

Jenis Autentikasi yang Didukung serta jenis klien

Tabel di bawah ini memperlihatkan kombinasi metode autentikasi dan klien mana yang didukung untuk menghubungkan layanan komputasi ke Azure Database for PostgreSQL menggunakan Konektor Layanan. "Ya" menunjukkan bahwa kombinasi didukung, sementara "Tidak" menunjukkan bahwa kombinasi tersebut tidak didukung.

Jenis klien Identitas terkelola yang ditetapkan sistem Identitas terkelola yang ditetapkan pengguna Rahasia/string koneksi Perwakilan layanan
.JARING Ya Ya Ya Ya
Pergi (pg) Ya Ya Ya Ya
Java (JDBC) Ya Ya Ya Ya
Java - Spring Boot (JDBC) Ya Ya Ya Ya
Node.js (pg) Ya Ya Ya Ya
PHP (asli) Ya Ya Ya Ya
Python (psycopg2) Ya Ya Ya Ya
Python-Django Ya Ya Ya Ya
Ruby (ruby-pg) Ya Ya Ya Ya
Tidak Ya Ya Ya Ya

Catatan

Identitas terkelola yang ditetapkan sistem, Identitas terkelola yang ditetapkan pengguna, dan Perwakilan layanan hanya didukung di Azure CLI.

Nama variabel lingkungan default atau properti aplikasi dan kode sampel

Referensikan detail koneksi dan kode sampel dalam tabel berikut, sesuai dengan jenis autentikasi koneksi dan jenis klien Anda. Untuk informasi selengkapnya tentang konvensi penamaan, periksa artikel internal Konektor Layanan.

Identitas terkelola yang ditetapkan sistem

Nama Variabel Lingkungan Deskripsi Contoh nilai
AZURE_POSTGRESQL_CONNECTIONSTRING String koneksi .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Kode Sampel

Lihat langkah-langkah dan kode di bawah ini untuk menyambungkan ke Azure Database for PostgreSQL menggunakan identitas terkelola yang ditetapkan sistem.

Untuk .NET, tidak ada plugin atau pustaka untuk mendukung koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan menggunakan pustaka klien seperti Azure.Identity. Kemudian Anda dapat menggunakan token akses sebagai kata sandi untuk menyambungkan ke database. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.

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

Selanjutnya, jika Anda telah membuat tabel dan urutan di server fleksibel PostgreSQL sebelum menggunakan Konektor Layanan, Anda perlu terhubung sebagai pemilik dan memberikan izin untuk <aad-username> dibuat oleh Konektor Layanan. Nama pengguna dari string koneksi atau konfigurasi yang ditetapkan oleh Konektor Layanan akan terlihat seperti aad_<connection name>. Jika Anda menggunakan portal Azure, pilih tombol perluas di Service Type samping kolom dan dapatkan nilainya. Jika Anda menggunakan Azure CLI, periksa configurations output perintah CLI.

Kemudian, jalankan kueri untuk memberikan izin

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> dan <owner-password> adalah pemilik tabel yang ada yang dapat memberikan izin kepada orang lain. <aad-username> adalah pengguna yang dibuat oleh Konektor Layanan. Ganti dengan nilai aktual.

Validasi hasil dengan perintah :

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

Identitas terkelola yang ditetapkan pengguna

Nama Variabel Lingkungan Deskripsi Contoh nilai
AZURE_POSTGRESQL_CLIENTID ID klien Anda <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING String koneksi .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Kode Sampel

Lihat langkah-langkah dan kode di bawah ini untuk menyambungkan ke Azure Database for PostgreSQL menggunakan identitas terkelola yang ditetapkan pengguna.

Untuk .NET, tidak ada plugin atau pustaka untuk mendukung koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan menggunakan pustaka klien seperti Azure.Identity. Kemudian Anda dapat menggunakan token akses sebagai kata sandi untuk menyambungkan ke database. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.

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

Selanjutnya, jika Anda telah membuat tabel dan urutan di server fleksibel PostgreSQL sebelum menggunakan Konektor Layanan, Anda perlu terhubung sebagai pemilik dan memberikan izin untuk <aad-username> dibuat oleh Konektor Layanan. Nama pengguna dari string koneksi atau konfigurasi yang ditetapkan oleh Konektor Layanan akan terlihat seperti aad_<connection name>. Jika Anda menggunakan portal Azure, pilih tombol perluas di Service Type samping kolom dan dapatkan nilainya. Jika Anda menggunakan Azure CLI, periksa configurations output perintah CLI.

Kemudian, jalankan kueri untuk memberikan izin

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> dan <owner-password> adalah pemilik tabel yang ada yang dapat memberikan izin kepada orang lain. <aad-username> adalah pengguna yang dibuat oleh Konektor Layanan. Ganti dengan nilai aktual.

Validasi hasil dengan perintah :

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

Rangkaian koneksi

Peringatan

Microsoft menyarankan agar Anda menggunakan alur autentikasi paling aman yang tersedia. Alur autentikasi yang dijelaskan dalam prosedur ini membutuhkan tingkat kepercayaan yang sangat tinggi pada aplikasi, dan membawa risiko yang tidak ada dalam alur lain. Anda hanya boleh menggunakan alur ini ketika alur lain yang lebih aman, seperti identitas terkelola, tidak layak.

Nama Variabel Lingkungan Deskripsi Contoh nilai
AZURE_POSTGRESQL_CONNECTIONSTRING String koneksi .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Kode Sampel

Lihat langkah-langkah dan kode di bawah ini untuk menyambungkan ke Azure Database for PostgreSQL menggunakan string koneksi.

  1. Instal dependensi mengikuti panduan Npgsql
  2. Dalam kode, dapatkan string koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Perwakilan layanan

Nama Variabel Lingkungan Deskripsi Contoh nilai
AZURE_POSTGRESQL_CLIENTID ID klien Anda <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Rahasia klien Anda <client-secret>
AZURE_POSTGRESQL_TENANTID ID penyewa Anda <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING String koneksi .NET PostgreSQL Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Kode Sampel

Lihat langkah-langkah dan kode di bawah ini untuk menyambungkan ke Azure Database for PostgreSQL menggunakan perwakilan layanan.

Untuk .NET, tidak ada plugin atau pustaka untuk mendukung koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan menggunakan pustaka klien seperti Azure.Identity. Kemudian Anda dapat menggunakan token akses sebagai kata sandi untuk menyambungkan ke database. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.

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

Selanjutnya, jika Anda telah membuat tabel dan urutan di server fleksibel PostgreSQL sebelum menggunakan Konektor Layanan, Anda perlu terhubung sebagai pemilik dan memberikan izin untuk <aad-username> dibuat oleh Konektor Layanan. Nama pengguna dari string koneksi atau konfigurasi yang ditetapkan oleh Konektor Layanan akan terlihat seperti aad_<connection name>. Jika Anda menggunakan portal Azure, pilih tombol perluas di Service Type samping kolom dan dapatkan nilainya. Jika Anda menggunakan Azure CLI, periksa configurations output perintah CLI.

Kemudian, jalankan kueri untuk memberikan izin

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> dan <owner-password> adalah pemilik tabel yang ada yang dapat memberikan izin kepada orang lain. <aad-username> adalah pengguna yang dibuat oleh Konektor Layanan. Ganti dengan nilai aktual.

Validasi hasil dengan perintah :

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

Langkah berikutnya

Ikuti tutorial yang tercantum di bawah ini untuk mempelajari lebih lanjut tentang Konektor Layanan.