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

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SqlServer PowerShell 모듈은 Azure SQL Database와 SQL Server 2016 둘 다에서 상시 암호화 를 구성하기 위한 cmdlet을 제공합니다.The SqlServer PowerShell module provides cmdlets for configuring Always Encrypted in both Azure SQL Database and SQL Server 2016.

SqlServer 모듈의 Always Encrypted cmdlet은 키나 중요한 데이터로 작업하므로 보안 컴퓨터에서 실행해야 합니다.Always Encrypted cmdlets in the SqlServer module work with keys or sensitive data, so it is important that you run the cmdlets on a secure computer. Always Encrypted를 관리하는 경우 SQL Server 인스턴스를 호스트하는 컴퓨터 이외의 다른 컴퓨터에서 cmdlet을 실행합니다.When managing Always Encrypted, execute the cmdlets from a different computer than the computer hosting your SQL Server instance.

Always Encrypted의 주요 목표는 데이터베이스 시스템이 손상된 경우에도 암호화된 중요한 데이터를 안전하게 보호하는 것이므로 SQL Server 컴퓨터에서 키 또는 중요한 데이터를 처리하는 PowerShell 스크립트를 실행하면 기능의 이점이 감소하거나 무효화될 수 있습니다.Because the primary goal of Always Encrypted is to ensure encrypted sensitive data is safe, even if the database system gets compromised, executing a PowerShell script that processes keys or sensitive data on the SQL Server computer can reduce or defeat the benefits of the feature. 보안과 관련된 추가 권장 사항을 보려면 키 관리에 대한 보안 고려 사항을 참조하세요.For additional security-related recommendations, see Security Considerations for Key Management.

개별 cmdlet 문서로 연결되는 링크는 이 페이지 맨 아래에 있습니다.Links to the individual cmdlet articles are at the bottom of this page.

필수 구성 요소Prerequisites

SQL Server 인스턴스를 호스트하는 컴퓨터가 아닌 보안 컴퓨터에 SqlServer 모듈 을 설치합니다.Install the SqlServer module on a secure computer that is NOT a computer hosting your SQL Server instance. PowerShell 갤러리에서 직접 모듈을 설치할 수 있습니다.The module can be installed directly from the PowerShell gallery. 자세한 내용은 다운로드 지침을 참조하세요.See the download instructions for more details.

SqlServer 모듈 가져오기Importing the SqlServer Module

SqlServer 모듈을 로드하려면To load the SqlServer module:

  1. Set-ExecutionPolicy cmdlet을 사용하여 적절한 스크립트 실행 정책을 설정합니다.Use the Set-ExecutionPolicy cmdlet to set the appropriate script execution policy.
  2. Import-Module cmdlet을 사용하여 SqlServer 모듈을 가져옵니다.Use the Import-Module cmdlet to import the SqlServer module.

이 예제에서는 SqlServer 모듈을 로드합니다.This example loads the SqlServer module.

# Import the SQL Server Module.  
Import-Module "SqlServer" 

데이터베이스에 연결Connecting to a Database

상시 암호화 cmdlet 중 일부는 데이터베이스의 데이터 또는 메타데이터로 작업하므로 먼저 데이터베이스에 연결해야 합니다.Some of the Always Encrypted cmdlets work with data or metadata in the database and require that you connect to the database first. SqlServer 모듈을 사용하여 상시 암호화를 구성할 때 데이터베이스에 연결하는 다음 두 가지 권장 방법이 있습니다.There are two recommended methods of connecting to a database when configuring Always Encrypted using the SqlServer module:

  1. SQL Server PowerShell을 사용하여 연결합니다.Connect using SQL Server PowerShell.
  2. SMO(SQL Server 관리 개체)를 사용하여 연결합니다.Connect using SQL Server Management Objects (SMO).

SQL Server PowerShell 사용Using SQL Server PowerShell

이 방법은 SQL Server에서만 작동합니다(Azure SQL 데이터베이스에서는 지원되지 않음).This method works only for SQL Server (it is not supported in Azure SQL Database).

SQL Server PowerShell에서 파일 시스템 경로를 탐색하는 데 일반적으로 사용되는 명령과 비슷한 Windows PowerShell 별칭을 사용하여 경로를 탐색할 수 있습니다.With SQL Server PowerShell, you can navigate the paths using Windows PowerShell aliases similar to the commands you typically use to navigate file system paths. 대상 인스턴스와 데이터베이스로 이동하면 이후 cmdlet은 다음 예제와 같이 해당 데이터베이스를 대상으로 합니다.Once you navigate to the target instance and the database, the subsequent cmdlets target that database, as shown in the following example:

# Import the SqlServer module.
Import-Module "SqlServer"
# Navigate to the database in the remote instance.
cd SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase
# List column master keys in the above database.
Get-SqlColumnMasterKey

또는 데이터베이스로 이동하는 대신 제네릭 Path 매개 변수를 사용하여 데이터베이스 경로를 지정할 수 있습니다.Alternatively, you can specify a database path using the generic Path parameter, instead of navigating to the database.

# Import the SqlServer module.
Import-Module "SqlServer" 
# List column master keys for the specified database.
Get-SqlColumnMasterKey -Path SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase

SMO 사용Using SMO

