연습 - Azure SQL Database 구성

완료됨

이 단원에서는 Azure SQL 논리 서버를 배포하고 데이터베이스를 만들어 Azure SQL Database를 보호하기 위해 설명된 기능을 활용합니다.

설정: 스크립트를 사용하여 Azure SQL Database 배포

오른쪽에는 브라우저를 사용하여 Azure와 상호 작용하는 방법인 Azure Cloud Shell이 있습니다. 연습을 시작하기 전에 Cloud Shell에서 스크립트를 실행하여 Azure SQL Database에서 샘플 AdventureWorks 데이터베이스로 환경을 만듭니다. 스크립트에서 디바이스를 데이터베이스에 연결할 수 있도록 새 데이터베이스와 로컬 IP 주소에 대한 암호를 입력하라는 메시지가 표시됩니다.

이러한 스크립트를 완료하는 데 3~5분이 소요됩니다. password, unique ID, region은 다시 표시되지 않으므로 기록해 두어야 합니다.

  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
    

    참고

    password, unique ID, region을 기록해 두는 것을 잊지 마세요. 모듈 전체에서 사용하게 됩니다.

  4. 다음 스크립트를 실행하여 AdventureWorks 샘플과 함께 Azure SQL Database 논리 서버와 이후 단원에서 논의할 원장 데이터베이스를 배포합니다. 이 스크립트는 또한 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. SSMS(SQL Server Management Studio)를 열고 논리 서버에 대한 새 연결을 만듭니다. 서버 이름에 Azure SQL Database 논리 서버의 이름(예: aw-server<unique ID>.database.windows.net)을 입력합니다. 이름을 이전에 저장하지 않은 경우 Azure Portal로 이동하여 가져올 수 있습니다.

    Azure Portal에서 AdventureWorks를 검색하여 데이터베이스 및 연결된 논리 서버를 찾습니다.

    인증을 SQL Server 인증으로 변경하고, 해당하는 서버 관리자 로그인 및 암호를 입력합니다(이전 연습에서 배포하는 동안 입력한 로그인 및 암호).

    암호 저장 확인란을 선택한 후 연결을 선택합니다.

    SSMS에서 SQL Database에 연결하는 방법을 보여 주는 스크린샷.

    참고

    로컬 구성(예: VPN)에 따라 클라이언트 IP 주소는 배포 중에 사용되는 Azure Portal IP 주소와 다를 수 있습니다. 다른 경우 다음 팝업 메시지가 표시됩니다. “클라이언트 IP 주소에서 서버에 액세스할 수 없습니다. Azure 계정에 로그인하고 액세스를 사용하도록 설정하는 새 방화벽 규칙을 만듭니다.” 이 메시지가 표시되면 샌드박스에 사용 중인 계정으로 로그인하고 클라이언트 IP 주소에 대한 방화벽 규칙을 추가합니다. SSMS의 팝업 마법사를 사용하여 해당 단계를 모두 완료할 수 있습니다.

  6. Azure SQL 논리 서버에 연결되면 Databases 폴더를 확장합니다.

  7. 만들어진 두 데이터베이스인 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
    );