PowerShell을 사용하여 상시 암호화 키 구성Configure Always Encrypted Keys using PowerShell

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터)예Azure SQL Database아니요Azure SQL Data Warehouse아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 문서에서는 SqlServer PowerShell 모듈을 사용하여 상시 암호화 키를 프로비전하는 단계를 제공합니다.This article provides the steps to provision keys for Always Encrypted using the SqlServer PowerShell module. 역할 구분이 있거나 없는 경우모두 키 저장소에 실제 암호화 액세스 키에 대한 액세스 권한이 있는 사용자 및 데이터베이스에 대한 액세스 권한이 있는 사용자를 제어함으로써 PowerShell을 사용하여 상시 암호화 키를 프로비전할 수 있습니다.You can use PowerShell to provision Always Encrypted keys both with and without role separation, providing control over who has access to the actual encryption keys in the key store, and who has access to the database.

몇 가지 높은 수준의 모범 사례 권장 사항을 비롯한 상시 암호화 키 관리에 대한 개요는 상시 암호화를 위한 키 관리 개요를 참조하세요.For an overview of Always Encrypted key management, including some high-level best practice recommendations, see Overview of Key Management for Always Encrypted. 상시 암호화에 SqlServer PowerShell 모듈을 사용 시작하는 방법은 PowerShell을 사용하여 상시 암호화 구성을 참조하세요.For information about how to start using the SqlServer PowerShell module for Always Encrypted, see Configure Always Encrypted using PowerShell.

역할 구분 없이 키 프로비전 Key Provisioning without Role Separation

이 섹션에서는 보안 관리자 및 DBA 간에 역할 구분을 지원하지 않는 키 프로비전 방법에 대해 설명합니다.The key provisioning method described in this section does not support role separation between Security Administrators and DBAs. 아래 단계의 일부에서는 물리적 키에 대한 작업과 키 메타데이터에 대한 작업을 조합합니다.Some of the below steps combine operations on physical keys with operations on key metadata. 따라서 이 키 프로비전 방법은 데이터베이스가 클라우드에 호스트되고 중요한 데이터에 액세스하지 못하도록 클라우드 관리자(온-프레미스 DBA는 아님) 제한을 주된 목표로 하는 경우 또는 DevOps 모델을 사용하는 조직에 권장됩니다.Therefore, this method of provisioning the keys is recommended for organizations using the DevOps model, or if the database is hosted in the cloud and the primary goal is to restrict cloud administrators (but not on-premises DBAs), from accessing sensitive data. 잠재적인 악의적 사용자가 DBA에 포함되거나 또는 DBA가 중요한 데이터에 쉽게 액세스해서는 안 될 경우에는 권장되지 않습니다.It is not recommended if potential adversaries include DBAs, or if DBAs should simply not have access to sensitive data.

일반 텍스트 키 또는 키 저장소에 대한 액세스가 관여된 모든 단계(아래 표의 일반 텍스트 키/키 저장소 액세스 열에서 식별됨)를 실행하기 전에 데이터베이스를 호스트하는 컴퓨터와 다른 보안 컴퓨터에서 PowerShell 환경이 실행하는지 확인합니다.Before running any steps that involves access to plaintext keys or the key store (identified in the Accesses plaintext keys/key store column in the below table), make sure that the PowerShell environment runs on a secure machine that is different from a computer hosting your database. 자세한 내용은 키 관리에 대한 보안 고려 사항을 참조하세요.For more information, see Security Considerations for Key Management.

태스크Task 아티클Article 일반 텍스트 키/키 저장소 액세스Accesses plaintext keys/key store 데이터베이스 액세스Accesses database
1단계.Step 1. 키 저장소에 열 마스터 키를 만듭니다.Create a column master key in a key store.

