Sie benötigen ein aktives Azure-Abonnement. Falls Sie nicht über ein Abonnement verfügen, können Sie ein kostenloses Konto erstellen.
Zum Erstellen einer Einzeldatenbank im Azure-Portal:
Navigieren Sie zur Seite SQL-Bereitstellungsoption auswählen.
Behalten Sie unter SQL-Datenbanken für Einzeldatenbank den festgelegten Wert Ressourcentyp bei, und wählen Sie Erstellen aus.
Wählen Sie auf der Registerkarte Grundeinstellungen des Formulars SQL-Datenbank erstellen unter Projektdetails das gewünschte Azure-Abonnement aus.
Wählen Sie bei Ressourcengruppe die Option Neu erstellen aus, geben Sie myResourceGroup ein, und wählen Sie OK aus.
Geben Sie für Datenbanknamedemo ein.
Wählen Sie unter Server die Option Neu erstellen aus. Füllen Sie das Formular Neuer Server mit den folgenden Werten aus:
- Servername: Geben Sie mysqlserver ein, und fügen Sie einige weitere Zeichen hinzu, um einen eindeutigen Wert zu erhalten. Wir können keinen exakten Servernamen zur Verwendung angeben, weil Servernamen für alle Server in Azure global eindeutig sein müssen (und nicht nur innerhalb eines Abonnements eindeutig sind). Geben Sie beispielsweise mysqlserver12345 ein. Sie werden vom Portal informiert, ob dieser Server verfügbar ist oder nicht.
- Serveradministratoranmeldung: Geben Sie azureuser ein.
- Kennwort: Geben Sie ein Kennwort ein, das die Anforderungen erfüllt. Geben Sie es erneut in das Feld Kennwort bestätigen ein.
- Standort: Wählen Sie in der Dropdownliste einen Standort aus.
- Allow Azure services to access this server (Zugriff durch Azure-Dienste auf diesen Server zulassen): Wählen Sie diese Option aus, um den Zugriff auf den Digestspeicher zuzulassen.
Klicken Sie auf OK.
Behalten Sie für Möchten Sie einen Pool für elastische SQL-Datenbanken verwenden? den Wert Nein bei.
Wählen Sie unter Compute + Speicher die Option Datenbank konfigurieren aus.
Weil in dieser Schnellstartanleitung eine serverlose Datenbank verwendet wird, wählen Sie Serverlos und dann Anwenden aus.
Wählen Sie auf der Registerkarte Netzwerk als Konnektivitätsmethode die Option Öffentlicher Endpunkt aus.
Legen Sie bei Firewallregeln die Option Aktuelle Client-IP-Adresse hinzufügen auf Ja fest. Behalten Sie für Azure-Diensten und -Ressourcen den Zugriff auf diese Servergruppe gestatten den Wert Nein bei.
Wählen Sie Weiter: Sicherheit unten auf der Seite aus.
Wählen Sie auf der Registerkarte Sicherheit im Abschnitt Ledger die Option Configure ledger (Ledger konfigurieren) aus.
Aktivieren Sie im Bereich Configure ledger (Ledger konfigurieren) im Abschnitt Ledger das Kontrollkästchen Enable for all future tables in this database (Für alle zukünftigen Tabellen in dieser Datenbank konfigurieren). Mit dieser Einstellung wird sichergestellt, dass alle zukünftigen Tabellen in der Datenbank Ledgertabellen sind. Aus diesem Grund werden bei allen Daten in der Datenbank sämtliche Anzeichen für Manipulationen angezeigt. Standardmäßig werden neue Tabellen als aktualisierbare Ledgertabellen erstellt, auch wenn Sie LEDGER = ON
in CREATE TABLE nicht angeben. Sie können diese Option auch deaktiviert lassen. Sie müssen die Ledgerfunktionalität dann später tabellenweise aktivieren, wenn Sie neue Tabellen mithilfe von Transact-SQL erstellen.
Im Abschnitt Digest Storage (Digestspeicher) wird Aktivieren des automatischen Digest-Speichers automatisch aktiviert. Anschließend werden ein neues Azure Storage-Konto und ein Container erstellt, in dem Ihre Digests gespeichert werden.
Wählen Sie Übernehmen.
Wählen Sie am unteren Rand der Seite die Option Bewerten + erstellen aus.
Wählen Sie nach der Überprüfung auf der Seite Überprüfen + erstellen die Option Erstellen aus.
Sie erstellen eine Ressourcengruppe, einen logischen Datenbankserver sowie eine einzelne Ledgerdatenbank und konfigurieren den Upload von Ledgerdigests mithilfe der Azure CLI.
Starten von Azure Cloud Shell
Azure Cloud Shell ist eine kostenlose interaktive Shell, mit der Sie die Schritte in diesem Artikel durchführen können. Sie verfügt über allgemeine vorinstallierte Tools und ist für die Verwendung mit Ihrem Konto konfiguriert.
Wählen Sie zum Öffnen von Cloud Shell oben rechts in einem Codeblock die Option Ausprobieren aus. Sie können Cloud Shell auch auf einem separaten Browsertab starten, indem Sie zu https://shell.azure.com navigieren. Wählen Sie Kopieren aus, um die Blöcke mit dem Code zu kopieren. Fügen Sie ihn anschließend in Cloud Shell ein, und drücken Sie die EINGABETASTE, um ihn auszuführen.
Festlegen von Parameterwerten
Mit den folgenden Werten werden in nachfolgenden Befehlen die Datenbank und die erforderlichen Ressourcen erstellt. Server- und Speicherkontonamen müssen in allen Azure-Regionen global eindeutig sein, damit die $RANDOM-Funktion verwendet wird, um den Servernamen und den Namen des Speicherkontos zu erstellen.
Der Ressourcenname muss in Ihrem Abonnement eindeutig sein. Ersetzen Sie <your resource group name>
durch einen eindeutigen Namen und <your subscription ID>
durch Ihre Abonnement-ID.
Ersetzen Sie die Werte „0.0.0.0“ im IP-Adressbereich entsprechend ihrer spezifischen Umgebung.
Ersetzen Sie westeurope durch den Namen Ihrer bevorzugten Azure-Region.
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
Erstellen einer Ressourcengruppe
Erstellen Sie mithilfe des Befehls az group create eine Ressourcengruppe. Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden.
az group create --name $resourceGroupName --location $location
Erstellen eines Servers mit einer verwalteten Identität
Erstellen Sie einen Server mit dem Befehl az sql server create. Der Befehl erstellt den Server mit einer zugewiesenen verwalteten Identität.
az sql server create \
--name $serverName \
--resource-group $resourceGroupName \
--location $location \
--admin-user $adminLogin \
--admin-password $adminPassword \
--assign-identity
Dieser Befehl speichert die ID in einer Variablen, die später verwendet wird, um dem Server Berechtigungen zum Hochladen von Ledgerdigests zu erteilen.
# 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`
Erstellen Sie eine Firewallregel mit dem Befehl 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
Erstellen einer einzelnen Ledgerdatenbank
Erstellen Sie eine Ledgerdatenbank mit dem Befehl az sql db create. Mit dem folgenden Befehl wird eine serverlose Datenbank mit aktiviertem Ledger erstellt.
az sql db create \
--resource-group $resourceGroupName \
--server $serverName \
--name $databaseName \
--edition GeneralPurpose \
--family Gen5 \
--capacity 2 \
--compute-model Serverless \
--ledger-on
Speicherkonto erstellen
Erstellen Sie mit dem Befehl az storage account create ein Speicherkonto zum Speichern von Ledgerdigests.
az storage account create \
--name $storageAccountName \
--resource-group $resourceGroupName \
--location $location \
--sku Standard_GRS \
--kind StorageV2
Erteilen der Serverberechtigungen zum Schreiben von Ledgerdigests
Weisen Sie die verwaltete Identität des Servers der Rolle Speicherblob-Datenmitwirkender mit dem Befehl az role assignment create zu. Dadurch erhält der SQL die entsprechenden Berechtigungen zum Veröffentlichen von Datenbankdigests im Speicherkonto.
az role assignment create \
--assignee-object-id $principalId \
--assignee-principal-type "ServicePrincipal" \
--role "Storage Blob Data Contributor" \
--scope $storageAccountResourceId
Aktivieren von Datenbankdigestuploads
Aktualisieren Sie die Datenbank, um mit dem Hochladen von Ledgerdigests in das Speicherkonto zu beginnen, indem Sie den Befehl az sql db ledger-digest-uploads enable verwenden.
az sql db ledger-digest-uploads enable \
--name $databaseName \
--resource-group $resourceGroupName \
--server $serverName \
--endpoint $storageAccountURL
Um die Digests vor dem Löschen oder Aktualisieren zu schützen, empfiehlt es sich, eine zeitbasierte Aufbewahrungsrichtlinie für den Container sqldbledgerdigests zu konfigurieren, indem Sie die Befehle az storage container immutability-policy create und az storage container immutability-policy lock verwenden. Die Richtlinie muss das Schreiben geschützter Anfügeblobs zulassen. Dadurch wird sichergestellt, dass der Datenbankserver Blöcke mit neuen Digests zu einem vorhandenen Blob hinzufügen kann, während das Löschen oder Aktualisieren der Digests für den angegebenen Unveränderbarkeitszeitraum deaktiviert ist.
Wichtig
Im folgenden Beispiel wird der Wert „1 Tag“ für den Unveränderbarkeitszeitraum verwendet. In einer Produktionsumgebung sollten Sie einen viel größeren Wert verwenden.
Hinweis
Sobald die Datenbankdigests in das Speicherkonto hochgeladen werden, können Sie das Speicherkonto erst löschen, wenn die Unveränderbarkeitsrichtlinie abläuft. Das Festlegen der Unveränderbarkeitsrichtlinie kann übersprungen werden, wenn Sie planen, Ressourcen unmittelbar nach diesem Schnellstart zu bereinigen.
Weitere Informationen zur zeitbasierten Aufbewahrungsrichtlinien für Container finden Sie unter Konfigurieren von Unveränderbarkeitsrichtlinien für Container.
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
Sie erstellen eine Ressourcengruppe, einen logischen Datenbankserver sowie eine einzelne Ledgerdatenbank und konfigurieren den Upload von Ledgerdigests mithilfe von Windows PowerShell.
Starten von Azure Cloud Shell
Azure Cloud Shell ist eine kostenlose interaktive Shell, mit der Sie die Schritte in diesem Artikel durchführen können. Sie verfügt über allgemeine vorinstallierte Tools und ist für die Verwendung mit Ihrem Konto konfiguriert.
Wählen Sie zum Öffnen von Cloud Shell oben rechts in einem Codeblock die Option Ausprobieren aus. Sie können Cloud Shell auch auf einem separaten Browsertab starten, indem Sie zu https://shell.azure.com navigieren. Wählen Sie Kopieren aus, um die Blöcke mit dem Code zu kopieren. Fügen Sie ihn anschließend in Cloud Shell ein, und drücken Sie die EINGABETASTE, um ihn auszuführen.
Festlegen von Parameterwerten
Mit den folgenden Werten werden in nachfolgenden Befehlen die Datenbank und die erforderlichen Ressourcen erstellt. Server- und Speicherkontonamen müssen in allen Azure-Regionen global eindeutig sein, damit ddas Cmdlet „Get-Random“ verwendet wird, um den Servernamen und den Namen des Speicherkontos zu erstellen.
Der Ressourcenname muss in Ihrem Abonnement eindeutig sein. Ersetzen Sie <your resource group name>
durch einen eindeutigen Namen.
Ersetzen Sie die Werte „0.0.0.0“ im IP-Adressbereich entsprechend ihrer spezifischen Umgebung.
Ersetzen Sie westeurope durch den Namen Ihrer bevorzugten Azure-Region.
# 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
Erstellen einer Ressourcengruppe
Erstellen Sie mit New-AzResourceGroup eine Azure-Ressourcengruppe. Eine Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden.
Write-host "Creating resource group..."
$resourceGroup = New-AzResourceGroup `
-Name $resourceGroupName `
-Location $location
$resourceGroup
Erstellen eines Servers
Erstellen Sie einen Server mit dem Cmdlet New-AzSqlServer.
Das Cmdlet erstellt den Server mit einer zugewiesenen verwalteten Identität, die Sie später benötigen, um dem Server Berechtigungen zum Hochladen von Ledgerdigests zu erteilen.
Wenn Sie dazu aufgefordert werden, geben Sie Ihren SQL-Administratorbenutzernamen und ein Kennwort ein.
Write-host "Creating primary server..."
$server = New-AzSqlServer `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-Location $location `
-AssignIdentity `
-SqlAdministratorCredentials (Get-Credential)
$server
Erstellen einer Firewallregel
Erstellen Sie eine Serverfirewallregel mit dem Cmdlet New-AzSqlServerFirewallRule.
Write-host "Configuring server firewall rule..."
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIP -EndIpAddress $endIP
$serverFirewallRule
Erstellen einer einzelnen Ledgerdatenbank
Erstellen Sie eine einzelne Ledgerdatenbank mit dem Cmdlet New-AzSqlDatabase.
Im folgenden Beispiel wird eine serverlose Datenbank erstellt.
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
Speicherkonto erstellen
Erstellen Sie ein Speicherkonto zum Speichern von Ledgerdigests mit dem Cmdlet 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
Erteilen der Serverberechtigungen zum Schreiben von Ledgerdigests
Weisen Sie die verwaltete Identität des Servers der Rolle Speicherblob-Datenmitwirkender mit dem Cmdlet New-AzRoleAssignment zu. Dadurch erhält der SQL die entsprechenden Berechtigungen zum Veröffentlichen von Datenbankdigests im Speicherkonto.
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
Aktivieren von Datenbankdigestuploads
Aktualisieren Sie die Datenbank, um mit dem Hochladen von Ledgerdigests in das Speicherkonto zu beginnen, indem Sie das Cmdlet Enable-AzSqlDatabaseLedgerDigestUpload verwenden. Der Datenbankserver erstellt im Speicherkonto einen neuen Container namens sqldbimagerdigests und beginnt mit dem Schreiben von Ledgerdigests in den Container.
Write-host "Enabling ledger digest upload..."
$ledgerDigestUploadConfig = Enable-AzSqlDatabaseLedgerDigestUpload `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Endpoint $storage.PrimaryEndpoints.Blob
$ledgerDigestUploadConfig
Um die Digests vor dem Löschen oder Aktualisieren zu schützen, empfiehlt es sich, mithilfe der Cmdlets Set-AzRmStorageContainerImmutabilityPolicy und Lock-AzRmStorageContainerImmutabilityPolicy eine zeitbasierte Aufbewahrungsrichtlinie für den Container sqldbledgerdigests zu konfigurieren. Die Richtlinie muss das Schreiben geschützter Anfügeblobs zulassen. Dadurch wird sichergestellt, dass der Datenbankserver Blöcke mit neuen Digests zu einem vorhandenen Blob hinzufügen kann, während das Löschen oder Aktualisieren der Digests für den angegebenen Unveränderbarkeitszeitraum deaktiviert ist.
Wichtig
Im folgenden Beispiel wird der Wert „1 Tag“ für den Unveränderbarkeitszeitraum verwendet. In einer Produktionsumgebung sollten Sie einen viel größeren Wert verwenden.
Hinweis
Sie können den Container oder das Speicherkonto während des angegebenen Unveränderbarkeitszeitraums nicht löschen.
Weitere Informationen zur zeitbasierten Aufbewahrungsrichtlinien für Container finden Sie unter Konfigurieren von Unveränderbarkeitsrichtlinien für Container.
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
Behalten Sie für die nächsten Schritte die Ressourcengruppe, den Server und die Einzeldatenbank bei. Sie erfahren, wie Sie das Ledgerfeature Ihrer Datenbank mit verschiedenen Methoden verwenden.
Wenn Sie diese Ressourcen nicht mehr benötigen, löschen Sie die erstellte Ressourcengruppe. Mit dieser Aktion werden auch der Server und die darin enthaltene Einzeldatenbank gelöscht.