Set-SqlColumnEncryption

데이터베이스의 지정된 열을 암호화, 해독 또는 다시 암호화합니다.

Syntax

Set-SqlColumnEncryption
   -ColumnEncryptionSettings <SqlColumnEncryptionSettings[]>
   [-UseOnlineApproach]
   [-KeepCheckForeignKeyConstraints]
   [-MaxDowntimeInSeconds <Int32>]
   [-KeyVaultAccessToken <String>]
   [-ManagedHsmAccessToken <String>]
   [-LockTimeoutInSeconds <Int32>]
   [-MaxIterationDurationInDays <Int32>]
   [-MaxDivergingIterations <Int32>]
   [-MaxIterations <Int32>]
   [-EnclaveAttestationProtocol <SqlConnectionAttestationProtocol>]
   [-EnclaveAttestationURL <String>]
   [-LogFileDirectory <String>]
   [-InputObject] <Database>
   [-Script]
   [-AccessToken <PSObject>]
   [-TrustServerCertificate]
   [-HostNameInCertificate <String>]
   [-Encrypt <String>]
   [<CommonParameters>]
Set-SqlColumnEncryption
   -ColumnEncryptionSettings <SqlColumnEncryptionSettings[]>
   [-UseOnlineApproach]
   [-KeepCheckForeignKeyConstraints]
   [-MaxDowntimeInSeconds <Int32>]
   [-KeyVaultAccessToken <String>]
   [-ManagedHsmAccessToken <String>]
   [-LockTimeoutInSeconds <Int32>]
   [-MaxIterationDurationInDays <Int32>]
   [-MaxDivergingIterations <Int32>]
   [-MaxIterations <Int32>]
   [-EnclaveAttestationProtocol <SqlConnectionAttestationProtocol>]
   [-EnclaveAttestationURL <String>]
   [-LogFileDirectory <String>]
   [[-Path] <String>]
   [-Script]
   [-AccessToken <PSObject>]
   [-TrustServerCertificate]
   [-HostNameInCertificate <String>]
   [-Encrypt <String>]
   [<CommonParameters>]

Description

Set-SqlColumnEncryption cmdlet은 Always Encrypted 기능을 사용하여 지정된 데이터베이스 열을 암호화, 암호 해독 또는 다시 암호화합니다.

cmdlet은 각각 데이터베이스의 한 열에 대한 대상 암호화 구성 을 지정하는 SqlColumnEncryptionSettings 개체의 배열을 허용합니다.

cmdlet은 열의 현재 암호화 구성 및 지정된 대상 암호화 설정에 따라 지정된 각 열을 암호화, 암호 해독 또는 다시 암호화합니다.

cmdlet은 키를 master 열을 포함하는 키 저장소와 통신합니다. 암호화, 암호 해독 또는 다시 암호화할 열을 보호하는 열 master 키가 Azure에 저장된 경우 키 자격 증명 모음 또는 키를 보유하는 관리형 HSM에 대해 유효한 인증 토큰을 지정해야 합니다. 또는 이 cmdlet을 호출하기 전에 Add-SqlAzureAuthenticationContext 를 사용하여 Azure에 인증할 수 있습니다.

Module requirements: version 21+ on PowerShell 5.1; version 22+ on PowerShell 7.x.

예제

예제 1: 지정된 대상 암호화 설정을 세 개의 데이터베이스 열에 적용합니다.

이 예제에서 dbo.Student.Id 열은 결정적 암호화 및 라는 MyCEK열 암호화 키를 사용하여 암호화됩니다.

열은 dbo.Student.LastName 임의 암호화 및 라는 MyCEK열 암호화 키를 사용하여 암호화됩니다.

열은 dbo.StudentFirstName 암호화되지 않습니다(열이 처음에 암호화되면 암호 해독됨).

이 예제에서는 오프라인 방법을 사용합니다. 즉, 작업 전체에서 Student 테이블을 업데이트할 수 없습니다. 를 보호하는 MyCEK열 master 키가 Azure Key Vault 저장되지 않는다고 가정합니다.