참고: SqlServer PowerShell 모듈은 이 단계를 지원하지 않습니다.Note: The SqlServer PowerShell module does not support this step. 명령줄에서 이 태스크를 수행하려면 선택한 키 저장소에 관련된 도구를 사용합니다.To accomplish this task from a command-line, use the tools that are specific to your selected key store.
열 마스터 키 만들기 및 저장(상시 암호화)Create and Store Column Master Keys (Always Encrypted) Yes 아니요No
2단계.Step 2. PowerShell 환경을 시작하고 SqlServer PowerShell 모듈을 가져옵니다.Start a PowerShell environment and import the SqlServer PowerShell module. PowerShell을 사용하여 상시 암호화 구성Configure Always Encrypted using PowerShell 아니요No 아니요No
3단계.Step 3. 서버 및 데이터베이스에 연결합니다.Connect to your server and database. 데이터베이스에 연결Connect to a Database 아니요No Yes
4단계.Step 4. 열 마스터 키의 위치에 대한 정보가 포함된 SqlColumnMasterKeySettings 개체를 만듭니다.Create a SqlColumnMasterKeySettings object that contains information about the location of your column master key. SqlColumnMasterKeySettings는 PowerShell의 메모리에 있는 개체입니다.SqlColumnMasterKeySettings is an object that exists in memory (in PowerShell). 키 저장소에 관련된 cmdlet을 사용합니다.Use the cmdlet that is specific to your key store. New-SqlAzureKeyVaultColumnMasterKeySettingsNew-SqlAzureKeyVaultColumnMasterKeySettings

New-SqlCertificateStoreColumnMasterKeySettingsNew-SqlCertificateStoreColumnMasterKeySettings

New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings

New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings
아니요No 아니오No
5단계.Step 5. 데이터베이스에 열 마스터 키에 대한 메타데이터를 만듭니다.Create the metadata about the column master key in your database. New-SqlColumnMasterKeyNew-SqlColumnMasterKey

참고: 내부적으로 cmdlet은 CREATE COLUMN MASTER KEY(Transact-SQL) 문을 실행하여 키 메타데이터를 만듭니다.Note: under the covers, the cmdlet issues the CREATE COLUMN MASTER KEY (Transact-SQL) statement to create key metadata.
아니요No Yes
6단계.Step 6. 열 마스터 키가 Azure 주요 자격 증명 모음에 저장된 경우 Azure에 인증합니다.Authenticate to Azure, if your column master key is stored in Azure Key Vault. Add-SqlAzureAuthenticationContextAdd-SqlAzureAuthenticationContext Yes 아니요No
7단계.Step 7. 새 열 암호화 키를 생성하고 열 마스터 키로 암호화하고 데이터베이스에 열 암호화 키 메타데이터를 만듭니다.Generate a new column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. New-SqlColumnEncryptionKeyNew-SqlColumnEncryptionKey

참고: 내부적으로 열 암호화 키를 생성하고 암호화하는 cmdlet 변형을 사용합니다.Note: Use a variation of the cmdlet that internally generates and encrypts a column encryption key.

참고: 내부적으로 cmdlet은 CREATE COLUMN ENCRYPTION KEY(Transact-SQL) 문을 실행하여 키 메타데이터를 만듭니다.Note: Under the covers, the cmdlet issues the CREATE COLUMN ENCRYPTION KEY (Transact-SQL) statement to create key metadata.
Yes Yes

역할 구분이 없는 Windows 인증서 저장소(예)Windows Certificate Store without Role Separation (Example)

이 스크립트는 Windows 인증서 저장소의 인증서인 열 마스터 키 생성, 열 암호화 키 생성 및 암호화, SQL Server 데이터베이스에 키 메타데이터 생성 등에 관한 종단 간 예제입니다.This script is an end-to-end example for generating a column master key that is a certificate in Windows Certificate Store, generating and encrypting a column encryption key, and creating key metadata in a SQL Server database.

# Create a column master key in Windows Certificate Store.
$cert1 = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange

# Import the SqlServer module.
Import-Module "SqlServer"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$connection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$connection.ConnectionString = $connStr
$connection.Connect()
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($connection)
$database = $server.Databases[$databaseName]

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert1.Thumbprint

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings


# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName  -InputObject $database -ColumnMasterKey $cmkName

역할 구분이 없는 Azure 주요 자격 증명 모음(예제)Azure Key Vault without Role Separation (Example)

