تتناول هذه المقالة أساليب المصادقة المدعومة والعملاء ونموذج التعليمات البرمجية التي يمكنك استخدامها لتوصيل تطبيقاتك بقاعدة بيانات Azure ل PostgreSQL باستخدام Service Connector. في هذه المقالة، ستجد أيضا أسماء متغيرات البيئة الافتراضية والقيم والتكوين التي تم الحصول عليها عند إنشاء اتصالات الخدمة.
خدمات الحوسبة المدعومة
يمكن استخدام Service Connector لتوصيل خدمات الحوسبة التالية بقاعدة بيانات Azure ل PostgreSQL:
- "Azure App Service"
- Azure Container Apps
- دالات Azure
- خدمة Azure Kubernetes (AKS)
- Azure Spring Apps
أنواع المصادقة المدعومة وأنواع العملاء
يوضح الجدول أدناه مجموعات أساليب المصادقة والعملاء المدعومة لتوصيل خدمات الحوسبة بقاعدة بيانات Azure ل PostgreSQL باستخدام Service Connector. يشير "نعم" إلى أن المجموعة مدعومة، بينما تشير "لا" إلى أنها غير مدعومة.
| نوع العميل |
الهوية المُدارة التي يُعيّنها النظام |
الهوية المُدارة التي يعيّنها المُستخدم |
بيانات سرية/سلسلة الاتصال |
كيان الخدمة |
| .صافي |
نعم |
نعم |
نعم |
نعم |
| انطلق (pg) |
نعم |
نعم |
نعم |
نعم |
| جافا (JDBC) |
نعم |
نعم |
نعم |
نعم |
| جافا - إقلاع نابض (JDBC) |
نعم |
نعم |
نعم |
نعم |
| Node.js (الصفحة الثانية) |
نعم |
نعم |
نعم |
نعم |
| PHP (أصلي) |
نعم |
نعم |
نعم |
نعم |
| بايثون (psycopg2) |
نعم |
نعم |
نعم |
نعم |
| Python-Django |
نعم |
نعم |
نعم |
نعم |
| روبي (ياقوت الياقوت) |
نعم |
نعم |
نعم |
نعم |
| بلا |
نعم |
نعم |
نعم |
نعم |
إشعار
يتم دعم الهوية المدارة المعينة من قبل النظام والهوية المدارة المعينة من قبل المستخدم ومدير الخدمة فقط على Azure CLI.
أسماء متغيرات البيئة الافتراضية أو خصائص التطبيق ونموذج التعليمات البرمجية
راجع تفاصيل الاتصال ونموذج التعليمات البرمجية في الجداول التالية، وفقا لنوع مصادقة الاتصال ونوع العميل. لمزيد من المعلومات حول اصطلاحات التسمية، راجع مقالة Service Connector internals .
الهوية المُدارة التي يُعيّنها النظام
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL سلسلة الاتصال |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة اتصال JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| خصائص التطبيق |
الوصف |
مثال للقيمة |
spring.datasource.azure.passwordless-enabled |
تمكين المصادقة بدون كلمة مرور |
true |
spring.datasource.url |
عنوان URL لقاعدة البيانات |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
اسم مستخدم قاعدة البيانات |
username |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة اتصال psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_NAME |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
اسم مستخدم قاعدة البيانات |
<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL سلسلة الاتصال |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_DATABASE |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_PORT |
رقم المنفذ |
5432 |
AZURE_POSTGRESQL_SSL |
خيار SSL |
true |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة الاتصال PostgreSQL الأصلي ل PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة الاتصال Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_DATABASE |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_PORT |
رقم المنفذ |
5432 |
AZURE_POSTGRESQL_SSL |
خيار SSL |
true |
التعليمة البرمجية العينة
راجع الخطوات والرمز أدناه للاتصال بقاعدة بيانات Azure ل PostgreSQL باستخدام هوية مدارة معينة من قبل النظام.
بالنسبة ل .NET، لا يوجد مكون إضافي أو مكتبة لدعم الاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة باستخدام مكتبة العميل مثل Azure.Identity. ثم يمكنك استخدام الرمز المميز للوصول ككلمة مرور للاتصال بقاعدة البيانات. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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();
}
أضف التبعيات التالية في ملف pom.xml :
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
احصل على سلسلة الاتصال من متغيرات البيئة وأضف اسم المكون الإضافي للاتصال بقاعدة البيانات:
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);
لمزيد من المعلومات، راجع الموارد التالية:
تثبيت التبعيات:
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
احصل على الرمز المميز للوصول باستخدام azure-identity المكتبة واستخدم الرمز المميز ككلمة مرور. احصل على معلومات الاتصال من متغيرات البيئة المضافة بواسطة Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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)
تثبيت التبعيات:
pip install azure-identity
احصل على الرمز المميز للوصول باستخدام azure-identity المكتبة باستخدام متغيرات البيئة المضافة بواسطة Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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')
في ملف الإعداد، احصل على معلومات قاعدة بيانات Azure PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. استخدم accessToken المكتسبة في الخطوة السابقة للوصول إلى قاعدة البيانات.
# 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'},
}
}
تثبيت التبعيات:
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"
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام azidentity، ثم استخدمه ككلمة مرور للاتصال ب Azure PostgreSQL جنبا إلى جنب مع معلومات الاتصال التي يوفرها Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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()
تثبيت التبعيات:
npm install --save @azure/identity
npm install --save pg
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام @azure/identity معلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. قم بدمجها لتأسيس الاتصال. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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();
})();
بالنسبة إلى PHP، لا يوجد مكون إضافي أو مكتبة للاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة واستخدامه ككلمة مرور للاتصال بقاعدة البيانات. يمكن الحصول على الرمز المميز للوصول باستخدام Azure REST API.
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام واجهة برمجة تطبيقات REST مع المكتبة المفضلة لديك.
بالنسبة للهوية المعينة من قبل المستخدم والهوية المعينة للنظام، توفر Azure App Service وAzure Container Apps نقطة نهاية REST داخلية متاحة لاسترجاع الرموز للهويات المدارة من خلال تعريف متغيرين للبيئة: IDENTITY_ENDPOINT و IDENTITY_HEADER. لمزيد من المعلومات، راجع مرجع نقطة نهاية REST.
احصل على الرمز المميز للوصول عن طريق إجراء طلب HTTP GET إلى نقطة نهاية الهوية، واستخدم https://ossrdbms-aad.database.windows.net كما resource في الاستعلام. بالنسبة للهوية المعينة من قبل المستخدم، يرجى تضمين معرف العميل من متغيرات البيئة المضافة بواسطة Service Connector في الاستعلام أيضا.
بالنسبة إلى كيان الخدمة، راجع طلب الرمز المميز للوصول من خدمة إلى خدمة Azure AD لمعرفة تفاصيل كيفية الحصول على الرمز المميز للوصول. جعل طلب POST نطاق https://ossrdbms-aad.database.windows.net/.default ومع معرف المستأجر ومعرف العميل وسر العميل لمدير الخدمة من متغيرات البيئة المضافة بواسطة Service Connector.
اجمع بين الرمز المميز للوصول وسلسلة اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector لإنشاء الاتصال.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
بالنسبة إلى Ruby، لا يوجد مكون إضافي أو مكتبة للاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة واستخدامه ككلمة مرور للاتصال بقاعدة البيانات. يمكن الحصول على الرمز المميز للوصول باستخدام Azure REST API.
تثبيت التبعيات:
gem install pg
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام REST API ومعلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. قم بدمجها لتأسيس الاتصال. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
توفر Azure App Service وAzure Container Apps نقطة نهاية REST متاحة داخليا لاسترجاع الرموز للهويات المدارة. لمزيد من المعلومات، راجع مرجع نقطة نهاية 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,
)
راجع طلب الرمز المميز للوصول من خدمة إلى خدمة Azure AD للاطلاع على مزيد من التفاصيل حول كيفية الحصول على رمز الوصول المميز لكيان الخدمة.
بعد ذلك، إذا قمت بإنشاء جداول وتسلسلات في خادم PostgreSQL المرن قبل استخدام Service Connector، فستحتاج إلى الاتصال كمالك ومنح الإذن لإنشاء <aad-username> بواسطة Service Connector. يجب أن يبدو اسم المستخدم من سلسلة الاتصال أو التكوين الذي تم تعيينه بواسطة Service Connector مثل aad_<connection name>. إذا كنت تستخدم مدخل Microsoft Azure، فحدد زر التوسيع بجوار Service Type العمود والحصول على القيمة. إذا كنت تستخدم Azure CLI، فتحقق من configurations إخراج أمر CLI.
ثم قم بتنفيذ الاستعلام لمنح الإذن
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><owner-password> هو مالك الجدول الموجود الذي يمكنه منح أذونات للآخرين.
<aad-username> هو المستخدم الذي تم إنشاؤه بواسطة Service Connector. استبدلها بالقيمة الفعلية.
تحقق من صحة النتيجة باستخدام الأمر :
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
الهوية المُدارة التي يعيّنها المُستخدم
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL سلسلة الاتصال |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة اتصال JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| خصائص التطبيق |
الوصف |
مثال للقيمة |
spring.datasource.azure.passwordless-enabled |
تمكين المصادقة بدون كلمة مرور |
true |
spring.cloud.azure.credential.client-id |
معرف العميل الخاص بك |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
تمكين الهوية المدارة للعميل |
true |
spring.datasource.url |
عنوان URL لقاعدة البيانات |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
اسم مستخدم قاعدة البيانات |
username |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة اتصال psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_NAME |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<<identity-client-ID>> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL سلسلة الاتصال |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_DATABASE |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_PORT |
رقم المنفذ |
5432 |
AZURE_POSTGRESQL_SSL |
خيار SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة الاتصال PostgreSQL الأصلي ل PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة الاتصال Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_DATABASE |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_PORT |
رقم المنفذ |
5432 |
AZURE_POSTGRESQL_SSL |
خيار SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
التعليمة البرمجية العينة
راجع الخطوات والرمز أدناه للاتصال بقاعدة بيانات Azure ل PostgreSQL باستخدام هوية مدارة يعينها المستخدم.
بالنسبة ل .NET، لا يوجد مكون إضافي أو مكتبة لدعم الاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة باستخدام مكتبة العميل مثل Azure.Identity. ثم يمكنك استخدام الرمز المميز للوصول ككلمة مرور للاتصال بقاعدة البيانات. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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();
}
أضف التبعيات التالية في ملف pom.xml :
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
احصل على سلسلة الاتصال من متغيرات البيئة وأضف اسم المكون الإضافي للاتصال بقاعدة البيانات:
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);
لمزيد من المعلومات، راجع الموارد التالية:
تثبيت التبعيات:
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
احصل على الرمز المميز للوصول باستخدام azure-identity المكتبة واستخدم الرمز المميز ككلمة مرور. احصل على معلومات الاتصال من متغيرات البيئة المضافة بواسطة Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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)
تثبيت التبعيات:
pip install azure-identity
احصل على الرمز المميز للوصول باستخدام azure-identity المكتبة باستخدام متغيرات البيئة المضافة بواسطة Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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')
في ملف الإعداد، احصل على معلومات قاعدة بيانات Azure PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. استخدم accessToken المكتسبة في الخطوة السابقة للوصول إلى قاعدة البيانات.
# 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'},
}
}
تثبيت التبعيات:
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"
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام azidentity، ثم استخدمه ككلمة مرور للاتصال ب Azure PostgreSQL جنبا إلى جنب مع معلومات الاتصال التي يوفرها Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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()
تثبيت التبعيات:
npm install --save @azure/identity
npm install --save pg
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام @azure/identity معلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. قم بدمجها لتأسيس الاتصال. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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();
})();
بالنسبة إلى PHP، لا يوجد مكون إضافي أو مكتبة للاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة واستخدامه ككلمة مرور للاتصال بقاعدة البيانات. يمكن الحصول على الرمز المميز للوصول باستخدام Azure REST API.
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام واجهة برمجة تطبيقات REST مع المكتبة المفضلة لديك.
بالنسبة للهوية المعينة من قبل المستخدم والهوية المعينة للنظام، توفر Azure App Service وAzure Container Apps نقطة نهاية REST داخلية متاحة لاسترجاع الرموز للهويات المدارة من خلال تعريف متغيرين للبيئة: IDENTITY_ENDPOINT و IDENTITY_HEADER. لمزيد من المعلومات، راجع مرجع نقطة نهاية REST.
احصل على الرمز المميز للوصول عن طريق إجراء طلب HTTP GET إلى نقطة نهاية الهوية، واستخدم https://ossrdbms-aad.database.windows.net كما resource في الاستعلام. بالنسبة للهوية المعينة من قبل المستخدم، يرجى تضمين معرف العميل من متغيرات البيئة المضافة بواسطة Service Connector في الاستعلام أيضا.
بالنسبة إلى كيان الخدمة، راجع طلب الرمز المميز للوصول من خدمة إلى خدمة Azure AD لمعرفة تفاصيل كيفية الحصول على الرمز المميز للوصول. جعل طلب POST نطاق https://ossrdbms-aad.database.windows.net/.default ومع معرف المستأجر ومعرف العميل وسر العميل لمدير الخدمة من متغيرات البيئة المضافة بواسطة Service Connector.
اجمع بين الرمز المميز للوصول وسلسلة اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector لإنشاء الاتصال.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
بالنسبة إلى Ruby، لا يوجد مكون إضافي أو مكتبة للاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة واستخدامه ككلمة مرور للاتصال بقاعدة البيانات. يمكن الحصول على الرمز المميز للوصول باستخدام Azure REST API.
تثبيت التبعيات:
gem install pg
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام REST API ومعلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. قم بدمجها لتأسيس الاتصال. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
توفر Azure App Service وAzure Container Apps نقطة نهاية REST متاحة داخليا لاسترجاع الرموز للهويات المدارة. لمزيد من المعلومات، راجع مرجع نقطة نهاية 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,
)
راجع طلب الرمز المميز للوصول من خدمة إلى خدمة Azure AD للاطلاع على مزيد من التفاصيل حول كيفية الحصول على رمز الوصول المميز لكيان الخدمة.
بعد ذلك، إذا قمت بإنشاء جداول وتسلسلات في خادم PostgreSQL المرن قبل استخدام Service Connector، فستحتاج إلى الاتصال كمالك ومنح الإذن لإنشاء <aad-username> بواسطة Service Connector. يجب أن يبدو اسم المستخدم من سلسلة الاتصال أو التكوين الذي تم تعيينه بواسطة Service Connector مثل aad_<connection name>. إذا كنت تستخدم مدخل Microsoft Azure، فحدد زر التوسيع بجوار Service Type العمود والحصول على القيمة. إذا كنت تستخدم Azure CLI، فتحقق من configurations إخراج أمر CLI.
ثم قم بتنفيذ الاستعلام لمنح الإذن
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><owner-password> هو مالك الجدول الموجود الذي يمكنه منح أذونات للآخرين.
<aad-username> هو المستخدم الذي تم إنشاؤه بواسطة Service Connector. استبدلها بالقيمة الفعلية.
تحقق من صحة النتيجة باستخدام الأمر :
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
سلسلة الاتصال
تحذير
توصي Microsoft باستخدام تدفق المصادقة الأكثر أمانا المتوفر. يتطلب تدفق المصادقة الموضح في هذا الإجراء درجة عالية جدا من الثقة في التطبيق، ويحمل مخاطر غير موجودة في تدفقات أخرى. يجب عليك استخدام هذا التدفق فقط عندما لا تكون التدفقات الأخرى الأكثر أمانا، مثل الهويات المدارة، قابلة للتطبيق.
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL سلسلة الاتصال |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة اتصال JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
| خصائص التطبيق |
الوصف |
مثال للقيمة |
spring.datasource.url |
عنوان URL لقاعدة البيانات |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
اسم مستخدم قاعدة البيانات |
<username> |
spring.datasource.password |
كلمة مرور قاعدة البيانات |
<password> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة اتصال psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_NAME |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_PASSWORD |
كلمة مرور قاعدة البيانات |
<database-password> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL سلسلة الاتصال |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_PASSWORD |
كلمة مرور قاعدة البيانات |
<password> |
AZURE_POSTGRESQL_DATABASE |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_PORT |
رقم المنفذ |
5432 |
AZURE_POSTGRESQL_SSL |
خيار SSL |
true |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة الاتصال PostgreSQL الأصلي ل PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة الاتصال Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_DATABASE |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_PORT |
رقم المنفذ |
5432 |
AZURE_POSTGRESQL_SSL |
خيار SSL |
true |
AZURE_POSTGRESQL_PASSWORD |
كلمة مرور قاعدة البيانات |
<password> |
التعليمة البرمجية العينة
راجع الخطوات والرمز أدناه للاتصال بقاعدة بيانات Azure ل PostgreSQL باستخدام سلسلة الاتصال.
- تثبيت التبعيات باتباع إرشادات Npgsql
- في التعليمات البرمجية، احصل على سلسلة اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
- تثبيت التبعيات باتباع إرشادات pgJDBC.
- في التعليمات البرمجية، احصل على سلسلة اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
String connectionString = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
Connection connection = null;
try {
connection = DriverManager.getConnection(connectionString);
System.out.println("Connection successful!");
} catch (SQLException e){
System.out.println(e.getMessage());
}
- قم بتثبيت وحدة Spring Cloud Azure Starter JDBC PostgreSQL عن طريق إضافة التبعيات التالية إلى ملفك
pom.xml . ابحث عن إصدار Spring Cloud Azure هنا.
<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>
- إعداد تطبيق Spring Boot، مزيد من التفاصيل في هذا القسم.
- تثبيت التبعيات باتباع إرشادات psycopg2.
- في التعليمات البرمجية، احصل على معلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
- تثبيت التبعيات باتباع إرشادات Djangoوإرشادات psycopg2.
pip install django
pip install psycopg2
- في ملف الإعداد، احصل على معلومات قاعدة بيانات PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
# in your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = os.getenv('AZURE_POSTGRESQL_PASSWORD')
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host,
'PORT': '5432', # Port is 5432 by default
'OPTIONS': {'sslmode': 'require'},
}
}
- تثبيت التبعيات:
go get github.com/lib/pq
- في التعليمات البرمجية، احصل على سلسلة اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
import (
"database/sql"
"fmt"
"os"
_ "github.com/lib/pq"
)
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
- تثبيت التبعيات:
npm install pg dotenv
- في التعليمات البرمجية، احصل على معلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
import { Client } from 'pg';
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: process.env.AZURE_POSTGRESQL_PASSWORD,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
- في التعليمات البرمجية، احصل على معلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- تثبيت التبعيات:
gem install pg
- في التعليمات البرمجية، احصل على معلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
require 'pg'
require 'dotenv/load'
begin
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'],
)
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
كيان الخدمة
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL سلسلة الاتصال |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة اتصال JDBC PostgreSQL |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| خصائص التطبيق |
الوصف |
مثال للقيمة |
spring.datasource.azure.passwordless-enabled |
تمكين المصادقة بدون كلمة مرور |
true |
spring.cloud.azure.credential.client-id |
معرف العميل الخاص بك |
<client-ID> |
spring.cloud.azure.credential.client-secret |
سر العميل الخاص بك |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
معرف المستأجر |
<tenant-ID> |
spring.datasource.url |
عنوان URL لقاعدة البيانات |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
اسم مستخدم قاعدة البيانات |
username |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة اتصال psycopg2 |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_NAME |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL سلسلة الاتصال |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_DATABASE |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_PORT |
رقم المنفذ |
5432 |
AZURE_POSTGRESQL_SSL |
خيار SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة الاتصال PostgreSQL الأصلي ل PHP |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
سلسلة الاتصال Ruby PostgreSQL |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| اسم متغير البيئة الافتراضي |
الوصف |
مثال للقيمة |
AZURE_POSTGRESQL_HOST |
عنوان URL لمضيف قاعدة البيانات |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
اسم مستخدم قاعدة البيانات |
<username> |
AZURE_POSTGRESQL_DATABASE |
اسم قاعدة البيانات |
<database-name> |
AZURE_POSTGRESQL_PORT |
رقم المنفذ |
5432 |
AZURE_POSTGRESQL_SSL |
خيار SSL |
true |
AZURE_POSTGRESQL_CLIENTID |
معرف العميل الخاص بك |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
سر العميل الخاص بك |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
معرف المستأجر |
<tenant-ID> |
التعليمة البرمجية العينة
راجع الخطوات والرمز أدناه للاتصال بقاعدة بيانات Azure ل PostgreSQL باستخدام كيان الخدمة.
بالنسبة ل .NET، لا يوجد مكون إضافي أو مكتبة لدعم الاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة باستخدام مكتبة العميل مثل Azure.Identity. ثم يمكنك استخدام الرمز المميز للوصول ككلمة مرور للاتصال بقاعدة البيانات. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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();
}
أضف التبعيات التالية في ملف pom.xml :
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
احصل على سلسلة الاتصال من متغيرات البيئة وأضف اسم المكون الإضافي للاتصال بقاعدة البيانات:
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);
لمزيد من المعلومات، راجع الموارد التالية:
تثبيت التبعيات:
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
احصل على الرمز المميز للوصول باستخدام azure-identity المكتبة واستخدم الرمز المميز ككلمة مرور. احصل على معلومات الاتصال من متغيرات البيئة المضافة بواسطة Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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)
تثبيت التبعيات:
pip install azure-identity
احصل على الرمز المميز للوصول باستخدام azure-identity المكتبة باستخدام متغيرات البيئة المضافة بواسطة Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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')
في ملف الإعداد، احصل على معلومات قاعدة بيانات Azure PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. استخدم accessToken المكتسبة في الخطوة السابقة للوصول إلى قاعدة البيانات.
# 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'},
}
}
تثبيت التبعيات:
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"
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام azidentity، ثم استخدمه ككلمة مرور للاتصال ب Azure PostgreSQL جنبا إلى جنب مع معلومات الاتصال التي يوفرها Service Connector. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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()
تثبيت التبعيات:
npm install --save @azure/identity
npm install --save pg
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام @azure/identity معلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. قم بدمجها لتأسيس الاتصال. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
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();
})();
بالنسبة إلى PHP، لا يوجد مكون إضافي أو مكتبة للاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة واستخدامه ككلمة مرور للاتصال بقاعدة البيانات. يمكن الحصول على الرمز المميز للوصول باستخدام Azure REST API.
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام واجهة برمجة تطبيقات REST مع المكتبة المفضلة لديك.
بالنسبة للهوية المعينة من قبل المستخدم والهوية المعينة للنظام، توفر Azure App Service وAzure Container Apps نقطة نهاية REST داخلية متاحة لاسترجاع الرموز للهويات المدارة من خلال تعريف متغيرين للبيئة: IDENTITY_ENDPOINT و IDENTITY_HEADER. لمزيد من المعلومات، راجع مرجع نقطة نهاية REST.
احصل على الرمز المميز للوصول عن طريق إجراء طلب HTTP GET إلى نقطة نهاية الهوية، واستخدم https://ossrdbms-aad.database.windows.net كما resource في الاستعلام. بالنسبة للهوية المعينة من قبل المستخدم، يرجى تضمين معرف العميل من متغيرات البيئة المضافة بواسطة Service Connector في الاستعلام أيضا.
بالنسبة إلى كيان الخدمة، راجع طلب الرمز المميز للوصول من خدمة إلى خدمة Azure AD لمعرفة تفاصيل كيفية الحصول على الرمز المميز للوصول. جعل طلب POST نطاق https://ossrdbms-aad.database.windows.net/.default ومع معرف المستأجر ومعرف العميل وسر العميل لمدير الخدمة من متغيرات البيئة المضافة بواسطة Service Connector.
اجمع بين الرمز المميز للوصول وسلسلة اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector لإنشاء الاتصال.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
بالنسبة إلى Ruby، لا يوجد مكون إضافي أو مكتبة للاتصالات بدون كلمة مرور. يمكنك الحصول على رمز وصول للهوية المدارة أو كيان الخدمة واستخدامه ككلمة مرور للاتصال بقاعدة البيانات. يمكن الحصول على الرمز المميز للوصول باستخدام Azure REST API.
تثبيت التبعيات:
gem install pg
في التعليمات البرمجية، احصل على الرمز المميز للوصول باستخدام REST API ومعلومات اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة خدمة Service Connector. قم بدمجها لتأسيس الاتصال. عند استخدام التعليمات البرمجية أدناه، قم بإلغاء التعليق على جزء مقتطف التعليمات البرمجية لنوع المصادقة الذي تريد استخدامه.
توفر Azure App Service وAzure Container Apps نقطة نهاية REST متاحة داخليا لاسترجاع الرموز للهويات المدارة. لمزيد من المعلومات، راجع مرجع نقطة نهاية 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,
)
راجع طلب الرمز المميز للوصول من خدمة إلى خدمة Azure AD للاطلاع على مزيد من التفاصيل حول كيفية الحصول على رمز الوصول المميز لكيان الخدمة.
بعد ذلك، إذا قمت بإنشاء جداول وتسلسلات في خادم PostgreSQL المرن قبل استخدام Service Connector، فستحتاج إلى الاتصال كمالك ومنح الإذن لإنشاء <aad-username> بواسطة Service Connector. يجب أن يبدو اسم المستخدم من سلسلة الاتصال أو التكوين الذي تم تعيينه بواسطة Service Connector مثل aad_<connection name>. إذا كنت تستخدم مدخل Microsoft Azure، فحدد زر التوسيع بجوار Service Type العمود والحصول على القيمة. إذا كنت تستخدم Azure CLI، فتحقق من configurations إخراج أمر CLI.
ثم قم بتنفيذ الاستعلام لمنح الإذن
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><owner-password> هو مالك الجدول الموجود الذي يمكنه منح أذونات للآخرين.
<aad-username> هو المستخدم الذي تم إنشاؤه بواسطة Service Connector. استبدلها بالقيمة الفعلية.
تحقق من صحة النتيجة باستخدام الأمر :
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
الخطوات التالية
اتبع البرامج التعليمية المذكورة أدناه لمعرفة المزيد عن Service Connector.