$ces1 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.Id'        -EncryptionType 'Deterministic' -EncryptionKey 'MyCek'
$ces2 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.LastName'  -EncryptionType 'Randomized'    -EncryptionKey 'MyCek'
$ces3 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.FirstName' -EncryptionType 'Plaintext'
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces1,$ces2,$ces3 -LogFileDirectory .

예제 2: 세 개의 데이터베이스 열에 지정된 대상 암호화 설정을 적용합니다(열 master 키는 Azure Key Vault 저장됨).

이 예제는 위의 예제와 비슷합니다. 유일한 차이점은 키 보호 MyCEK 에 master 열이 Azure Key Vault 저장된다는 것입니다.

# Connect to Azure account.
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount

# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token

$ces1 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.Id'        -EncryptionType 'Deterministic' -EncryptionKey 'MyCek'
$ces2 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.LastName'  -EncryptionType 'Randomized'    -EncryptionKey 'MyCek' 
$ces3 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.FirstName' -EncryptionType 'Plaintext'

# Pass the token to the cmdlet. It will use the token to communicate with Azure Key Vault to obtain the plaintext value of the column encryption key.
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces1,$ces2,$ces3 -LogFileDirectory . -KeyVaultAccessToken $keyVaultAccessToken

예제 3: 온라인 방법을 사용하여 3개의 데이터베이스 열에 지정된 대상 암호화 설정을 적용합니다.

이 예제 Student 에서는 최대 30초 동안 읽기 및 쓰기에 사용할 수 없습니다(MaxDowntimeInSeconds 매개 변수를 사용하여 지정된 값). 를 보호하는 MyCEK열 master 키가 Azure 외부에 저장된다고 가정합니다(Azure 토큰 전달은 필요하지 않음).

$ces1 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.Id'        -EncryptionType 'Deterministic' -EncryptionKey 'MyCek'
$ces2 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.LastName'  -EncryptionType 'Randomized'    -EncryptionKey 'MyCek'
$ces3 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.FirstName' -EncryptionType 'Plaintext'
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces1,$ces2,$ces3 -UseOnlineApproach -MaxDowntimeInSeconds 30 -LogFileDirectory .

예제 4: 현재 위치 암호화를 사용하여 여러 열에 대상 암호화 설정을 적용합니다.

$ces1 = New-SqlColumnEncryptionSettings -ColumnName dbo.Student.Id        -EncryptionType 'Randomized' -EncryptionKey 'CEK1' 
$ces2 = New-SqlColumnEncryptionSettings -ColumnName dbo.Student.LastName  -EncryptionType 'Randomized' -EncryptionKey 'CEK1' 
$ces3 = New-SqlColumnEncryptionSettings -ColumnName dbo.Student.FirstName -EncryptionType 'Randomized' -EncryptionKey 'CEK1'
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces1,$ces2,$ces3 -LogFileDirectory . -EnclaveAttestationProtocol 'AAS' -EnclaveAttestationURL 'https://enclavedemoattest.weu.attest.azure.net'

이 예제에서는 현재 위치 암호화를 사용하여 데이터베이스 열에 대상 암호화 설정을 적용합니다. 즉, 현재 위치 암호화에 대한 모든 필수 구성 요소가 충족되는 경우, 즉 데이터베이스에 enclave가 활성화되어 있고 cmdlet이 트리거하는 암호화 작업에 사용되는 키가 enclave를 사용하도록 설정되어 있습니다.

매개 변수

-AccessToken

사용자/암호 또는 Windows 인증 대신 SQL Server 인증하는 데 사용되는 액세스 토큰입니다.

예를 들어 또는 에 연결 SQL Azure DB 하고 를 사용하는 Service Principal 데 사용할 수 있습니다Managed IdentitySQL Azure Managed Instance.

