لإنشاء قاعدة بيانات أحادية في مدخل Microsoft Azure، يبدأ هذا بداية سريعة في صفحة Azure SQL.
استعرض للوصول إلى صفحة تحديد خيار نشر SQL.
أسفل SQL databases، قم بتعيين "Resource type" إلى "Single database"، ثم حدد "Create" .
في علامة التبويب Basics في نموذج Create SQL Database أسفل Project details، حدد اشتراك Azure الذي تريد استخدامه.
بالنسبة إلى Resource group، حدد "Create new" وأدخل myResourceGroup، ثم حدّد "OK" .
بالنسبة لاسم قاعدة البيانات أدخل demo.
بالنسبة للخادم، حدد إنشاء جديد. قم بتعبئة نموذج خادم جديد بالقيم التالية:
-
Server name: أدخل mysqlserver وأضف بعض الأحرف للتفرد. لا يمكننا توفير اسم خادم محدد لاستخدامه لأن أسماء الخوادم يجب أن تكون فريدة عالمياً لجميع الخوادم في Azure، وليس فقط فريدة من نوعها داخل الاشتراك. لذا، أدخل اسماً على غرار mysqlserver12345 وسيمكنك المدخل من معرفة ما إذا كان متوفراً أم لا.
-
Server admin login: أدخل azureuser.
-
Password: أدخل كلمة مرور تفي بالمتطلبات. أدخلها مرة أخرى في المربع Confirm password.
-
Location: حدد موقعاً من القائمة المنسدلة.
-
السماح لخدمات Azure بالوصول إلى هذا الخادم: حدد هذا الخيار لتمكين الوصول إلى التخزين الكلي.
حدد "OK".
اترك Want to use SQL elastic pool معيناً إلى "No" .
ضمن "Compute + storage"، حدد "Configure database".
يستخدم هذا بداية سريعة قاعدة بيانات بلا خادم، لذا حدد "Serverless"، ثم حدد "Apply" .
في علامة التبويب NET.working"، بالنسبة إلى طريقة الاتصال، حدد "Public endpoint" .
بالنسبة إلى Firewall rules، قم بتعيين إضافة عنوان IP الحالي للعميل إلى "Yes" . اترك Allow Azure services and resources to access this server معيناً إلى "No" .
حدد Next: Security في أسفل الصفحة.
في علامة التبويب Security في جزء Ledger حدد الخيار Configure ledger.
في صفحة Configure ledger في الجزء Ledger حدد خانة الاختيار Enable for all future tables in this database. يضمن هذا الإعداد أن تكون كافة الجداول المستقبلية في قاعدة البيانات جداول دفتر الأستاذ. لهذا السبب، ستُظهِر كافة البيانات الموجودة في قاعدة البيانات أي دليل على التلاعب. بشكل افتراضي، سيتم إنشاء جداول جديدة كجداول دفتر الأستاذ القابلة للتحديث، حتى إذا لم تقم بتحديد LEDGER = ON في CREATE TABLE. يمكنك أيضاً ترك هذا الخيار غير محدد. ثم يطلب منك تمكين وظيفة دفتر الأستاذ على أساس كل جدول عند إنشاء جداول جديدة باستخدام Transact-SQL.
في المقطع "تخزين ملخص"، يتم تحديد تمكين التخزين التلقائي الموجز تلقائياً. ثم يتم إنشاء حساب تخزين Azure جديد وحاوية حيث يتم تخزين الملخصات الخاصة بك.
اختر تطبيق.
حدد Review + create من أسفل الصفحة.
من خلال صفحة "Review + create"، حدد "Create" .
ستقوم بإنشاء مجموعة موارد، وخادم قاعدة بيانات منطقي، وقاعدة بيانات أحادية لدفتر الأستاذ، وتكوين تحميل شفرة تجزئة دفتر الأستاذ باستخدام The Azure CLI.
تشغيل Azure Cloud Shell
Azure Cloud Shell عبارة عن واجهة تفاعلية مجانية يُمكنك استخدامها لتنفيذ الخطوات الواردة في هذه المقالة. يحتوي على أدوات Azure الشائعة والمثبتة مسبقًا والتي تم تكوينها للاستخدام مع حسابك.
لفتح Cloud Shell، ما عليك سوى تحديد "Try it" من الزاوية العليا اليسرى لكتلة التعليمة البرمجية. يمكنك أيضاً تشغيل Cloud Shell في علامة تبويب مستعرض منفصلة بالانتقال إلى https://shell.azure.com. حدد "Copy" لنسخ كتل التعليمة البرمجية، ولصقها في Cloud Shell، ثم اضغط على "enter" لتشغيلها.
تعيين قيم المعلمات
يتم استخدام القيم التالية في الأوامر اللاحقة لإنشاء قاعدة البيانات والموارد المطلوبة. يجب أن تكون أسماء الخوادم وأسماء مواقع التخزين فريدة بشكل عمومي عبر كل Azure حتى يتم استخدام دالة $RANDOM لإنشاء اسم الخادم واسم موقع التخزين.
يجب أن يكون اسم المورد فريداً في اشتراكك. استبدل <your resource group name> باسم فريد، واستبدل <your subscription ID> بـSubscription ID الخاص بك.
استبدال قيم 0.0.0.0 في نطاق عنوان IP لمطابقة البيئة الخاصة بك.
استبدل westeurope باسم منطقة Azure المفضلة لديك.
resourceGroupName="<your resource group name>"
location="westeurope"
serverName="mysqlserver"-$RANDOM
databaseName="myLedgerDatabase"
storageAccountName="mystorage"$RANDOM
subscription="<your subscription ID>"
adminLogin=azureuser
adminPassword=Azure1234567!
serverResourceId="/subscriptions/$subscription/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName"
# The ip address range that you want to allow to access your server
startIP=0.0.0.0
endIP=0.0.0.0
# Set variables for your digest storage location
storageAccountName="mystorage"$RANDOM
storageAccountURL1="https://"
storageAccountURL3=".blob.core.windows.net"
storageAccountURL=$storageAccountURL1$storageAccountName$storageAccountURL3
storageAccountResourceId="/subscriptions/$subscription/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"
# Show resource names
echo "Resource group name is" $resourceGroupName
echo "Server name is" $serverName
echo "Database name is" $databaseName
echo "Storage account name is" $storageAccountName
قم بإنشاء مجموعة موارد
أنشئ مجموعة موارد باستخدام الأمر az group create. مجموعة موارد Azure هي حاوية منطقية يتم بها نشر موارد Azure وإدارتها.
az group create --name $resourceGroupName --location $location
إنشاء خادم بهوية مُدارة
إنشاء خادم باستخدام الأمر az sql server create. يقوم الأمر بإنشاء الخادم مع تعيين هوية مُدارة.
az sql server create \
--name $serverName \
--resource-group $resourceGroupName \
--location $location \
--admin-user $adminLogin \
--admin-password $adminPassword \
--assign-identity
يخزن هذا الأمر المعرف في متغير، والذي يستخدم لاحقاً لمنح أذونات الخادم لتحميل تجزئة دفتر الأستاذ.
# Retrieves the assigned identity to be used when granting the server access to the storage account
principalId=`az sql server show \
--name $serverName \
--resource-group $resourceGroupName \
--query identity.principalId \
--output tsv`
قم بإنشاء قاعدة جدار الحماية باستخدام الأمر az sql server firewall-rule create.
az sql server firewall-rule create \
--resource-group $resourceGroupName \
--server $serverName \
-n AllowYourIp \
--start-ip-address $startIP \
--end-ip-address $endIP
إنشاء واحدة من قاعدة بيانات دفتر الأستاذ
قم بإنشاء قاعدة بيانات لدفتر الأستاذ باستخدام الأمر az sql db create. يقوم الأمر التالي بإنشاء قاعدة بيانات بلا خادم مع تمكين دفتر الأستاذ.
az sql db create \
--resource-group $resourceGroupName \
--server $serverName \
--name $databaseName \
--edition GeneralPurpose \
--family Gen5 \
--capacity 2 \
--compute-model Serverless \
--ledger-on
إنشاء حساب تخزين
قم بإنشاء موقع تخزين لتخزين تجزئة دفتر الأستاذ باستخدام الأمر az storage account create.
az storage account create \
--name $storageAccountName \
--resource-group $resourceGroupName \
--location $location \
--sku Standard_GRS \
--kind StorageV2
منح الخادم أذونات لكتابة تجزئة دفتر الأستاذ
قم بتعيين الهوية المُدارة للخادم إلى دور Storage Blob Data Contributor باستخدام الأمر az role assignment create. هذا يمنح خادم SQL الأذونات المناسبة لنشر تجزئة قاعدة البيانات إلى موقع التخزين.
az role assignment create \
--assignee-object-id $principalId \
--assignee-principal-type "ServicePrincipal" \
--role "Storage Blob Data Contributor" \
--scope $storageAccountResourceId
تمكين تحميلات تجزئة قاعدة البيانات
قم بتحديث قاعدة البيانات لبدء تحميل تجزئة دفتر الأستاذ إلى موقع التخزين باستخدام الأمر az sql db ledger-Digest-uploads enable.
az sql db ledger-digest-uploads enable \
--name $databaseName \
--resource-group $resourceGroupName \
--server $serverName \
--endpoint $storageAccountURL
لحماية التجزئة من الحذف أو التحديث، يوصى بتكوين نهج احتفاظ يستند إلى الوقت على حاوية sqldbledgerdigests باستخدام الأمرين az storage container immutability-policy create وaz storage container immutability-policy lock. يجب أن يسمح النهج بنقل المعلومات المحمية للكائنات الثنائية كبيرة الحجم. هذا يضمن أن خادم قاعدة البيانات يمكنه إضافة عنصر حظر المستوى والذي يحتوي على تجزئة جديدة إلى كائن ثنائي كبير الحجم موجود، بينما يقوم بتعطيل أو حذف شفرات التجزئة أو تحديثها لفترة الثبات المحددة.
هام
يستخدم المثال أدناه قيمة فترة الثبات ليوم واحد. في بيئة التشغيل، يجب استخدام قيمة أكبر بكثير.
ملاحظة
بمجرد بدء تحميل شفرات التجزئة لقاعدة البيانات إلى موقع التخزين، لن تتمكن من حذف موقع التخزين حتى تنتهي نهج الثبات. يمكن تخطي إعداد نهج الثبات إذا كنت تخطط لحذف الموارد فوراً بعد QuickStart.
لمزيد من المعلومات عن نهج الاستيفاء استناداً إلى الوقت للحاويات، راجع تكوين نُهج الثبات للحاويات.
az storage container immutability-policy create \
--resource-group $resourceGroupName \
--account-name $storageAccountName \
--container-name sqldbledgerdigests \
--period 1 \
--allow-protected-append-writes true
# Retrieves the etag value of the policy to be used when the policy is locked
etag=`az storage container immutability-policy show \
--account-name $storageAccountName \
--container-name sqldbledgerdigests \
--query etag \
--output tsv`
etag="${etag/$'\r'/}"
az storage container immutability-policy lock \
--resource-group $resourceGroupName \
--account-name $storageAccountName \
--container-name sqldbledgerdigests \
--if-match $etag
ستقوم بإنشاء مجموعة موارد، وخادم قاعدة بيانات منطقي، وقاعدة بيانات أحادية لدفتر الأستاذ، وتكوين تحميل شفرة تجزئة دفتر الأستاذ باستخدام Windows PowerShell.
تشغيل Azure Cloud Shell
Azure Cloud Shell عبارة عن واجهة تفاعلية مجانية يُمكنك استخدامها لتنفيذ الخطوات الواردة في هذه المقالة. يحتوي على أدوات Azure الشائعة والمثبتة مسبقًا والتي تم تكوينها للاستخدام مع حسابك.
لفتح Cloud Shell، ما عليك سوى تحديد "Try it" من الزاوية العليا اليسرى لكتلة التعليمة البرمجية. يمكنك أيضاً تشغيل Cloud Shell في علامة تبويب مستعرض منفصلة بالانتقال إلى https://shell.azure.com. حدد "Copy" لنسخ كتل التعليمة البرمجية، ولصقها في Cloud Shell، ثم اضغط على "enter" لتشغيلها.
تعيين قيم المعلمات
يتم استخدام القيم التالية في الأوامر اللاحقة لإنشاء قاعدة البيانات والموارد المطلوبة. يجب أن تكون أسماء الخوادم وأسماء مواقع التخزين فريدة بشكل عمومي عبر كل Azure حتى يستخدم الأمر Get-Random لإنشاء اسم الخادم واسم موقع التخزين.
يجب أن يكون اسم المورد فريداً في اشتراكك. استبدل <your resource group name> باسم فريد.
استبدال قيم 0.0.0.0 في نطاق عنوان IP لمطابقة البيئة الخاصة بك.
استبدل westeurope باسم منطقة Azure المفضلة لديك.
# Set variables for your server and database
$resourceGroupName = "<your resource group name>"
$location = "westeurope"
$serverName = "mysqlserver-$(Get-Random)"
$databaseName = "myLedgerDatabase"
$storageAccountName = "mystorage$(Get-Random)"
# The ip address range that you want to allow to access your server
$startIP = "0.0.0.0"
$endIP = "0.0.0.0"
# Show resource names
Write-host "Resource group name is" $resourceGroupName
Write-host "Server name is" $serverName
Write-host "Storage account name is" $storageAccountName
قم بإنشاء مجموعة موارد
إنشاء مجموعة موارد Azure باستخدام New-AzResourceGroup. تكون مجموعة الموارد عبارة عن حاوية منطقية يتم فيها نشر موارد Azure وإدارتها.
Write-host "Creating resource group..."
$resourceGroup = New-AzResourceGroup `
-Name $resourceGroupName `
-Location $location
$resourceGroup
إنشاء خادم
إنشاء خادم باستخدام الأمر New-AzSqlServer cmdlet.
ينشئ الأمر الخادمَ بهوية مُدارة معينة، والتي ستحتاجها لاحقاً لمنح أذونات وصول الخادم لتحميل شفرات التجزئة لدفتر الأستاذ.
عند المطالبة، أدخل اسم مستخدم مسؤول SQL وكلمة مرور.
Write-host "Creating primary server..."
$server = New-AzSqlServer `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-Location $location `
-AssignIdentity `
-SqlAdministratorCredentials (Get-Credential)
$server
إنشاء قاعدة جدار الحماية
إنشاء قاعدة جدار حماية للخادم باستخدام الأمر New-AzSqlServerFirewallRule cmdlet.
Write-host "Configuring server firewall rule..."
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIP -EndIpAddress $endIP
$serverFirewallRule
إنشاء واحدة من قاعدة بيانات دفتر الأستاذ
أنشئ قاعدة بيانات أحادية لدفتر الأستاذ باستخدام الأمر New-AzSqlDatabase.
المثال أدناه ينشئ قاعدة بيانات بلا خادم.
Write-host "Creating a gen5 2 vCore serverless ledger database..."
$database = New-AzSqlDatabase -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Edition GeneralPurpose `
-ComputeModel Serverless `
-ComputeGeneration Gen5 `
-VCore 2 `
-MinimumCapacity 2 `
-EnableLedger
$database
إنشاء حساب تخزين
أنشئ موقع تخزين لتخزين تجزئة دفتر الأستاذ باستخدام الأمر New-AzStorageAccount.
Write-host "Creating a storage account for ledger digests..."
$storage = New-AzStorageAccount -ResourceGroupName $resourceGroupName `
-Name $storageAccountName `
-Location $location `
-SkuName Standard_RAGRS `
-Kind StorageV2 `
-AccessTier Hot
$storage
منح الخادم أذونات لكتابة تجزئة دفتر الأستاذ
قم بتعيين الهوية المُدارة للخادم إلى دور Storage Blob Data Contributor باستخدام الأمر New-AzRoleAssignment. هذا يمنح خادم SQL الأذونات المناسبة لنشر تجزئة قاعدة البيانات إلى موقع التخزين.
Write-host "Granting the server access to the storage account..."
$assignment = New-AzRoleAssignment `
-ObjectId $server.Identity.PrincipalId `
-RoleDefinitionName "Storage Blob Data Contributor" `
-ResourceGroupName $resourceGroupName `
-ResourceType "Microsoft.Storage/storageAccounts" `
-ResourceName $storageAccountName
$assignment
تمكين تحميلات تجزئة قاعدة البيانات
قم بتحديث قاعدة البيانات لبدء تحميل تجزئة دفتر الأستاذ إلى حساب التخزين، باستخدام الأمر Enable-AzSqlDatabaseLedgerDigestUpload. سيقوم خادم قاعدة البيانات بإنشاء حاوية جديدة، تسمى sqldbledgerdigests، داخل موقع التخزين وسيبدأ في كتابة تجزئة دفتر الأستاذ في الحاوية.
Write-host "Enabling ledger digest upload..."
$ledgerDigestUploadConfig = Enable-AzSqlDatabaseLedgerDigestUpload `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Endpoint $storage.PrimaryEndpoints.Blob
$ledgerDigestUploadConfig
لحماية تجزئة من الحذف أو التحديث، يوصى بتكوين نهج استيفاء استناداً إلى الوقت في حاوية sqldbledgerdigests باستخدام الأوامر Set-AzRmStorageContainerImmutabilityPolicy وLock-AzRmStorageContainerImmutabilityPolicy. يجب أن يسمح النهج بنقل المعلومات المحمية للكائنات الثنائية كبيرة الحجم. هذا يضمن أن خادم قاعدة البيانات يمكنه إضافة عنصر حظر المستوى والذي يحتوي على تجزئة جديدة إلى كائن ثنائي كبير الحجم موجود، بينما يقوم بتعطيل أو حذف شفرات التجزئة أو تحديثها لفترة الثبات المحددة.
هام
يستخدم المثال أدناه قيمة فترة الثبات ليوم واحد. في بيئة التشغيل، يجب استخدام قيمة أكبر بكثير.
ملاحظة
لن تتمكن من حذف الحاوية أو موقع التخزين خلال فترة الثبات المحددة.
لمزيد من المعلومات عن نهج الاستيفاء استناداً إلى الوقت للحاويات، راجع تكوين نُهج الثبات للحاويات.
Write-host "Configuring a time-based retention policy..."
$immutabilityPerdiod = 1
$containerName = "sqldbledgerdigests"
$policy = Set-AzRmStorageContainerImmutabilityPolicy `
-ResourceGroupName $resourceGroupName `
-StorageAccountName $storageAccountName `
-ContainerName $containerName `
-AllowProtectedAppendWrite $true `
-ImmutabilityPeriod $immutabilityPerdiod
Lock-AzRmStorageContainerImmutabilityPolicy `
-ResourceGroupName $resourceGroupName `
-StorageAccountName $storageAccountName `
-ContainerName $containerName `
-Etag $policy.Etag
الاحتفاظ بمجموعة الموارد والخادم وقاعدة بيانات مفردة للخطوات التالية. ستتعرف على كيفية استخدام ميزة دفتر الأستاذ في قاعدة البيانات باستخدام أساليب مختلفة.
عند الانتهاء من استخدام هذه الموارد، احذف مجموعة الموارد التي أنشأتها. يؤدي هذا الإجراء أيضاً إلى حذف الخادم وقاعدة البيانات المفردة داخله وموقع التخزين.