Per creare un database singolo nel portale di Azure:
Accedere alla pagina Selezione l’opzione di distribuzione SQL.
In Database SQL lasciare l'opzione Tipo di risorsa impostata su Database singolo e selezionare Crea.
Nella scheda Generale del modulo Crea database SQL, in Dettagli progetto, selezionare la sottoscrizione di Azure che si vuole usare.
In Gruppo di risorse selezionare Crea nuovo, immettere myResourceGroup e quindi fare clic su OK.
In Nome del database immettere demo.
In Server selezionare Crea nuovo. Compilare il modulo Nuovo server con i valori seguenti:
- Nome server: immettere mysqlserver e aggiungere alcuni caratteri che rendano il nome univoco. Non è possibile specificare un nome del server esatto da usare perché i nomi di tutti i server di Azure devono essere univoci a livello globale, oltre che univoci all’interno di una sottoscrizione. Immettere quindi un valore come mysqlserver12345 e il portale segnalerà se è disponibile o meno.
- Account di accesso amministratore del server: immettere azureuser.
- Password: immettere una password che soddisfi i requisiti. Digitare di nuovo la password nella casella Conferma password.
- Posizione: selezionare una posizione dall'elenco a discesa.
- Consenti ai servizi di Azure di accedere al server: selezionare questa opzione per abilitare l'accesso alla risorsa di archiviazione del digest.
Seleziona OK.
Lasciare l’opzione Usare il pool elastico SQL impostata su No.
In Calcolo e archiviazione selezionare Configura database.
Questo argomento di avvio rapido usa un database serverless, quindi selezionare Serverless e quindi Applica.
Nella scheda Rete selezionare Endpoint pubblico in Metodo di connettività.
In Regole del firewall impostare Aggiungi indirizzo IP client corrente su Sì. Lasciare l'opzione Consenti alle risorse e ai servizi di Azure di accedere a questo server impostata su No.
Selezionare Avanti: Sicurezza nella parte inferiore della pagina.
Nella scheda Sicurezza, nella sezione Libro mastro selezionare l'opzione Configura libro mastro.
Nel riquadro Configura libro mastro, nella sezione Libro mastro selezionare la casella di controllo Abilita per tutte le tabelle future del database. Questa impostazione garantisce che tutte le tabelle future del database saranno tabelle del libro mastro. Per questo motivo, tutti i dati del database mostreranno qualsiasi prova di manomissione. Per impostazione predefinita, le nuove tabelle verranno create come tabelle del libro mastro aggiornabili, anche se non si specifica LEDGER = ON
nell'istruzione CREATE TABLE. È anche possibile lasciare deselezionata questa opzione. In tal caso, quando si creano nuove tabelle usando Transact-SQL, è necessario abilitare la funzionalità di libro mastro per ogni singola tabella.
Nella sezione Archiviazione digest l'opzione Abilita archiviazione automatica del digest viene selezionata automaticamente. Vengono quindi creati un nuovo account di archiviazione di Azure e un nuovo contenitore in cui vengono archiviati i digest.
Selezionare Applica.
Selezionare Rivedi e crea nella parte inferiore della pagina.
Nella pagina Rivedi e crea, dopo aver rivisto le impostazioni, selezionare Crea.
Si creerà un gruppo di risorse, un server di database logico, un singolo database di libro mastro e si configureranno i digest del libro mastro di caricamento usando l'interfaccia della riga di comando di Azure.
Avviare Azure Cloud Shell
Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.
Per aprire Cloud Shell, selezionare Prova nell'angolo superiore destro di un blocco di codice. È anche possibile avviare Cloud Shell in una scheda separata del browser visitando https://shell.azure.com. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e premere Invio per eseguirli.
Impostare i valori di parametro
I valori seguenti vengono usati nei comandi successivi per creare il database e le risorse necessarie. I nomi dei server e degli account di archiviazione devono essere univoci a livello globale in tutto Azure, quindi la funzione $RANDOM viene usata per creare il nome del server e il nome dell'account di archiviazione.
Il nome della risorsa deve essere univoco all'interno della sottoscrizione. Sostituire <your resource group name>
con un nome univoco, e <your subscription ID>
con l'ID di sottoscrizione.
Sostituire i valori 0.0.0.0 nell'intervallo di indirizzi IP in modo che corrispondano all'ambiente specifico.
Sostituire westeurope con il nome dell'area di Azure preferita.
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
Creare un gruppo di risorse
Creare un gruppo di risorse con il comando az group create. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.
az group create --name $resourceGroupName --location $location
Creare un server con un'identità gestita
Creare un server con il comando az sql server create. Il comando crea il server con un'identità gestita assegnata.
az sql server create \
--name $serverName \
--resource-group $resourceGroupName \
--location $location \
--admin-user $adminLogin \
--admin-password $adminPassword \
--assign-identity
Questo comando archivia l'ID in una variabile, che verrà usato successivamente per concedere le autorizzazioni del server per caricare i digest del libro mastro.
# 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`
Creare una regola del firewall con il comando 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
Creare un database singolo di libro mastro
Creare un database del libro mastro con il comando az sql db create. Il comando seguente crea un database serverless con libro mastro abilitato.
az sql db create \
--resource-group $resourceGroupName \
--server $serverName \
--name $databaseName \
--edition GeneralPurpose \
--family Gen5 \
--capacity 2 \
--compute-model Serverless \
--ledger-on
Creare un account di archiviazione
Creare un account di archiviazione per archiviare i digest del libro mastro con il comando az storage account create.
az storage account create \
--name $storageAccountName \
--resource-group $resourceGroupName \
--location $location \
--sku Standard_GRS \
--kind StorageV2
Concedere al server le autorizzazioni per scrivere i digest del libro mastro
Assegnare l'identità gestita del server al ruolo di Collaboratore dati BLOB di archiviazione con il comando az role assignment create. In questo modo, il server SQL dispone delle autorizzazioni appropriate per pubblicare i digest del database nell'account di archiviazione.
az role assignment create \
--assignee-object-id $principalId \
--assignee-principal-type "ServicePrincipal" \
--role "Storage Blob Data Contributor" \
--scope $storageAccountResourceId
Abilitare i caricamenti del digest del database
Aggiornare il database per avviare il caricamento dei digest del libro mastro nell'account di archiviazione usando il comando az sql db ledger-digest-uploads enable.
az sql db ledger-digest-uploads enable \
--name $databaseName \
--resource-group $resourceGroupName \
--server $serverName \
--endpoint $storageAccountURL
Per proteggere i digest dall'eliminazione o dall'aggiornamento, è consigliabile configurare un criterio di conservazione basato sul tempo nel contenitore sqldbledgerdigests usando i comandi az storage container immutability-policy create e az storage container immutability-policy lock. I criteri devono consentire scritture di BLOB di accodamento protetti. In questo modo il server del database può aggiungere blocchi contenenti nuovi digest a un BLOB esistente, mentre l'eliminazione o l'aggiornamento dei digest è disabilitato per il periodo di immutabilità specificato.
Importante
L'esempio seguente usa il valore del periodo di immutabilità di 1 giorno. In un ambiente di produzione è consigliabile usare un valore molto più grande.
Nota
Quando i digest del database iniziano a essere caricati nell'account di archiviazione, non sarà possibile eliminare l'account di archiviazione fino alla scadenza dei criteri di immutabilità. L'impostazione dei criteri di immutabilità può essere ignorata se si prevede di pulire le risorse immediatamente dopo questa guida rapida.
Per maggiori informazioni sui criteri di conservazione basati sul tempo per i contenitori, vedere Configurare i criteri di immutabilità per i contenitori.
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
Si creerà un gruppo di risorse, un server di database logico, un singolo database del libro mastro e si configureranno i digest del libro mastro di caricamento usando Windows PowerShell.
Avviare Azure Cloud Shell
Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.
Per aprire Cloud Shell, selezionare Prova nell'angolo superiore destro di un blocco di codice. È anche possibile avviare Cloud Shell in una scheda separata del browser visitando https://shell.azure.com. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e premere Invio per eseguirli.
Impostare i valori di parametro
I valori seguenti vengono usati nei comandi successivi per creare il database e le risorse necessarie. I nomi dei server e degli account di archiviazione devono essere univoci a livello globale in tutto Azure, quindi per creare il nome del server e il nome dell'account di archiviazione viene usato il cmdlet Get-Random.
Il nome della risorsa deve essere univoco all'interno della sottoscrizione. Sostituire <your resource group name>
con un nome univoco.
Sostituire i valori 0.0.0.0 nell'intervallo di indirizzi IP in modo che corrispondano all'ambiente specifico.
Sostituire westeurope con il nome dell'area di Azure preferita.
# 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
Creare un gruppo di risorse
Creare un gruppo di risorse di Azure con New-AzResourceGroup. Un gruppo di risorse è un contenitore logico in cui vengono distribuite e gestite le risorse di Azure.
Write-host "Creating resource group..."
$resourceGroup = New-AzResourceGroup `
-Name $resourceGroupName `
-Location $location
$resourceGroup
Creare un server
Creare un server con il cmdlet New-AzSqlServer.
Il cmdlet crea il server con un'identità gestita assegnata, che sarà necessario in un secondo momento per concedere le autorizzazioni del server per caricare i digest del libro mastro.
Quando richiesto, immettere nome utente e password di amministratore SQL.
Write-host "Creating primary server..."
$server = New-AzSqlServer `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-Location $location `
-AssignIdentity `
-SqlAdministratorCredentials (Get-Credential)
$server
Creare una regola del firewall
Creare una regola del firewall per il server con il cmdlet New-AzSqlServerFirewallRule.
Write-host "Configuring server firewall rule..."
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIP -EndIpAddress $endIP
$serverFirewallRule
Creare un database singolo di libro mastro
Creare un database singolo di libro mastro con il cmdlet New-AzSqlDatabase.
Nell'esempio seguente viene creato un database serverless.
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
Creare un account di archiviazione
Creare un account di archiviazione per archiviare i digest del libro mastro con il 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
Concedere al server le autorizzazioni per scrivere i digest del libro mastro
Assegnare l'identità gestita del server al ruolo di Collaboratore dati BLOB di archiviazione con il cmdlet New-AzRoleAssignment. In questo modo, il server SQL dispone delle autorizzazioni appropriate per pubblicare i digest del database nell'account di archiviazione.
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
Abilitare i caricamenti del digest del database
Aggiornare il database per avviare il caricamento dei digest del libro mastro nell'account di archiviazione usando il cmdlet Enable-AzSqlDatabaseLedgerDigestUpload. Il server del database creerà un nuovo contenitore, denominato sqldbledgerdigests, all'interno dell'account di archiviazione, e inizierà a scrivere i digest del libro mastro nel contenitore.
Write-host "Enabling ledger digest upload..."
$ledgerDigestUploadConfig = Enable-AzSqlDatabaseLedgerDigestUpload `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Endpoint $storage.PrimaryEndpoints.Blob
$ledgerDigestUploadConfig
Per proteggere i digest dall'eliminazione o dall'aggiornamento, è consigliabile configurare un criterio di conservazione basato sul tempo nel contenitore sqldbledgerdigests usando i cmdlet Set-AzRmStorageContainerImmutabilityPolicy e Lock-AzRmStorageContainerImmutabilityPolicy. I criteri devono consentire scritture di BLOB di accodamento protetti. In questo modo il server del database può aggiungere blocchi contenenti nuovi digest a un BLOB esistente, mentre l'eliminazione o l'aggiornamento dei digest è disabilitato per il periodo di immutabilità specificato.
Importante
L'esempio seguente usa il valore del periodo di immutabilità di 1 giorno. In un ambiente di produzione è consigliabile usare un valore molto più grande.
Nota
Non sarà possibile eliminare il contenitore o l'account di archiviazione durante il periodo di immutabilità specificato.
Per maggiori informazioni sui criteri di conservazione basati sul tempo per i contenitori, vedere Configurare i criteri di immutabilità per i contenitori.
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
Conservare il gruppo di risorse, il server e il database singolo per i passaggi successivi. Si apprenderà come usare la funzionalità libro mastro del database con metodi diversi.
Al termine dell'uso di queste risorse, eliminare il gruppo di risorse creato. Questa azione elimina anche il server e il database singolo al suo interno, e l'account di archiviazione.