사용할 매개 변수는 토큰을 나타내는 문자열이거나 PSAccessToken 를 실행 Get-AzAccessToken -ResourceUrl https://database.windows.net하여 반환된 개체일 수 있습니다.

이 매개 변수는 모듈의 v22에서 새로 추가되었습니다.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ColumnEncryptionSettings

SqlColumnEncryptionSettings 개체의 배열을 지정합니다. 각 개체는 데이터베이스의 한 열에 대한 대상 암호화 구성을 지정합니다.

Type:SqlColumnEncryptionSettings[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-EnclaveAttestationProtocol

보안 enclave를 사용하는 Always Encrypted 대한 enclave의 증명 프로토콜을 지정합니다. 이 매개 변수는 cmdlet이 서버 쪽 보안 Enclave 내에서 암호화 작업을 수행하여 데이터 다운로드 및 업로드 비용을 무효화하는 데 필요합니다. 현재 위치 암호화에는 다른 필수 구성 요소가 있습니다. 데이터베이스에 Enclave가 구성되어 있어야 하며 enclave 사용 암호화 키를 사용해야 합니다.

Type:SqlConnectionAttestationProtocol
Aliases:AttestationProtocol
Accepted values:NotSpecified, AAS, None, HGS
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EnclaveAttestationURL

보안 enclave와 함께 Always Encrypted 사용할 때 현재 위치 암호화에 대한 enclave 증명 URL을 지정합니다. EnclaveAttestationProtocol이 또는 HGSAAS 설정된 경우 필수입니다.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encrypt

SQL Server 연결할 때 사용할 암호화 유형입니다.

이 값은 Encrypt Microsoft.Data.SqlClient 드라이버의 SqlConnection 개체에 있는 속성 SqlConnectionEncryptOption 에 매핑됩니다.

모듈의 v22에서 기본값은 (v21과의 호환성을 위해)입니다 Optional . 모듈의 v23 이상에서는 기본값이 '필수'이며 기존 스크립트에 대한 호환성이 손상되는 변경이 발생할 수 있습니다.

이 매개 변수는 모듈의 v22에서 새로 추가되었습니다.

Type:String
Accepted values:Mandatory, Optional, Strict
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostNameInCertificate

SQL Server TLS/SSL 인증서의 유효성을 검사할 때 사용할 호스트 이름입니다. 강제 암호화에 대해 SQL Server instance 사용하도록 설정되어 있고 hostname/shortname을 사용하여 instance 연결하려는 경우 이 매개 변수를 전달해야 합니다. 이 매개 변수를 생략하면 FQDN(정규화된 도메인 이름)을 -ServerInstance에 전달하여 강제 암호화를 사용하도록 설정된 SQL Server instance 연결해야 합니다.

이 매개 변수는 모듈의 v22에서 새로 추가되었습니다.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

이 cmdlet이 작업을 실행하는 SQL 데이터베이스 개체를 지정합니다.

Type:Database
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-KeepCheckForeignKeyConstraints

설정되면 외래 키 제약 조건의 검사 의미 체계(CHECK 또는 NOCHECK)가 유지됩니다.

그렇지 않으면 설정되지 않은 경우 UseOnlineApproach 가 설정되지 않은 경우 애플리케이션에 미치는 영향을 최소화하기 위해 항상 NOCHECK 옵션을 사용하여 외래 키 제약 조건이 다시 만들어집니다.

KeepCheckForeignKeyConstraints는 UseOnlineApproach가 설정된 경우에만 유효합니다.

오프라인 접근 방식을 사용하면 외래 키 제약 조건의 의미 체계가 항상 유지됩니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyVaultAccessToken

Azure Key Vault 키 자격 증명 모음에 대한 액세스 토큰을 지정합니다. 암호화, 암호 해독 또는 다시 암호화할 열을 보호하는 열 master 키가 Azure Key Vault 키 자격 증명 모음에 저장된 경우 이 매개 변수를 사용합니다.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LockTimeoutInSeconds

cmdlet이 마지막 캐치업 반복을 시작하는 데 필요한 데이터베이스 잠금을 대기하는 최대 시간(초)을 지정합니다. 값 -1(기본값)은 시간 제한 기간(즉, 영원히 대기)을 나타내지 않습니다. 값 0은 전혀 기다리지 않음을 의미합니다. 기다리는 시간이 제한 시간 값을 초과하면 오류가 반환됩니다. UseOnlineApproach가 설정된 경우에만 유효합니다.

Type:Int32
Position:Named
Default value:-1
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LogFileDirectory

설정된 경우 cmdlet은 지정된 디렉터리에 로그 파일을 만듭니다.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ManagedHsmAccessToken

Azure Key Vault 관리형 HSM에 대한 액세스 토큰을 지정합니다. 암호화, 암호 해독 또는 다시 암호화할 열을 보호하는 열 master 키가 Azure Key Vault 관리형 HSM에 저장된 경우 이 매개 변수를 사용합니다.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxDivergingIterations

처리된 행 수가 증가하는 연속 캐치업 반복의 최대 수를 지정합니다. 이 제한에 도달하면 cmdlet은 원본 테이블의 변경 내용을 따라 잡을 수 없다고 가정하고 작업을 중단하고 데이터베이스의 원래 상태를 다시 만듭니다. UseOnlineApproach가 설정된 경우에만 유효합니다. MaxIterations 값보다 작아야 합니다.

Type:Int32
Position:Named
Default value:5
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxDowntimeInSeconds

원본 테이블을 읽기 및 쓰기에 사용할 수 없는 최대 시간(초)을 지정합니다. UseOnlineApproach가 설정된 경우에만 유효합니다.

Type:Int32
Position:Named
Default value:1800
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxIterationDurationInDays

시드 또는 단일 캐치업 반복의 최대 시간(일)을 지정합니다. 시드 또는 캐치업 반복이 지정된 값보다 많은 경우 cmdlet은 작업을 중단하고 데이터베이스의 원래 상태를 다시 만듭니다. UseOnlineApproach가 설정된 경우에만 유효합니다.

Type:Int32
Position:Named
Default value:3
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxIterations

캐치업 단계의 최대 반복 횟수를 지정합니다. 이 제한에 도달하면 cmdlet은 작업을 중단하고 데이터베이스의 원래 상태를 다시 만듭니다. UseOnlineApproach가 설정된 경우에만 유효합니다.

Type:Int32
Position:Named
Default value:100
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

이 cmdlet이 작업을 실행하는 SQL 데이터베이스의 경로를 지정합니다. 이 매개 변수의 값을 지정하지 않으면 cmdlet은 현재 작업 위치를 사용합니다.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Script

이 cmdlet이 이 cmdlet이 수행하는 작업을 수행하는 Transact-SQL 스크립트를 반환한다는 것을 나타냅니다.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TrustServerCertificate

신뢰의 유효성을 검사하기 위해 인증서 체인을 건너뛰는 동안 채널이 암호화되는지 여부를 나타냅니다.

모듈의 v22에서 기본값은 (v21과의 호환성을 위해)입니다 $true . 모듈의 v23 이상에서 기본값은 '$false'이며, 이로 인해 기존 스크립트에 대한 호환성이 손상되는 변경이 발생할 수 있습니다.

이 매개 변수는 모듈의 v22에서 새로 추가되었습니다.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseOnlineApproach

설정된 경우 cmdlet은 온라인 접근 방식을 사용하여 대부분의 작업 기간 동안 읽기 및 쓰기 모두에 대해 다른 애플리케이션에서 데이터베이스를 사용할 수 있도록 합니다.

그렇지 않으면 cmdlet이 영향을 받은 테이블을 잠그므로 전체 작업에 대한 업데이트를 사용할 수 없습니다. 테이블은 읽기에 사용할 수 있습니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

입력

Microsoft.SqlServer.Management.Smo.Database

출력

String