Esercizio - Configurare il database SQL di Azure

Completato

In questa unità si distribuirà un server logico Azure SQL e si creeranno database per usare le funzionalità illustrate per proteggere il database SQL di Azure.

Configurazione: usare gli script per distribuire il database SQL di Azure

A destra si trova Azure Cloud Shell, che consente di interagire con Azure tramite un browser. Prima di iniziare l'esercizio, si eseguirà uno script in Cloud Shell per creare l'ambiente con il database di esempio AdventureWorks nel database SQL di Azure. Nello script verrà richiesta una password per il nuovo database e l'indirizzo IP locale per consentire al dispositivo di connettersi al database.

Per il completamento degli script sono necessari 3-5 minuti. Assicurarsi di prendere nota di password, unique ID e region, perché non verranno visualizzati di nuovo.

  1. Per iniziare, ottenere l'indirizzo IP locale. Assicurarsi di essere disconnessi da qualsiasi servizio VPN e aprire un terminale di PowerShell locale nel dispositivo. Eseguire il comando seguente e prendere nota dell'indirizzo IP risultante.

    (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content
    
  2. Eseguire i comandi seguenti in Cloud Shell: Immettere una password complessa e, quando richiesto, immettere l'indirizzo IP pubblico locale ottenuto nel passaggio precedente. Sostituire "[sandbox resource group name]" con "[sandbox resource group name]".

    $adminSqlLogin = "cloudadmin"
    $password = Read-Host "Your username is 'cloudadmin'. Enter a password for your Azure SQL Database server that meets the password requirements"
    # Prompt for local ip address
    $ipAddress = Read-Host "Disconnect your VPN, open PowerShell on your machine and run '(Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content'. Enter the value (include periods) next to 'Address' " 
    # Get resource group and location and random string
    $resourceGroup = Get-AzResourceGroup | Where ResourceGroupName -like "[sandbox resource group name]"
    $resourceGroupName = "[sandbox resource group name]"
    $uniqueID = Get-Random -Minimum 100000 -Maximum 1000000
    $storageAccountName = "mslearnsa"+$uniqueID
    $location = $resourceGroup.Location
    # The logical server name has to be unique in the system
    $serverName = "aw-server$($uniqueID)"
    
  3. Visualizzare e archiviare in un file di testo le informazioni che saranno necessarie nel corso del modulo eseguendo il codice seguente in Cloud Shell. Sarà necessario premere Enter dopo avere incollato il codice, perché l'ultima riga non viene eseguita per impostazione predefinita.

    Write-Host "Your unique ID for future exercises in this module:" $uniqueID
    Write-Host "Your resource group name is:" $resourceGroupName
    Write-Host "Your resources were deployed in the following region:" $location
    Write-Host "Your server name is:" $serverName
    

    Nota

    Ricordarsi di prendere nota di password, unique ID e region. Saranno necessari più volte nel corso del modulo.

  4. Eseguire lo script seguente per distribuire un server logico del database SQL di Azure con l'esempio AdventureWorks, nonché un database libro mastro che verrà illustrato in unità future. Lo script aggiungerà anche l'indirizzo IP come regola del firewall, abiliterà Microsoft Defender for SQL e creerà un account di archiviazione da usare in unità future. Attendere alcuni minuti per il completamento dello script.

    # The sample database name
    $databaseName = "AdventureWorks"
    # The ledger database name
    $databaseName2 = "myLedgerDatabase"
    # The storage account name has to be unique in the system
    $storageAccountName = $("sql$($uniqueID)")
    # Create a new server with a system wide unique server name
    $server = New-AzSqlServer -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -Location $location `
        -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminSqlLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
    # Create a server firewall rule that allows access from the specified IP range and all Azure services
    $serverFirewallRule = New-AzSqlServerFirewallRule `
        -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -FirewallRuleName "AllowedIPs" `
        -StartIpAddress $ipAddress -EndIpAddress $ipAddress 
    $allowAzureIpsRule = New-AzSqlServerFirewallRule `
        -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -AllowAllAzureIPs
    # Create databases
    $database = New-AzSqlDatabase  -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -DatabaseName $databaseName `
        -SampleName "AdventureWorksLT" `
        -Edition "GeneralPurpose" -Vcore 2 -ComputeGeneration "Gen5"
    $database2 = New-AzSqlDatabase  -ResourceGroupName $resourceGroupName `
        -ServerName $serverName `
        -DatabaseName $databaseName2 `
        -Edition "GeneralPurpose" -Vcore 2 -ComputeGeneration "Gen5"
    # Enable Microsoft Defender for SQL
    $azureDefender = Enable-AzSqlServerAdvancedDataSecurity `
        -ResourceGroupName $resourceGroupName `
        -ServerName $serverName
    # Create a storage account
    $storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroupName `
        -AccountName $storageAccountName `
        -Location $location `
        -Type "Standard_LRS"
    
  5. Aprire SQL Server Management Studio (SSMS) e creare una nuova connessione al server logico. In Nome del server immettere il nome del server logico del database SQL di Azure, ad esempio aw-server<unique ID>.database.windows.net. Se il nome non è stato salvato in precedenza, può essere necessario accedere al portale di Azure per ottenerlo.

    Nel portale di Azure cercare AdventureWorks per trovare il database e il server logico associato.

    Modificare l'autenticazione in Autenticazione SQL Server e immettere l'account di accesso e la password dell'amministratore server pertinenti, specificati durante la distribuzione nell'esercizio precedente.

    Selezionare la casella di controllo Memorizza password e quindi selezionare Connetti.

    Screenshot che mostra come connettersi al database SQL in SSMS.

    Nota

    A seconda della configurazione locale, ad esempio della VPN, l'indirizzo IP del client può essere diverso dall'indirizzo IP usato dal portale di Azure durante la distribuzione. In questo caso, verrà visualizzato il messaggio popup "L'indirizzo IP client non ha accesso al server. Accedere a un account Azure e creare una nuova regola del firewall per abilitare l'accesso. Se viene visualizzato questo messaggio, accedere con l'account usato per l'ambiente sandbox e aggiungere una regola del firewall per l'indirizzo IP del client. È possibile completare tutti questi passaggi usando la procedura guidata popup in SSMS.

  6. Dopo aver stabilito la connessione al server logico Azure SQL, espandere la cartella Database.

  7. Dovrebbero essere visualizzati i due database creati, ovvero AdventureWorks e myLedgerDatabase. Fare clic con il pulsante destro del mouse sul database myLedgerDatabase e selezionare Nuova query, quindi eseguire il comando seguente per creare una tabella denominata Account.Balance. Per eseguire la query, selezionare Esegui nella barra delle applicazioni.

    CREATE SCHEMA [Account];
    GO  
    CREATE TABLE [Account].[Balance]
    (
        [CustomerID] INT NOT NULL PRIMARY KEY CLUSTERED,
        [LastName] VARCHAR (50) NOT NULL,
        [FirstName] VARCHAR (50) NOT NULL,
        [Balance] DECIMAL (10,2) NOT NULL
    )
    WITH 
    (
     SYSTEM_VERSIONING = ON (HISTORY_TABLE = [Account].[BalanceHistory]),
     LEDGER = ON
    );