إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يمكنك استخدام كل من الهويات المدارة المعينة من قبل النظام والمخصصة من قبل المستخدم للمصادقة على خادم مرن قاعدة بيانات Azure لـ PostgreSQL. توضح هذه المقالة كيفية استخدام هوية مدارة معينة من قبل النظام لجهاز ظاهري Azure (VM) للوصول إلى خادم مرن قاعدة بيانات Azure لـ PostgreSQL. تدير Azure الهويات المدارة تلقائيا وتمكنك من المصادقة على الخدمات التي تدعم مصادقة Microsoft Entra دون الحاجة إلى إدراج بيانات الاعتماد في التعليمات البرمجية الخاصة بك.
ستتعلم كيفية:
- امنح الجهاز الظاهري الخاص بك حق الوصول إلى خادم مرن قاعدة بيانات Azure لـ PostgreSQL.
- قم بإنشاء مستخدم في قاعدة البيانات التي تمثل الهوية المعينة من قبل النظام الظاهري.
- احصل على رمز مميز للوصول باستخدام هوية الجهاز الظاهري واستخدمه للاستعلام عن خادم مرن قاعدة بيانات Azure لـ PostgreSQL.
- قم بتنفيذ استرداد الرمز المميز في تطبيق مثال C#.
Prerequisites
- إذا لم تكن على دراية بالهويات المُدارة لميزة موارد 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 ككلمة مرور.
ملاحظة
إذا كانت الهوية المدارة غير صالحة، يتم إرجاع خطأ: 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 الخاص بك.
ملاحظة
لاحظ أنك بحاجة إلى 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 ID. استبدل قيم 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باسم مضيف الخادم الخاص بك. -
USER: استبدل<identity_name>باسم هويتك المدارة. -
DATABASE: استبدلyour-database-nameباسم خادمك المرن قاعدة بيانات 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