演習 - Azure SQL Database を構成する

完了

このユニットでは、Azure SQL 論理サーバーをデプロイし、データベースを作成して、Azure SQL Database をセキュリティで保護するための機能を活用します。

セットアップ:スクリプトを使用して Azure SQL Database をデプロイする

右側には Azure Cloud Shell が表示されます。これは、ブラウザーを使用して Azure と対話する方法です。 この演習を始める前に、Cloud Shell 内でスクリプトを実行し、Azure SQL Database 内に自分用の環境とサンプル AdventureWorks データベースを作成します。 このスクリプトでは、新しいデータベースのパスワードとローカル IP アドレスを入力するように求められます。これにより、デバイスがデータベースに接続できるようになります。

これらのスクリプトは、完了するまでに 3 から 5 分かかります。 passwordunique IDregion は再び表示されないため、必ずメモしてください。

  1. まず、ローカル IP アドレスを取得します。 すべての VPN サービスから切断されていることを確認し、デバイスでローカル PowerShell ターミナルを開きます。 次のコマンドを実行し、結果として得られる IP アドレスを書き留めます。

    (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content
    
  2. Cloud Shell で次のコマンドを実行します。 複雑なパスワードを入力し、プロンプトで、前の手順で取得したローカルのパブリック IP アドレスを入力します。 "[サンドボックス リソース グループ名]" を "[サンドボックス リソース グループ名]" に置き換えます。

    $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. Cloud Shell で次のコードを実行することにより、モジュール全体を通して必要な情報を出力し、テキスト ファイルに保存します。 最後の行は既定では実行されないため、コードを貼り付けた後に、Enter キーを押すことが必要となることがあります。

    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
    

    注意

    passwordunique IDregion をメモすることをお忘れなく。 それらはモジュール全体を通して使用します。

  4. 次のスクリプトを実行し、Azure SQL Database 論理サーバー、AdventureWorks サンプル、(今後のユニットで扱う) 元帳データベースをデプロイします。 このスクリプトによって、IP アドレスがファイアウォール規則として追加され、Microsoft Defender for SQL が有効になり、今後のユニットで使用するストレージ アカウントが作成されます。 このスクリプトが完了するまで数分かかります。

    # 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. SQL Server Management Studio (SSMS) を開いて、ご利用の論理サーバーへの新しい接続を作成します。 サーバー名として、ご利用の Azure SQL Database 論理サーバーの名前 (たとえば、aw-server<unique ID>.database.windows.net) を入力します。 以前に名前を保存していない場合は、それを取得するために Azure portal へのアクセスが必要になる場合があります。

    Azure portal で AdventureWorks を検索して、ご利用のデータベースとそれに関連付けられている論理サーバーを見つけます。

    認証を [SQL Server 認証] に変更し、対応するサーバー管理者のログインとパスワード (前の演習でデプロイ時に指定したもの) を入力します。

    [パスワードを記憶する] チェック ボックスを選択して、それから [接続] を選択します。

    SSMS で SQL Database に接続する方法のスクリーンショット。

    Note

    ローカル構成 (VPN など) によっては、クライアントの IP アドレスが、デプロイ時に Azure portal で使用した IP アドレスと異なる場合があります。 異なる場合は次のようなメッセージがポップアップ表示されます: "このクライアント IP アドレスではサーバーにアクセスできません。 アクセスできるようにするには、Azure アカウントにサインインし、新しいファイアウォール規則を作成します。" このメッセージが表示されたら、サンドボックスに使用しているアカウントでサインインし、クライアント IP アドレスのファイアウォール規則を追加します。 SSMS のポップアップ ウィザードを使用して、これらの手順をすべて完了できます。

  6. ご利用の Azure SQL 論理サーバーに接続したら、[データベース] フォルダーを展開します。

  7. 作成された 2 つのデータベース、AdventureWorksmyLedgerDatabase が表示されます。 myLedgerDatabase データベースを右クリックして [新しいクエリ] を選択し、次のコマンドを実行して、Account.Balance という名前のテーブルを作成します。 タスク バー内で [実行] を選択すると、このクエリを実行することができます。

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