이 방법은 Azure SQL 데이터베이스와 SQL Server 둘 다에서 작동합니다.This method works for both Azure SQL Database and SQL Server. SMO에서 데이터베이스 클래스개체를 만든 다음 데이터베이스에 연결하는 cmdlet의 InputObject 매개 변수를 사용하여 개체를 전달할 수 있습니다.With SMO, you can create an object of the Database Class, and then pass the object using the InputObject parameter of a cmdlet that connects to the database.

# 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] 

# List column master keys for the specified database.
Get-SqlColumnMasterKey -InputObject $database

또는 파이프를 사용할 수 있습니다.Alternatively, you can use piping:

$database | Get-SqlColumnMasterKey

PowerShell을 사용하는 상시 암호화 작업Always Encrypted Tasks using PowerShell

상시 암호화 Cmdlet 참조Always Encrypted Cmdlet Reference

상시 암호화에 사용할 수 있는 PowerShell cmdlet은 다음과 같습니다.The following PowerShell cmdlets are available for Always Encrypted:

CMDLETCMDLET 설명Description
Add-SqlAzureAuthenticationContextAdd-SqlAzureAuthenticationContext Azure에 인증을 수행하고 인증 토큰을 획득합니다.Performs authentication to Azure and acquires an authentication token.
Add-SqlColumnEncryptionKeyValueAdd-SqlColumnEncryptionKeyValue 데이터베이스의 기존 열 암호화 키 개체에 대한 새 암호화된 값을 추가합니다.Adds a new encrypted value for an existing column encryption key object in the database.
Complete-SqlColumnMasterKeyRotationComplete-SqlColumnMasterKeyRotation 열 마스터 키 순환을 완료합니다.Completes the rotation of a column master key
Get-SqlColumnEncryptionKeyGet-SqlColumnEncryptionKey 데이터베이스에서 정의된 모든 열 암호화 키 개체를 반환하거나 지정된 이름을 가진 열 암호화 키 개체 하나를 반환합니다.Returns all column encryption key objects defined in the database, or returns one column encryption key object with the specified name.
Get-SqlColumnMasterKeyGet-SqlColumnMasterKey 데이터베이스에서 정의된 열 마스터 키 개체를 반환하거나 지정된 이름을 가진 열 마스터 키 개체 하나를 반환합니다.Returns the column master key objects defined in the database, or returns one column master key object with the specified name.
Invoke-SqlColumnMasterKeyRotationInvoke-SqlColumnMasterKeyRotation 열 마스터 키 순환을 시작합니다.Initiates the rotation of a column master key.
New-SqlAzureKeyVaultColumnMasterKeySettingsNew-SqlAzureKeyVaultColumnMasterKeySettings Azure 주요 자격 증명 모음에 저장된 비대칭 키를 설명하는 SqlColumnMasterKeySettings 개체를 만듭니다.Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in Azure Key Vault.
New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings CNG(Cryptography Next Generation) API를 지원하는 키 저장소에 저장된 비대칭 키를 설명하는 SqlColumnMasterKeySettings 개체를 만듭니다.Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in a key store supporting the Cryptography Next Generation (CNG) API.
New-SqlColumnEncryptionKeyNew-SqlColumnEncryptionKey 데이터베이스에 열 암호화 키 개체를 만듭니다.Creates a column encryption key object in the database.
New-SqlColumnEncryptionKeyEncryptedValueNew-SqlColumnEncryptionKeyEncryptedValue 열 암호화 키의 암호화된 값을 생성합니다.Produces an encrypted value of a column encryption key.
New-SqlColumnEncryptionSettingsNew-SqlColumnEncryptionSettings CEK 및 암호화 유형을 포함하여 단일 열의 암호화에 대한 정보를 캡슐화하는 SqlColumnEncryptionSettings 개체를 만듭니다.Creates a SqlColumnEncryptionSettings object that encapsulates information about a single column’s encryption, including CEK and encryption type.
New-SqlColumnMasterKeyNew-SqlColumnMasterKey 데이터베이스에 열 마스터 키 개체를 만듭니다.Creates a column master key object in the database.
New-SqlColumnMasterKeySettingsNew-SqlColumnMasterKeySettings 지정된 공급자 및 키 경로를 사용하여 열 마스터 키에 대한 SqlColumnMasterKeySettings 개체를 만듭니다.Creates a SqlColumnMasterKeySettings object for a column master key with the specified provider and key path.
New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings CAPI(Cryptography API)를 지원하는 CSP(암호화 서비스 공급자)의 키 저장소에 저장된 비대칭 키를 설명하는 SqlColumnMasterKeySettings 개체를 만듭니다.Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in a key store with a Cryptography Service Provider (CSP) supporting Cryptography API (CAPI).
Remove-SqlColumnEncryptionKeyRemove-SqlColumnEncryptionKey 데이터베이스에서 열 암호화 키 개체를 제거합니다.Removes the column encryption key object from the database.
Remove-SqlColumnEncryptionKeyValueRemove-SqlColumnEncryptionKeyValue 데이터베이스의 기존 열 암호화 키 개체에서 암호화된 값을 제거합니다.Removes an encrypted value from an existing column encryption key object in the database.
Remove-SqlColumnMasterKeyRemove-SqlColumnMasterKey 데이터베이스에서 열 마스터 키 개체를 제거합니다.Removes the column master key object from the database.
Set-SqlColumnEncryptionSet-SqlColumnEncryption 데이터베이스의 지정된 열을 암호화, 해독 또는 다시 암호화합니다.Encrypts, decrypts, or re-encrypts specified columns in the database.

추가 리소스Additional Resources