要建立單一資料庫,則使用 Azure 入口網站。
瀏覽至 [選取 SQL 部署選項] 頁面。
在 SQL 資料庫下,將資源類型設定為單一資料庫,然後選取 [建立]。
在 [建立 SQL 資料庫] 表單的 [基本] 索引標籤上,選取 [專案詳細資料] 底下您想要使用的 Azure 訂閱。
針對資源群組選取 [建立新的],輸入 myResourceGroup,然後選取 [確定]。
在 [資料庫名稱]的部分輸入 demo。
針對 [伺服器],選取 [新建]。 在 [新伺服器]表單中填入下列值︰
- 伺服器名稱:輸入 mysqlserver 並新增一些字元來表示唯一性。 由於伺服器名稱必須是 Azure 中所有伺服器的全域唯一名稱,而不只是訂用帳戶中的唯一名稱,因此我們無法提供要使用的確切伺服器名稱。 請輸入類似 mysqlserver12345 的值,入口網站會讓您知道輸入的值是否可以使用。
- 伺服器管理員登入:輸入 azureuser。
- 密碼: 輸入符合需求的密碼。 在 [確認密碼] 方塊中再次輸入。
- 位置:從下拉式清單中選取位置。
- 允許 Azure 服務存取此伺服器:選取此選項可啟用摘要儲存體的存取權。
選取 [確定]。
將您要使用 SQL 彈性集區設為否。
在計算 + 儲存體下,選取 [設定資料庫]。
本快速入門會使用無伺服器資料庫,因此請選取 [無伺服器],然後選取 [套用]。
在網路功能索引標籤的連線方法中,選取 [公用端點]。
針對 [防火牆規則],將 [新增目前的用戶端 IP 位址] 設定為 [是]。 將 [允許 Azure 服務和資源存取此伺服器] 設定為 [否]。
選取頁面底部的 [下一步:安全性]。
在 [安全性] 索引標籤的 [總帳] 區段中,選取 [設定總帳] 選項。
在 [設定總帳] 窗格的 [總帳] 區段中,選取 [針對此資料庫中的所有未來資料表啟用] 核取方塊。 此設定可確保資料庫中的所有未來資料表都會是總帳資料表。 基於這個理由,資料庫中的所有資料都會顯示任何竄改證據。 根據預設,即使您未在 CREATE TABLE 中指定 LEDGER = ON
,新資料表也會建立為可更新的總帳資料表。 您也可以取消選取此選項。 取消選取之後,當您使用 Transact-SQL 建立新的資料表時,都需要針對每個資料表啟用總帳功能。
[摘要儲存體] 區段中的 [Enable automatic digest storage] (啟用自動摘要儲存體) 會自動選取。 接下來會隨即建立新的 Azure 儲存體帳戶和容器,用以儲存您的摘要。
選取 [套用]。
選取頁面底部的 [檢閱 + 建立] 。
檢閱 [檢閱 + 建立] 頁面之後,選取 [建立]。
您將建立資源群組、邏輯資料庫伺服器、單一總賬資料庫,以及使用 Azure CLI 設定上傳總帳摘要。
啟動 Azure Cloud Shell
Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。
若要開啟 Cloud Shell,請選取程式碼區塊右上角的 [試試看]。 您也可以移至 https://shell.azure.com ,從另一個瀏覽器索引標籤啟動 Cloud Shell。 選取 [複製] 即可複製程式碼區塊,將它貼到 Cloud Shell 中,然後按 Enter 鍵加以執行。
設定參數值
後續的命令會使用下列值來建立資料庫和所需的資源。 伺服器名稱在所有 Azure 中必須是全域唯一的名稱,因此會使用 $RANDOM 函式來建立伺服器和儲存體帳戶名稱。
資源名稱在您的訂閱內必須是唯一的。 以唯一的名稱取代 <your resource group name>
,並以您的訂閱識別碼取代 <your subscription ID>
。
取代 IP 位址範圍中的 0.0.0.0 值,以符合您的特定環境。
以您慣用的 Azure 區域名稱取代 westeurope。
resourceGroupName="<your resource group name>"
location="westeurope"
serverName="mysqlserver"-$RANDOM
databaseName="myLedgerDatabase"
storageAccountName="mystorage"$RANDOM
subscription="<your subscription ID>"
adminLogin=azureuser
adminPassword=<password>
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
授與伺服器寫入總帳摘要的許可權限
使用 az role assignment create 命令,將伺服器的受控識別指派給儲存體 Blob 資料參與者角色。 這會為 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
若要保護摘要免於遭到刪除或更新,建議您使用 az storage container immutability-policy create 和 az storage container immutability-policy lock 命令,在 sqldbledgerdigests 容器上設定以時間為基礎的保留原則。 原則必須允許受保護的附加 Blob 寫入。 這可確保資料庫伺服器可以將包含新摘要的區塊新增至現有的 Blob,同時刪除或更新摘要會在指定的不變性期間停用。
重要
下列範例使用的不變性期間值為 1 天。 在生產環境中,您應該使用更大的值。
注意
一旦資料庫摘要開始上傳至儲存體帳戶,您就無法刪除儲存體帳戶,直到不變性原則到期為止。 如果您打算在此快速入門之後立即清除資源,則可以略過設定不變性原則。
如需容器以時間為基礎的保留原則的詳細資訊,請參閱設定容器的不變性原則。
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 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。
若要開啟 Cloud Shell,請選取程式碼區塊右上角的 [試試看]。 您也可以移至 https://shell.azure.com ,從另一個瀏覽器索引標籤啟動 Cloud Shell。 選取 [複製] 即可複製程式碼區塊,將它貼到 Cloud Shell 中,然後按 Enter 鍵加以執行。
設定參數值
後續的命令會使用下列值來建立資料庫和所需的資源。 伺服器名稱和儲存體帳戶在所有 Azure 中必須是全域唯一的名稱,因此會使用 Get-Random cmdlet 來建立伺服器和儲存體帳戶名稱。
資源名稱在您的訂閱內必須是唯一的。 將 <your resource group name>
更換為唯一名稱。
取代 IP 位址範圍中的 0.0.0.0 值,以符合您的特定環境。
以您慣用的 Azure 區域名稱取代 westeurope。
# 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
建立資源群組
使用 New-AzResourceGroup 來建立 Azure 資源群組。 資源群組是在其中部署與管理 Azure 資源的邏輯容器。
Write-host "Creating resource group..."
$resourceGroup = New-AzResourceGroup `
-Name $resourceGroupName `
-Location $location
$resourceGroup
建立伺服器
使用 New-AzSqlServer Cmdlet 建立伺服器。
此 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 Cmdlet 建立單一總帳資料庫。
下列範例會建立無伺服器資料庫。
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 Cmdlet 建立儲存體帳戶來儲存總帳摘要。
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
授與伺服器寫入總帳摘要的許可權限
使用 az role assignment create Cmdlet,將伺服器的受控識別指派給儲存體 Blob 資料參與者角色。 這會為 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 Cmdlet,更新資料庫以開始將總帳摘要上傳至儲存體帳戶。 資料庫伺服器會在儲存體帳戶內建立名為 sqldbledgerdigests 的新容器,並開始將總帳摘要寫入容器。
Write-host "Enabling ledger digest upload..."
$ledgerDigestUploadConfig = Enable-AzSqlDatabaseLedgerDigestUpload `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Endpoint $storage.PrimaryEndpoints.Blob
$ledgerDigestUploadConfig
若要保護摘要免於遭到刪除或更新,建議您使用 Set-AzRmStorageContainerImmutabilityPolicy 和 Lock-AzRmStorageContainerImmutabilityPolicy Cmdlet,在 sqldbledgerdigests 容器上設定以時間為基礎的保留原則。 原則必須允許受保護的附加 Blob 寫入。 這可確保資料庫伺服器可以將包含新摘要的區塊新增至現有的 Blob,同時刪除或更新摘要會在指定的不變性期間停用。
重要
下列範例使用的不變性期間值為 1 天。 在生產環境中,您應該使用更大的值。
注意
在指定的不變期間,您將無法刪除容器或儲存體帳戶。
如需容器以時間為基礎的保留原則的詳細資訊,請參閱設定容器的不變性原則。
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