Übung: Konfigurieren von Azure SQL-Datenbank

Abgeschlossen

In dieser Lektion stellen Sie einen logischen Azure SQL-Server bereit und erstellen Datenbanken, um die beschriebenen Features zum Schützen Ihrer Azure SQL-Datenbank-Instanz zu nutzen.

Setup: Verwenden von Skripts zum Bereitstellen von Azure SQL-Datenbank

Auf der rechten Seite befindet sich die Azure Cloud Shell, die eine Möglichkeit darstellt, über einen Browser mit Azure zu interagieren. Bevor Sie mit der Übung beginnen, führen Sie ein Skript in Cloud Shell aus, um Ihre Umgebung mit der Beispieldatenbank AdventureWorks in Azure SQL-Datenbank zu erstellen. Im Skript werden Sie aufgefordert, ein Kennwort für die neue Datenbank und Ihre lokale IP-Adresse anzugeben, damit das Gerät eine Verbindung herstellen kann.

Das Ausführen dieser Skripts sollte drei bis fünf Minuten dauern. Stellen Sie sicher, dass Sie Ihr password, Ihre unique ID und region notieren, da diese Informationen nicht erneut gezeigt werden.

  1. Rufen Sie zunächst Ihre lokale IP-Adresse ab. Vergewissern Sie sich, dass Ihre Verbindung zu anderen VPN-Diensten getrennt ist, und öffnen Sie ein lokales PowerShell-Terminal auf Ihrem Gerät. Führen Sie den folgenden Befehl aus, und notieren Sie die zurückgegebene IP-Adresse.

    (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content
    
  2. Führen Sie in Cloud Shell die folgenden Befehle aus: Geben Sie ein komplexes Kennwort ein, und geben Sie an der Eingabeaufforderung Ihre lokale öffentliche IP-Adresse ein, die Sie im vorherigen Schritt abgerufen haben. Ersetzen Sie „[sandbox resource group name]“ durch „[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. Geben Sie die Informationen aus, die Sie im gesamten Modul immer wieder benötigen, und speichern Sie sie in einer Textdatei, indem Sie den folgenden Code in Cloud Shell ausführen. Nachdem Sie den Code eingefügt haben, müssen Sie wahrscheinlich Enter drücken, da die letzte Zeile standardmäßig nicht ausgeführt wird.

    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
    

    Hinweis

    Denken Sie daran, sich Ihr password, Ihre unique ID und region zu notieren. Sie werden diese im gesamten Modul verwenden.

  4. Führen Sie das folgende Skript aus, um einen logischen Server von Azure SQL-Datenbank mit dem Beispiel AdventureWorks sowie eine Ledgerdatenbank bereitzustellen, die in künftigen Lerneinheiten erläutert wird. Dieses Skript fügt außerdem Ihre IP-Adresse als Firewallregel hinzu, aktiviert Microsoft Defender for SQL und erstellt ein Speicherkonto zur Verwendung in künftigen Lerneinheiten. Es dauert einige Minuten, bis dieses Skript abgeschlossen ist.

    # 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. Öffnen Sie SQL Server Management Studio (SSMS), und stellen Sie dann eine neue Verbindung mit dem logischen Server her. Geben Sie als Servernamen den Namen des logischen Servers von Azure SQL-Datenbank ein (z. B. aw-server<unique ID>.database.windows.net). Wenn Sie den Namen zuvor nicht gespeichert haben, müssen Sie diesen möglicherweise im Azure-Portal abrufen.

    Suchen Sie im Azure-Portal nach AdventureWorks, um Ihre Datenbank und den zugehörigen logischen Server zu finden.

    Wählen Sie für die Authentifizierung die SQL Server-Authentifizierung aus, und geben Sie den Benutzernamen und das Kennwort des entsprechenden Serveradministrators bzw. der entsprechenden Serveradministratorin an, die Sie bei der Bereitstellung in der vorherigen Übung angegeben haben.

    Aktivieren Sie das Kontrollkästchen Kennwort speichern, wählen Sie dann Verbinden aus.

    Screenshot: Herstellen einer Verbindung mit SQL-Datenbank in SSMS

    Hinweis

    Je nach lokaler Konfiguration (z. B. VPN) unterscheidet sich Ihre Client-IP-Adresse möglicherweise von der IP-Adresse, die im Azure-Portal bei der Bereitstellung verwendet wurde. Wenn sie abweicht, wird eine Popupmeldung angezeigt: „Ihre Client-IP-Adresse hat keinen Zugriff auf den Server. Melden Sie sich bei einem Azure-Konto an, und erstellen Sie eine neue Firewallregel, um den Zugriff zu ermöglichen.“ Wenn diese Meldung angezeigt wird, melden Sie sich mit dem Konto an, das Sie für die Sandbox verwenden, und fügen Sie eine Firewallregel für Ihre Client-IP-Adresse hinzu. All diese Schritte können Sie mithilfe des Popupassistenten in SSMS durchführen.

  6. Erweitern Sie den Ordner Datenbanken, nachdem Sie eine Verbindung mit Ihrem logischen Server von Azure SQL hergestellt haben.

  7. Sie sollten die beiden Datenbanken sehen, die erstellt wurden, AdventureWorks und myLedgerDatabase. Klicken Sie mit der rechten Maustaste auf die Datenbank myLedgerDatabase, und wählen Sie Neue Abfrage aus, führen Sie dann den folgenden Befehl aus, um eine Tabelle mit dem Namen Account.Balance zu erstellen. Sie können die Abfrage ausführen, indem Sie in der Taskleiste Ausführen auswählen.

    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
    );