이 스크립트는 Azure 주요 자격 증명 모음 프로비전 및 구성, 자격 증명 모음에 열 마스터 키 생성, 열 암호화 키 생성 및 암호화, Azure SQL 데이터베이스에 키 메타데이터 생성에 대한 종단 간 예제입니다.This script is an end-to-end example for provisioning and configuring an Azure Key Vault, generating a column master key in the vault, generating and encrypting a column encryption key, and creating key metadata in an Azure SQL database.

# Create a column master key in Azure Key Vault.
Login-AzureRmAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "<resource group name>"
$azureLocation = "<datacenter location>"
$akvName = "<key vault name>"
$akvKeyName = "<key name>"
$azureCtx = Set-AzureRMConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
New-AzureRmResourceGroup –Name $resourceGroup –Location $azureLocation # Creates a new resource group - skip, if you desire group already exists.
New-AzureRmKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzureRmKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, update, import, backup, restore, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzureKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"

# Import the SqlServer module.
Import-Module "SqlServer"

# Connect to your database (Azure SQL database).
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated"
$connection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$connection.ConnectionString = $connStr
$connection.Connect()
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($connection)
$database = $server.Databases[$databaseName] 

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.ID

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Authenticate to Azure
Add-SqlAzureAuthenticationContext -Interactive

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName

역할 구분이 없는 CNG/KSP(예제)CNG/KSP without Role Separation (Example)

아래 스크립트는 CNG(Cryptography Next Generation) API를 구현하는 키 저장소에 열 마스터 키 생성, 열 암호화 키 생성 및 암호화, SQL Server 데이터베이스에 키 메타데이터 생성에 대한 종단 간 예제입니다.The below script is an end-to-end example for generating a column master key in a key store that implements Cryptography Next Generation API (CNG), generating and encrypting a column encryption key, and creating key metadata in a SQL Server database.

이 예제는 Microsoft 소프트웨어 키 저장소 공급자를 사용하는 키 저장소를 활용합니다.The example leverages the key store that uses Microsoft Software Key Storage Provider. 하드웨어 보안 모듈 등의 다른 저장소를 사용하도록 예제를 수정할 수 있습니다.You may choose to modify the example to use another store, such as your hardware security module. 그러려면 장치에 대한 CNG를 구현하는 KSP(키 저장소 공급자)가 컴퓨터에 설치되어 있고 적절하게 작동해야 합니다.For that, you will need to make sure the key store provider (KSP) that implements CNG for your device is installed and properly on your machine. "Microsoft 소프트웨어 키 저장소 공급자"를 장치의 KSP 이름으로 바꿔야 합니다.You will need to replace "Microsoft Software Key Storage Provider" with your device’s KSP name.

# Create a column master key in a key store that has a CNG provider, a.k.a key store provider (KSP).
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)

# Import the SqlServer module.
Import-Module "SqlServer"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$connection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$connection.ConnectionString = $connStr
$connection.Connect()
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($connection)
$database = $server.Databases[$databaseName]

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlCngColumnMasterKeySettings -CngProviderName $cngProviderName -KeyName $cngKeyName

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName

역할 구분이 있는 키 프로비전 Key Provisioning With Role Separation

이 섹션에서는 보안 관리자가 데이터베이스에 대한 액세스 권한이 없고, 데이터베이스 관리자가 키 저장소 또는 일반 텍스트 키에 대한 액세스 권한이 없는 암호화를 구성하는 단계를 제공합니다.This section provides the steps to configure encryption where security administrators do not have access to the database, and database administrators do not have access to the key store or plaintext keys.

보안 관리자Security Administrator

일반 텍스트 키 또는 키 저장소에 대한 액세스가 관여된 단계(아래 표의 일반 텍스트 키/키 저장소 액세스 열에서 식별됨)를 실행하기 전에 다음을 확인합니다.Before running any steps that involves access to plaintext keys or the key store (identified in the Accesses plaintext keys/key store column in the below table), make sure that:

  1. PowerShell 환경이 데이터베이스를 호스트하는 컴퓨터와 다른 보안 컴퓨터에서 실행됩니다.The PowerShell environment runs on a secure machine that is different from a computer hosting your database.
  2. 조직의 DBA가 역할 구분 목적을 벗어나는 컴퓨터에 대한 액세스 권한이 없습니다.DBAs in your organization have no access to the machine (that would defeat the purpose of role separation).

