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>; |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Properti aplikasi |
Deskripsi |
Contoh nilai |
spring.datasource.azure.passwordless-enabled |
Mengaktifkan autentikasi tanpa kata sandi |
true |
spring.datasource.url |
Database URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nama pengguna database |
username |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
string koneksi psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_NAME |
Nama database |
<database-name> |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nama pengguna database |
<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nama database |
<database-name> |
AZURE_POSTGRESQL_PORT |
Nomor port |
5432 |
AZURE_POSTGRESQL_SSL |
Opsi SSL |
true |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi PostgreSQL asli PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL string koneksi |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nama database |
<database-name> |
AZURE_POSTGRESQL_PORT |
Nomor port |
5432 |
AZURE_POSTGRESQL_SSL |
Opsi SSL |
true |
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();
}
Tambahkan dependensi berikut dalam file pom.xml Anda:
<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>
Dapatkan string koneksi dari variabel lingkungan dan tambahkan nama plugin untuk menyambungkan ke database:
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);
Untuk informasi selengkapnya, lihat sumber daya berikut:
Instal dependensi.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Dapatkan token akses menggunakan azure-identity pustaka dan gunakan token sebagai kata sandi. Dapatkan informasi koneksi dari variabel lingkungan yang ditambahkan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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)
Instal dependensi.
pip install azure-identity
Dapatkan token akses menggunakan azure-identity pustaka menggunakan variabel lingkungan yang ditambahkan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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')
Dalam mengatur file, dapatkan informasi database Azure PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gunakan accessToken yang diperoleh pada langkah sebelumnya untuk mengakses database.
# 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'},
}
}
Instal dependensi.
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"
Dalam kode, dapatkan token akses menggunakan azidentity, lalu gunakan sebagai kata sandi untuk terhubung ke Azure PostgreSQL bersama dengan informasi koneksi yang disediakan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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()
Instal dependensi.
npm install --save @azure/identity
npm install --save pg
Dalam kode, dapatkan token akses menggunakan @azure/identity dan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gabungkan untuk membuat koneksi. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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();
})();
Untuk PHP, tidak ada plugin atau pustaka untuk koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan dan menggunakannya sebagai kata sandi untuk menyambungkan ke database. Token akses dapat diperoleh menggunakan Azure REST API.
Dalam kode, dapatkan token akses menggunakan REST API dengan pustaka favorit Anda.
Untuk identitas yang ditetapkan pengguna dan identitas yang ditetapkan sistem, Azure App Service dan Azure Container Apps menyediakan titik akhir REST yang dapat diakses secara internal untuk mengambil token untuk identitas terkelola dengan menentukan dua variabel lingkungan: IDENTITY_ENDPOINT dan IDENTITY_HEADER. Untuk informasi selengkapnya, lihat Referensi titik akhir REST.
Dapatkan token akses dengan membuat permintaan HTTP GET ke titik akhir identitas, dan gunakan https://ossrdbms-aad.database.windows.net seperti resource dalam kueri. Untuk identitas yang ditetapkan pengguna, sertakan ID klien dari variabel lingkungan yang ditambahkan oleh Konektor Layanan dalam kueri juga.
Untuk perwakilan layanan, lihat permintaan token akses layanan-ke-layanan Azure AD untuk melihat detail cara memperoleh token akses. Buat permintaan POST cakupan https://ossrdbms-aad.database.windows.net/.default dan dengan ID penyewa, ID klien, dan rahasia klien perwakilan layanan dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
Gabungkan token akses dan string koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan untuk membuat koneksi.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Untuk Ruby, tidak ada plugin atau pustaka untuk koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan dan menggunakannya sebagai kata sandi untuk menyambungkan ke database. Token akses dapat diperoleh menggunakan Azure REST API.
Instal dependensi.
gem install pg
Dalam kode, dapatkan token akses menggunakan REST API dan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gabungkan untuk membuat koneksi. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
Azure App Service dan Azure Container Apps menyediakan titik akhir REST yang dapat diakses secara internal untuk mengambil token untuk identitas terkelola. Untuk informasi selengkapnya, lihat Referensi titik akhir 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,
)
Lihat permintaan token akses layanan-ke-layanan Azure ACTIVE Directory untuk melihat detail selengkapnya tentang cara memperoleh token akses untuk perwakilan layanan.
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>; |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Properti aplikasi |
Deskripsi |
Contoh nilai |
spring.datasource.azure.passwordless-enabled |
Mengaktifkan autentikasi tanpa kata sandi |
true |
spring.cloud.azure.credential.client-id |
ID klien Anda |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
Mengaktifkan identitas terkelola klien |
true |
spring.datasource.url |
Database URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nama pengguna database |
username |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
string koneksi psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_NAME |
Nama database |
<database-name> |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<<identity-client-ID>> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nama database |
<database-name> |
AZURE_POSTGRESQL_PORT |
Nomor port |
5432 |
AZURE_POSTGRESQL_SSL |
Opsi SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<identity-client-ID> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi PostgreSQL asli PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL string koneksi |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nama database |
<database-name> |
AZURE_POSTGRESQL_PORT |
Nomor port |
5432 |
AZURE_POSTGRESQL_SSL |
Opsi SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<identity-client-ID> |
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();
}
Tambahkan dependensi berikut dalam file pom.xml Anda:
<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>
Dapatkan string koneksi dari variabel lingkungan dan tambahkan nama plugin untuk menyambungkan ke database:
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);
Untuk informasi selengkapnya, lihat sumber daya berikut:
Instal dependensi.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Dapatkan token akses menggunakan azure-identity pustaka dan gunakan token sebagai kata sandi. Dapatkan informasi koneksi dari variabel lingkungan yang ditambahkan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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)
Instal dependensi.
pip install azure-identity
Dapatkan token akses menggunakan azure-identity pustaka menggunakan variabel lingkungan yang ditambahkan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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')
Dalam mengatur file, dapatkan informasi database Azure PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gunakan accessToken yang diperoleh pada langkah sebelumnya untuk mengakses database.
# 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'},
}
}
Instal dependensi.
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"
Dalam kode, dapatkan token akses menggunakan azidentity, lalu gunakan sebagai kata sandi untuk terhubung ke Azure PostgreSQL bersama dengan informasi koneksi yang disediakan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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()
Instal dependensi.
npm install --save @azure/identity
npm install --save pg
Dalam kode, dapatkan token akses menggunakan @azure/identity dan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gabungkan untuk membuat koneksi. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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();
})();
Untuk PHP, tidak ada plugin atau pustaka untuk koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan dan menggunakannya sebagai kata sandi untuk menyambungkan ke database. Token akses dapat diperoleh menggunakan Azure REST API.
Dalam kode, dapatkan token akses menggunakan REST API dengan pustaka favorit Anda.
Untuk identitas yang ditetapkan pengguna dan identitas yang ditetapkan sistem, Azure App Service dan Azure Container Apps menyediakan titik akhir REST yang dapat diakses secara internal untuk mengambil token untuk identitas terkelola dengan menentukan dua variabel lingkungan: IDENTITY_ENDPOINT dan IDENTITY_HEADER. Untuk informasi selengkapnya, lihat Referensi titik akhir REST.
Dapatkan token akses dengan membuat permintaan HTTP GET ke titik akhir identitas, dan gunakan https://ossrdbms-aad.database.windows.net seperti resource dalam kueri. Untuk identitas yang ditetapkan pengguna, sertakan ID klien dari variabel lingkungan yang ditambahkan oleh Konektor Layanan dalam kueri juga.
Untuk perwakilan layanan, lihat permintaan token akses layanan-ke-layanan Azure AD untuk melihat detail cara memperoleh token akses. Buat permintaan POST cakupan https://ossrdbms-aad.database.windows.net/.default dan dengan ID penyewa, ID klien, dan rahasia klien perwakilan layanan dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
Gabungkan token akses dan string koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan untuk membuat koneksi.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Untuk Ruby, tidak ada plugin atau pustaka untuk koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan dan menggunakannya sebagai kata sandi untuk menyambungkan ke database. Token akses dapat diperoleh menggunakan Azure REST API.
Instal dependensi.
gem install pg
Dalam kode, dapatkan token akses menggunakan REST API dan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gabungkan untuk membuat koneksi. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
Azure App Service dan Azure Container Apps menyediakan titik akhir REST yang dapat diakses secara internal untuk mengambil token untuk identitas terkelola. Untuk informasi selengkapnya, lihat Referensi titik akhir 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,
)
Lihat permintaan token akses layanan-ke-layanan Azure ACTIVE Directory untuk melihat detail selengkapnya tentang cara memperoleh token akses untuk perwakilan layanan.
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>; |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
| Properti aplikasi |
Deskripsi |
Contoh nilai |
spring.datasource.url |
Database URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nama pengguna database |
<username> |
spring.datasource.password |
Kata sandi database |
<password> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
string koneksi psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_NAME |
Nama database |
<database-name> |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Kata sandi database |
<database-password> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Kata sandi database |
<password> |
AZURE_POSTGRESQL_DATABASE |
Nama database |
<database-name> |
AZURE_POSTGRESQL_PORT |
Nomor port |
5432 |
AZURE_POSTGRESQL_SSL |
Opsi SSL |
true |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
String koneksi PostgreSQL asli PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL string koneksi |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nama database |
<database-name> |
AZURE_POSTGRESQL_PORT |
Nomor port |
5432 |
AZURE_POSTGRESQL_SSL |
Opsi SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
Kata sandi database |
<password> |
Kode Sampel
Lihat langkah-langkah dan kode di bawah ini untuk menyambungkan ke Azure Database for PostgreSQL menggunakan string koneksi.
- Instal dependensi mengikuti panduan Npgsql
- 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();
}
- Instal dependensi dengan mengikuti panduan pgJDBC.
- Dalam kode, dapatkan string koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
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());
}
- Instal modul Spring Cloud Azure Starter JDBC PostgreSQL dengan menambahkan dependensi berikut ke file Anda
pom.xml . Temukan versi Spring Cloud Azure di sini.
<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>
- Siapkan aplikasi Spring Boot, detail selengkapnya di bagian ini.
- Instal dependensi dengan mengikuti panduan psycopg2.
- Dalam kode, dapatkan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- Instal dependensi mengikuti panduan Django dan panduan psycopg2.
pip install django
pip install psycopg2
- Dalam file pengaturan, dapatkan informasi database PostgreSQL dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
# 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'},
}
}
- Instal dependensi.
go get github.com/lib/pq
- Dalam kode, dapatkan string koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
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()
- Instal dependensi.
npm install pg dotenv
- Dalam kode, dapatkan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
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();
})();
- Dalam kode, dapatkan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Instal dependensi.
gem install pg
- Dalam kode, dapatkan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
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
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>; |
| 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 JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Properti aplikasi |
Deskripsi |
Contoh nilai |
spring.datasource.azure.passwordless-enabled |
Mengaktifkan autentikasi tanpa kata sandi |
true |
spring.cloud.azure.credential.client-id |
ID klien Anda |
<client-ID> |
spring.cloud.azure.credential.client-secret |
Rahasia klien Anda |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
ID penyewa Anda |
<tenant-ID> |
spring.datasource.url |
Database URL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Nama pengguna database |
username |
| 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 psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_NAME |
Nama database |
<database-name> |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
RAHASIA klien Anda |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID penyewa Anda |
<tenant-ID> |
| 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 Go PostgreSQL |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nama database |
<database-name> |
AZURE_POSTGRESQL_PORT |
Nomor port |
5432 |
AZURE_POSTGRESQL_SSL |
Opsi SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Rahasia klien Anda |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID penyewa Anda |
<tenant-ID> |
| 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 PostgreSQL asli PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| 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 |
Ruby PostgreSQL string koneksi |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Nama Variabel Lingkungan |
Deskripsi |
Contoh nilai |
AZURE_POSTGRESQL_HOST |
Database host URL |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Nama pengguna database |
<username> |
AZURE_POSTGRESQL_DATABASE |
Nama database |
<database-name> |
AZURE_POSTGRESQL_PORT |
Nomor port |
5432 |
AZURE_POSTGRESQL_SSL |
Opsi SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
ID klien Anda |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Rahasia klien Anda |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
ID penyewa Anda |
<tenant-ID> |
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();
}
Tambahkan dependensi berikut dalam file pom.xml Anda:
<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>
Dapatkan string koneksi dari variabel lingkungan dan tambahkan nama plugin untuk menyambungkan ke database:
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);
Untuk informasi selengkapnya, lihat sumber daya berikut:
Instal dependensi.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Dapatkan token akses menggunakan azure-identity pustaka dan gunakan token sebagai kata sandi. Dapatkan informasi koneksi dari variabel lingkungan yang ditambahkan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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)
Instal dependensi.
pip install azure-identity
Dapatkan token akses menggunakan azure-identity pustaka menggunakan variabel lingkungan yang ditambahkan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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')
Dalam mengatur file, dapatkan informasi database Azure PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gunakan accessToken yang diperoleh pada langkah sebelumnya untuk mengakses database.
# 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'},
}
}
Instal dependensi.
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"
Dalam kode, dapatkan token akses menggunakan azidentity, lalu gunakan sebagai kata sandi untuk terhubung ke Azure PostgreSQL bersama dengan informasi koneksi yang disediakan oleh Konektor Layanan. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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()
Instal dependensi.
npm install --save @azure/identity
npm install --save pg
Dalam kode, dapatkan token akses menggunakan @azure/identity dan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gabungkan untuk membuat koneksi. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
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();
})();
Untuk PHP, tidak ada plugin atau pustaka untuk koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan dan menggunakannya sebagai kata sandi untuk menyambungkan ke database. Token akses dapat diperoleh menggunakan Azure REST API.
Dalam kode, dapatkan token akses menggunakan REST API dengan pustaka favorit Anda.
Untuk identitas yang ditetapkan pengguna dan identitas yang ditetapkan sistem, Azure App Service dan Azure Container Apps menyediakan titik akhir REST yang dapat diakses secara internal untuk mengambil token untuk identitas terkelola dengan menentukan dua variabel lingkungan: IDENTITY_ENDPOINT dan IDENTITY_HEADER. Untuk informasi selengkapnya, lihat Referensi titik akhir REST.
Dapatkan token akses dengan membuat permintaan HTTP GET ke titik akhir identitas, dan gunakan https://ossrdbms-aad.database.windows.net seperti resource dalam kueri. Untuk identitas yang ditetapkan pengguna, sertakan ID klien dari variabel lingkungan yang ditambahkan oleh Konektor Layanan dalam kueri juga.
Untuk perwakilan layanan, lihat permintaan token akses layanan-ke-layanan Azure AD untuk melihat detail cara memperoleh token akses. Buat permintaan POST cakupan https://ossrdbms-aad.database.windows.net/.default dan dengan ID penyewa, ID klien, dan rahasia klien perwakilan layanan dari variabel lingkungan yang ditambahkan oleh Konektor Layanan.
Gabungkan token akses dan string koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan untuk membuat koneksi.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
Untuk Ruby, tidak ada plugin atau pustaka untuk koneksi tanpa kata sandi. Anda bisa mendapatkan token akses untuk identitas terkelola atau perwakilan layanan dan menggunakannya sebagai kata sandi untuk menyambungkan ke database. Token akses dapat diperoleh menggunakan Azure REST API.
Instal dependensi.
gem install pg
Dalam kode, dapatkan token akses menggunakan REST API dan informasi koneksi PostgreSQL dari variabel lingkungan yang ditambahkan oleh layanan Konektor Layanan. Gabungkan untuk membuat koneksi. Saat menggunakan kode di bawah ini, batalkan komentar bagian cuplikan kode untuk jenis autentikasi yang ingin Anda gunakan.
Azure App Service dan Azure Container Apps menyediakan titik akhir REST yang dapat diakses secara internal untuk mengambil token untuk identitas terkelola. Untuk informasi selengkapnya, lihat Referensi titik akhir 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,
)
Lihat permintaan token akses layanan-ke-layanan Azure ACTIVE Directory untuk melihat detail selengkapnya tentang cara memperoleh token akses untuk perwakilan layanan.
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.