Azure portal での単一データベースの作成方法:
[Select SQL deployment option](SQL デプロイ オプションの選択) ページを参照します。
[SQL データベース] で、 [リソースの種類] を [単一データベース] に設定し、 [作成] を選択します。
[SQL データベースの作成] フォームの [基本] タブにある [プロジェクトの詳細] で、使用する Azure サブスクリプションを選択します。
[リソース グループ] で、 [新規作成] を選択し、「myResourceGroup」と入力して、 [OK] を選択します。
[データベース名] に「demo」と入力します。
[サーバー] の [新規作成] を選択します。 [新しいサーバー] フォームに次の値を入力します。
- [サーバー名] : 「mysqlserver」と入力し、一意にするためにいくつかの文字を追加します。 サーバー名は、サブスクリプション内で一意ではなく、Azure のすべてのサーバーに対してグローバルに一意である必要があるため、正確なサーバー名をここに示すことはできません。 mysqlserver12345 のように入力してから、利用可能かどうかをポータルで確認できます。
- サーバー管理者ログイン:「azureuser」と入力します。
- パスワード: 要件を満たすパスワードを入力します。 [パスワードの確認入力] ボックスにもう一度入力します。
- [場所] :ドロップダウン リストから場所を選択します。
- [Allow Azure services to access this server](このサーバーへの Azure サービスのアクセスを許可する) : ダイジェスト ストレージへのアクセスを有効にするには、このオプションを選択します。
[OK] を選択します。
[SQL エラスティック プールを使用しますか?] を [いいえ] に設定したままにします。
[コンピューティングとストレージ] で、 [データベースの構成] を選択します。
このクイックスタートではサーバーレス データベースを使用しているので、 [サーバーレス] を選択し、 [適用] を選択します。
[ネットワーク] タブの [接続方法] で、 [パブリック エンドポイント] を選択します。
[ファイアウォール規則] で、 [現在のクライアント IP アドレスを追加する] を [はい] に設定します。 [Azure サービスおよびリソースにこのサーバー グループへのアクセスを許可する] を [いいえ] に設定したままにします。
ページの下部で [次へ: セキュリティ] を選択します。
[セキュリティ] タブの [台帳] セクションで、 [台帳の構成] オプションを選択します。
[台帳の構成] ペインの [台帳] セクションで、 [Enable for all future tables in this database](このデータベースの将来のテーブルすべてで有効にする) チェックボックスを選択します。 この設定により、以降、データベース内のすべてのテーブルが台帳テーブルになります。 このため、データベース内のすべてのデータには、改ざんの証拠が示されるようになります。 既定では、CREATE TABLE で LEDGER = ON
を指定しない場合でも、新しいテーブルは更新可能な台帳テーブルとして作成されます。 このオプションをオフのままにすることもできます。 この場合、Transact-SQL を使用して新しいテーブルを作成する際に、テーブルごとに台帳機能を有効にする必要があります。
[Digest Storage](ダイジェスト ストレージ) セクションでは、 [Enable automatic digest storage](自動ダイジェスト ストレージを有効にする) が自動的に選択されます。 これで、ダイジェストが格納される新しい Azure Storage アカウントとコンテナーが作成されます。
[適用] を選択します。
ページ下部にある [確認と作成] を選択します。
[確認と作成] ページで、確認後、 [作成] を選択します。
リソース グループ、論理データベース サーバー、単一台帳データベースを作成し、Azure CLI を使用して台帳ダイジェストのアップロードを構成します。
Azure Cloud Shell を起動する
Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。
Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。 https://shell.azure.com に移動して、別のブラウザー タブで Cloud Shell を起動することもできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けます。その後、Enter キーを押してそれを実行します。
パラメーターの値を設定する
次の値は、データベースと必要なリソースを作成するために、後続のコマンドで使用されます。 サーバー名とストレージ アカウント名は、すべての Azure でグローバルに一意である必要があるため、サーバー名とストレージ アカウント名の作成に $RANDOM 関数が使用されます。
リソース名は、サブスクリプション内で一意である必要があります。 <your resource group name>
を一意の名前に、<your subscription ID>
をサブスクリプション ID に置き換えます。
IP アドレス範囲の 0.0.0.0 の値を、お使いの環境に合わせて置き換えます。
westeurope を任意の Azure リージョン名に置き換えます。
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
マネージド ID を持つサーバーを作成する
az sql server create コマンドを使用してサーバーを作成します。 コマンドによって、マネージド ID が割り当てられたサーバーが作成されます。
az sql server create \
--name $serverName \
--resource-group $resourceGroupName \
--location $location \
--admin-user $adminLogin \
--admin-password $adminPassword \
--assign-identity
このコマンドは、ID を変数に格納します。これは、後で台帳ダイジェストをアップロードするためのアクセス許可をサーバーに付与するために使用されます。
# 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 データ共同作成者ロールにサーバーのマネージド ID を割り当てます。 これにより、ストレージ アカウントにデータベース ダイジェストを発行するための適切なアクセス許可が 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 日の不変期間の値を使用します。 運用環境では、さらに大きい値を使用する必要があります。
Note
データベース ダイジェストをストレージ アカウントにアップロードし始めると、不変ポリシーの期限が切れるまでストレージ アカウントを削除することはできません。 このクイックスタートの直後にリソースをクリーンアップする場合は、不変ポリシーの設定をスキップできます。
コンテナーに対する時間ベースのアイテム保持ポリシーの詳細については、「コンテナーの不変ポリシーを構成する」を参照してください。
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 を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。
Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。 https://shell.azure.com に移動して、別のブラウザー タブで Cloud Shell を起動することもできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けます。その後、Enter キーを押してそれを実行します。
パラメーターの値を設定する
次の値は、データベースと必要なリソースを作成するために、後続のコマンドで使用されます。 サーバー名とストレージ アカウント名は、すべての Azure でグローバルに一意である必要があるため、サーバー名とストレージ アカウント名の作成に Get-Random コマンドレットが使用されます。
リソース名は、サブスクリプション内で一意である必要があります。 <your resource group name>
を一意の名前に置き換えます。
IP アドレス範囲の 0.0.0.0 の値を、お使いの環境に合わせて置き換えます。
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
リソース グループを作成する
New-AzResourceGroup を使用して Azure リソース グループを作成します。 リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。
Write-host "Creating resource group..."
$resourceGroup = New-AzResourceGroup `
-Name $resourceGroupName `
-Location $location
$resourceGroup
サーバーの作成
New-AzSqlServer コマンドレットを使用してサーバーを作成します。
このコマンドレットによって、マネージド ID が割り当てられたサーバーが作成されます。このサーバーは、台帳ダイジェストをアップロードするためのアクセス許可を後でサーバーに付与するために必要になります。
メッセージが表示されたら、SQL 管理者のユーザー名とパスワードを入力します。
Write-host "Creating primary server..."
$server = New-AzSqlServer `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-Location $location `
-AssignIdentity `
-SqlAdministratorCredentials (Get-Credential)
$server
ファイアウォール規則を作成する
New-AzSqlServerFirewallRule コマンドレットを使用して、サーバーのファイアウォール規則を作成します。
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
台帳ダイジェストを書き込むアクセス許可をサーバーに付与する
New-AzRoleAssignment コマンドレットを使用して、ストレージ BLOB データ共同作成者ロールにサーバーのマネージド ID を割り当てます。 これにより、ストレージ アカウントにデータベース ダイジェストを発行するための適切なアクセス許可が 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
ダイジェストが削除または更新されないようにするには、Set-AzRmStorageContainerImmutabilityPolicy および Lock-AzRmStorageContainerImmutabilityPolicy コマンドレットを使用して、sqldbledgerdigests コンテナーに時間ベースのアイテム保持ポリシーを構成することをお勧めします。 ポリシーでは、保護された追加 BLOB の書き込みを許可する必要があります。 これにより、データベース サーバーは、新しいダイジェストを含むブロックを既存の BLOB に追加できるのに対し、ダイジェストの削除または更新は、指定された不変期間は無効になります。
重要
次の例では、1 日の不変期間の値を使用します。 運用環境では、さらに大きい値を使用する必要があります。
Note
指定された不変期間中は、コンテナーまたはストレージ アカウントを削除することはできません。
コンテナーに対する時間ベースのアイテム保持ポリシーの詳細については、「コンテナーの不変ポリシーを構成する」を参照してください。
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
これらのリソースの使用が終わったら、作成したリソース グループを削除します。 この操作により、サーバーとその中の単一データベース、ストレージ アカウントも削除されます。