자세한 내용은 키 관리에 대한 보안 고려 사항을 참조하세요.For more information, see Security Considerations for Key Management.

태스크Task 아티클Article 일반 텍스트 키/키 저장소 액세스Accesses plaintext keys/key store 데이터베이스 액세스Accesses database
1단계.Step 1. 키 저장소에 열 마스터 키를 만듭니다.Create a column master key in a key store.

참고: SqlServer 모듈은 이 단계를 지원하지 않습니다.Note: The SqlServer module does not support this step. 명령줄에서 이 태스크를 수행하려면 키 저장소의 유형에 관련된 도구를 사용해야 합니다.To accomplish this task from a command-line, you need to use the tools that are specific the type of your key store.
열 마스터 키 만들기 및 저장(상시 암호화)Create and Store Column Master Keys (Always Encrypted) Yes 아니요No
2단계.Step 2. PowerShell 세션을 시작하고 SqlServer 모듈을 가져옵니다.Start a PowerShell session and import the SqlServer module. SqlServer 모듈 가져오기Import the SqlServer module 아니오No 아니요No
3단계.Step 3. 열 마스터 키의 위치에 대한 정보가 포함된 SqlColumnMasterKeySettings 개체를 만듭니다.Create a SqlColumnMasterKeySettings object that contains information about the location of your column master key. SqlColumnMasterKeySettings 는 PowerShell의 메모리에 존재하는 개체입니다.SqlColumnMasterKeySettings is an object that exists in memory (in PowerShell). 키 저장소에 관련된 cmdlet을 사용합니다.Use the cmdlet that is specific to your key store. New-SqlAzureKeyVaultColumnMasterKeySettingsNew-SqlAzureKeyVaultColumnMasterKeySettings

New-SqlCertificateStoreColumnMasterKeySettingsNew-SqlCertificateStoreColumnMasterKeySettings

New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings

New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings
아니요No 아니요No
4단계.Step 4. 열 마스터 키가 Azure 주요 자격 증명 모음에 저장된 경우 Azure에 인증Authenticate to Azure, if your column master key is stored in Azure Key Vault Add-SqlAzureAuthenticationContextAdd-SqlAzureAuthenticationContext Yes 아니요No
5단계.Step 5. 열 암호화 키를 생성하고 열 마스터 키로 암호화하여 열 암호화 키의 암호화된 값을 생성합니다.Generate a column encryption key, encrypt it with the column master key to produce an encrypted value of the column encryption key. New-SqlColumnEncryptionKeyEncryptedValueNew-SqlColumnEncryptionKeyEncryptedValue Yes 아니요No
6단계.Step 6. 열 마스터 키의 위치(열 마스터 키의 공급자 이름 및 키 경로)와 열 암호화 키의 암호화된 값을 DBA에 제공합니다.Provide the location of the column master key (the provider name and a key path of the column master key) and an encrypted value of the column encryption key to the DBA. 다음 예를 참조하십시오.See the examples below. 아니요No 아니요No

DBADBA

DBA는 보안 관리자(위의 6단계)에게 받은 정보를 사용하여 데이터베이스에서 상시 암호화 키 메타데이터를 관리합니다.DBAs use the information they receive from the Security Admin (step 6 above) to create and manage the Always Encrypted key metadata in the database.

