مشاركة عبر


دمج قاعدة بيانات Azure لـ PostgreSQL مع Service Connector

تتناول هذه المقالة أساليب المصادقة المدعومة والعملاء ونموذج التعليمات البرمجية التي يمكنك استخدامها لتوصيل تطبيقاتك بقاعدة بيانات 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 باستخدام هوية مدارة معينة من قبل النظام.

بالنسبة ل .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();
}

بعد ذلك، إذا قمت بإنشاء جداول وتسلسلات في خادم 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 باستخدام هوية مدارة يعينها المستخدم.

بالنسبة ل .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();
}

بعد ذلك، إذا قمت بإنشاء جداول وتسلسلات في خادم 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 باستخدام سلسلة الاتصال.

  1. تثبيت التبعيات باتباع إرشادات Npgsql
  2. في التعليمات البرمجية، احصل على سلسلة اتصال PostgreSQL من متغيرات البيئة المضافة بواسطة Service Connector.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

كيان الخدمة

اسم متغير البيئة الافتراضي ‏‏الوصف مثال للقيمة
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 باستخدام كيان الخدمة.

بالنسبة ل .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();
}

بعد ذلك، إذا قمت بإنشاء جداول وتسلسلات في خادم 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.