إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يمكنك استخدام كل من الهويات المدارة المعينة من قبل النظام والمعينة من قبل المستخدم للمصادقة على قاعدة بيانات Azure لمثيل خادم PostgreSQL المرن. توضح لك هذه المقالة كيفية استخدام هوية مدارة معينة من قبل النظام لجهاز Azure الظاهري (VM) للوصول إلى قاعدة بيانات Azure لمثيل خادم مرن ل PostgreSQL. تتم إدارة الهويات المدارة تلقائيا بواسطة Azure وتمكنك من المصادقة على الخدمات التي تدعم مصادقة Microsoft Entra دون الحاجة إلى إدراج بيانات الاعتماد في التعليمات البرمجية الخاصة بك.
ستتعلم كيفية:
- امنح الجهاز الظاهري حق الوصول إلى مثيل خادم مرن لقاعدة بيانات Azure ل PostgreSQL.
- قم بإنشاء مستخدم في قاعدة البيانات التي تمثل الهوية المعينة من قبل النظام الظاهري.
- احصل على رمز مميز للوصول باستخدام هوية الجهاز الظاهري واستخدمه للاستعلام عن قاعدة بيانات Azure لمثيل خادم مرن PostgreSQL.
- قم بتنفيذ استرداد الرمز المميز في تطبيق مثال C#.
المتطلبات الأساسية
- إذا لم تكن معتادا على ميزة الهويات المدارة لموارد Azure، فراجع هذه النظرة العامة. إذا لم يكن لديك حساب Azure، فقم بالتسجيل للحصول على حساب مجاني قبل المتابعة.
- للقيام بإنشاء الموارد المطلوبة وإدارة الأدوار، يحتاج حسابك إلى أذونات "المالك" في النطاق المناسب (اشتراكك أو مجموعة الموارد). إذا كنت بحاجة إلى مساعدة في تعيين دور، فراجع تعيين أدوار Azure لإدارة الوصول إلى موارد اشتراك Azure.
- أنت بحاجة إلى جهاز Azure الظاهري (على سبيل المثال، تشغيل Ubuntu Linux) الذي ترغب في استخدامه للوصول إلى قاعدة البيانات الخاصة بك باستخدام الهوية المدارة
- أنت بحاجة إلى مثيل خادم مرن لقاعدة بيانات Azure ل PostgreSQL يحتوي على مصادقة Microsoft Entra
- لاتباع مثال C # ، أولا ، أكمل الدليل حول كيفية الاتصال ب C #
إنشاء هوية مدارة معينة من قبل النظام لجهازك الظاهري
يؤدي استخدام az vm identity assign مع الأمر identity assign إلى تمكين الهوية المعينة من قبل النظام لجهاز ظاهري موجود:
az vm identity assign -g myResourceGroup -n myVm
استرجع معرف التطبيق للهوية المدارة المعينة من قبل النظام، والتي تحتاجها في الخطوات القليلة التالية:
# Get the client ID (application ID) of the system-assigned managed identity
az ad sp list --display-name vm-name --query [*].appId --out tsv
إنشاء قاعدة بيانات Azure لمستخدم PostgreSQL لهويتك المدارة
الآن، اتصل كمستخدم مسؤول Microsoft Entra بقاعدة بيانات Azure لقاعدة بيانات الخادم المرنة ل PostgreSQL، وقم بتشغيل عبارات SQL التالية، واستبدلها <identity_name> باسم الموارد التي أنشأت لها هوية مدارة معينة من قبل النظام:
ملاحظة pgaadauth_create_principal يجب تشغيلها على قاعدة بيانات Postgres.
select * from pgaadauth_create_principal('<identity_name>', false, false);
يبدو النجاح مثل:
pgaadauth_create_principal
-----------------------------------
Created role for "<identity_name>"
(1 row)
لمزيد من المعلومات حول إدارة أدوار قاعدة البيانات الممكنة ل Microsoft Entra ID، راجع إدارة أدوار Microsoft Entra في قاعدة بيانات Azure ل PostgreSQL.
تتمتع الهوية المدارة الآن بإمكانية الوصول عند المصادقة باستخدام اسم الهوية كاسم دور والرمز المميز ل Microsoft Entra ككلمة مرور.
Note
إذا كانت الهوية المدارة غير صالحة، يتم إرجاع خطأ: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].
إذا رأيت خطأ مثل "لا توجد تطابقات مع الدالة..."، فتأكد من الاتصال بقاعدة postgres البيانات، وليس بقاعدة بيانات مختلفة قمت بإنشائها أيضا.
استرداد الرمز المميز للوصول من خدمة بيانات تعريف مثيل Azure
يمكن للتطبيق الخاص بك الآن استرداد رمز وصول مميز من خدمة بيانات تعريف مثيل Azure واستخدامه للمصادقة مع قاعدة البيانات.
يتم استرداد الرمز المميز هذا عن طريق تقديم HTTP طلب إلى http://169.254.169.254/metadata/identity/oauth2/token المعلمات التالية وتمريرها:
api-version=2018-02-01resource=https://ossrdbms-aad.database.windows.net-
client_id=CLIENT_ID(التي استردتها سابقا)
يمكنك استعادة نتيجة JSON تحتوي على access_token حقل - قيمة النص الطويل هذه هي الرمز المميز للوصول إلى الهوية المدارة الذي يجب عليك استخدامه ككلمة مرور عند الاتصال بقاعدة البيانات.
لأغراض الاختبار، يمكنك تشغيل الأوامر التالية في shell الخاص بك.
Note
لاحظ أنك بحاجة إلى curlتثبيت ، jq، وتثبيت psql العميل.
# Retrieve the access token
export PGPASSWORD=`curl -s 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fossrdbms-aad.database.windows.net&client_id=CLIENT_ID' -H Metadata:true | jq -r .access_token`
# Connect to the database
psql -h SERVER --user USER DBNAME
أنت الآن متصل بقاعدة البيانات التي قمت بتكوينها مسبقا.
الاتصال باستخدام الهوية المدارة
يوضح هذا القسم كيفية الحصول على رمز وصول باستخدام الهوية المدارة المعينة من قبل المستخدم للجهاز الظاهري واستخدامه لاستدعاء قاعدة بيانات Azure لمثيل خادم PostgreSQL المرن. تدعم قاعدة بيانات Azure ل PostgreSQL أصلا مصادقة Microsoft Entra، بحيث يمكنها قبول رموز الوصول المميزة التي تم الحصول عليها باستخدام الهويات المدارة لموارد Azure مباشرة. عند إنشاء اتصال بقاعدة بيانات Azure ل PostgreSQL، يمكنك تمرير الرمز المميز للوصول في حقل كلمة المرور.
الاتصال باستخدام الهوية المدارة في Python
للحصول على مثال على التعليمات البرمجية Python، راجع التشغيل السريع: استخدام Python للاتصال بالبيانات والاستعلام عنها في قاعدة بيانات Azure ل PostgreSQL
الاتصال باستخدام الهوية المدارة في Java
للحصول على مثال على التعليمات البرمجية Java، راجع التشغيل السريع: استخدام Java وJDBC مع قاعدة بيانات Azure ل PostgreSQL
الاتصال باستخدام الهوية المدارة في C#
فيما يلي مثال على التعليمات البرمجية .NET لفتح اتصال بقاعدة بيانات Azure لمثيل خادم PostgreSQL المرن باستخدام رمز وصول مميز. يجب تشغيل هذه التعليمات البرمجية على الجهاز الظاهري لاستخدام الهوية المدارة المعينة من قبل النظام للحصول على رمز مميز للوصول من معرف Microsoft Entra. استبدل قيم HOST وUSER (ب <identity_name>) و DATABASE.
using Azure.Identity;
using Npgsql;
using System;
class Program
{
static void Main(string[] args)
{
try
{
// Obtain an access token using the system-assigned managed identity
var tokenCredential = new DefaultAzureCredential();
var accessToken = tokenCredential.GetToken(
new Azure.Core.TokenRequestContext(new[] { "https://ossrdbms-aad.database.windows.net/.default" })
);
// Build the connection string
string host = "your-server-name.postgres.database.azure.com"; // Replace with your flexible server's host
string database = "your-database-name"; // Replace with your database name
string user = "<identity_name>"; // Replace with your identity name (e.g., "myManagedIdentity")
var connectionString = $"Host={host};Database={database};Username={user};Password={accessToken.Token};SSL Mode=Require;Trust Server Certificate=true";
// Open a connection to the database
using var connection = new NpgsqlConnection(connectionString);
connection.Open();
Console.WriteLine("Connection successful!");
// Optional: Perform a simple query
using var command = new NpgsqlCommand("SELECT version();", connection);
using var reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine($"PostgreSQL version: {reader.GetString(0)}");
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
يجب ملء العناصر النائبة التالية:
- HOST: استبدل your-server-name.postgres.database.azure.com باسم مضيف المثيل الخاص بك.
- المستخدم: استبدل <identity_name> باسم هويتك المدارة.
-
DATABASEاستبدل اسم قاعدة البيانات الخاص بك باسم قاعدة بيانات Azure لمثيل PostgreSQL.: - مصادقة Microsoft Entra: تستخدم التعليمات البرمجية الهوية المدارة المعينة من قبل النظام للجهاز الظاهري لجلب رمز وصول مميز من معرف Microsoft Entra.
عند التشغيل ، يعطي هذا الأمر إخراجا مثل هذا:
Getting access token from Azure AD...
Opening connection using access token...
Connected!
Postgres version: PostgreSQL 11.11, compiled by Visual C++ build 1800, 64-bit