태스크Task 아티클Article 일반 텍스트 키 액세스Accesses plaintext keys 데이터베이스 액세스Accesses database
1단계.Step 1. 보안 관리자로부터 열 마스터 키의 위치와 열 암호화 키의 암호화된 값을 얻습니다.Obtain the location of the column master key and encrypted value of the column encryption key from your Security Administrator. 다음 예를 참조하십시오.See the examples below. 아니요No 아니오No
2단계.Step 2. PowerShell 환경을 시작하고 SqlServer 모듈을 가져옵니다.Start a PowerShell environment and import the SqlServer module. PowerShell을 사용하여 상시 암호화 구성Configure Always Encrypted using PowerShell 아니요No 아니요No
3단계.Step 3. 서버 및 데이터베이스에 연결합니다.Connect to your server and a database. 데이터베이스에 연결Connect to a Database 아니요No Yes
4단계.Step 4. 열 마스터 키의 위치에 대한 정보가 포함된 SqlColumnMasterKeySettings 개체를 만듭니다.Create a SqlColumnMasterKeySettings object that contains information about the location of your column master key. SqlColumnMasterKeySettings는 메모리에 존재하는 개체입니다.SqlColumnMasterKeySettings is an object that exists in memory. New-SqlColumnMasterKeySettingsNew-SqlColumnMasterKeySettings 아니요No 아니오No
5단계.Step 5. 데이터베이스에 열 마스터 키에 대한 메타데이터를 만듭니다.Create the metadata about the column master key in your database New-SqlColumnMasterKeyNew-SqlColumnMasterKey
참고: 내부적으로 cmdlet은 CREATE COLUMN MASTER KEY(Transact-SQL) 문을 실행하여 열 마스터 키 메타데이터를 만듭니다.Note: under the covers, the cmdlet issues the CREATE COLUMN MASTER KEY (Transact-SQL) statement to create column master key metadata.
아니요No Yes
6단계.Step 6. 데이터베이스에 열 암호화 키 메타데이터를 만듭니다.Create the column encryption key metadata in the database. New-SqlColumnEncryptionKeyNew-SqlColumnEncryptionKey
참고: DBA는 열 암호화 키 메타데이터만 만드는 cmdlet의 변형을 사용합니다.Note: DBAs use a variation of the cmdlet that only creates column encryption key metadata.
내부적으로 cmdlet은 CREATE COLUMN ENCRYPTION KEY(Transact-SQL) 문을 실행하여 열 암호화 키 메타데이터를 만듭니다.Under the covers, the cmdlet issues the CREATE COLUMN ENCRYPTION KEY (Transact-SQL) statement to create column encryption key metadata.
아니요No Yes

역할 구분이 있는 Windows 인증서 저장소(예제)Windows Certificate Store with Role Separation (Example)

보안 관리자Security Administrator

# Create a column master key in Windows Certificate Store.
$storeLocation = "CurrentUser"
$certPath = "Cert:" + $storeLocation + "\My"
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation $certPath -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange

# Import the SqlServer module
Import-Module "SqlServer"

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint

# Generate a column encryption key, encrypt it with the column master key to produce an encrypted value of the column encryption key.
$encryptedValue = New-SqlColumnEncryptionKeyEncryptedValue -TargetColumnMasterKeySettings $cmkSettings

# Share the location of the column master key and an encrypted value of the column encryption key with a DBA, via a CSV file on a share drive
$keyDataFile = "Z:\keydata.txt"
"KeyStoreProviderName, KeyPath, EncryptedValue" > $keyDataFile
$cmkSettings.KeyStoreProviderName + ", " + $cmkSettings.KeyPath + ", " + $encryptedValue >> $keyDataFile

# Read the key data back to verify
$keyData = Import-Csv $keyDataFile
$keyData.KeyStoreProviderName
$keyData.KeyPath
$keyData.EncryptedValue 

DBADBA

# Obtain the location of the column master key and the encrypted value of the column encryption key from your Security Administrator, via a CSV file on a share drive.
$keyDataFile = "Z:\keydata.txt"
$keyData = Import-Csv $keyDataFile

# Import the SqlServer module
Import-Module "SqlServer"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$connection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$connection.ConnectionString = $connStr
$connection.Connect()
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($connection)
$database = $server.Databases[$databaseName]

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlColumnMasterKeySettings -KeyStoreProviderName $keyData.KeyStoreProviderName -KeyPath $keyData.KeyPath

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a  column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -EncryptedValue $keyData.EncryptedValue

다음 단계Next Steps

추가 리소스Additional Resources