다음을 통해 공유


Set-SqlColumnEncryption

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

구문

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>]
   [-AllowVerboseLogging]
   [-InputObject] <Database>
   [-Script]
   [-AccessToken <PSObject>]
   [-TrustServerCertificate]
   [-HostNameInCertificate <String>]
   [-Encrypt <String>]
   [-ProgressAction <ActionPreference>]
   [<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>]
   [-AllowVerboseLogging]
   [[-Path] <String>]
   [-Script]
   [-AccessToken <PSObject>]
   [-TrustServerCertificate]
   [-HostNameInCertificate <String>]
   [-Encrypt <String>]
   [-ProgressAction <ActionPreference>]
   [<CommonParameters>]

Description

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

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

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

cmdlet은 열 마스터 키를 보유하는 키 저장소와 통신합니다. 암호화, 암호 해독 또는 다시 암호화할 열을 보호하는 열 마스터 키가 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보호하는 열 마스터 키가 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: 지정된 대상 암호화 설정을 세 개의 데이터베이스 열에 적용합니다(열 마스터 키는 Azure Key Vault에 저장됨).

이 예제는 위의 예제와 비슷합니다. 유일한 차이점은 MyCEK 보호하는 열 마스터 키가 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: 온라인 방법을 사용하여 세 개의 데이터베이스 열에 지정된 대상 암호화 설정을 적용합니다.

이 예제에서 Student 테이블은 최대 30초 동안 읽기 및 쓰기에 사용할 수 없습니다(MaxDowntimeInSeconds 매개 변수를 사용하여 지정된 값). MyCEK보호하는 열 마스터 키가 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에 인증하는 데 사용되는 액세스 토큰입니다.

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

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

이 매개 변수는 모듈의 v22에서 새로 생성됩니다.

형식:PSObject
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-AllowVerboseLogging

설정된 경우 cmdlet은 로그 파일에 자세한 정보 표시 메시지를 추가하고('LogFileDirectory' 매개 변수가 설정된 경우) 작업을 수행하기 위해 기본 라이브러리에서 사용하는 dacpac 파일을 유지합니다.

형식:SwitchParameter
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-ColumnEncryptionSettings

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

형식:SqlColumnEncryptionSettings[]
Position:Named
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-EnclaveAttestationProtocol

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

형식:SqlConnectionAttestationProtocol
별칭:AttestationProtocol
허용되는 값:NotSpecified, AAS, None, HGS
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-EnclaveAttestationURL

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

형식:String
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Encrypt

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

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

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

이 매개 변수는 모듈의 v22에서 새로 생성됩니다.

형식:String
허용되는 값:Mandatory, Optional, Strict
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-HostNameInCertificate

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

이 매개 변수는 모듈의 v22에서 새로 생성됩니다.

형식:String
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-InputObject

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

형식:Database
Position:1
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-KeepCheckForeignKeyConstraints

설정된 경우 외래 키 제약 조건의 의미 체계(CHECK 또는 NOCHECK)가 유지됩니다.

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

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

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

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-KeyVaultAccessToken

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

형식:String
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-LockTimeoutInSeconds

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

형식:Int32
Position:Named
Default value:-1
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-LogFileDirectory

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

형식:String
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-ManagedHsmAccessToken

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

형식:String
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-MaxDivergingIterations

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

형식:Int32
Position:Named
Default value:5
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-MaxDowntimeInSeconds

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

형식:Int32
Position:Named
Default value:1800
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-MaxIterationDurationInDays

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

형식:Int32
Position:Named
Default value:3
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-MaxIterations

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

형식:Int32
Position:Named
Default value:100
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Path

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

형식:String
Position:1
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-ProgressAction

powerShell이 스크립트, cmdlet 또는 공급자(예: Write-Progress cmdlet에서 생성된 진행률 표시줄)에 의해 생성된 진행률 업데이트에 응답하는 방법을 결정합니다. Write-Progress cmdlet은 명령의 상태를 표시하는 진행률 표시줄을 만듭니다.

형식:ActionPreference
별칭:proga
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Script

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

형식:SwitchParameter
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-TrustServerCertificate

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

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

이 매개 변수는 모듈의 v22에서 새로 생성됩니다.

형식:SwitchParameter
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-UseOnlineApproach

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

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

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

Microsoft.SqlServer.Management.Smo.Database

출력

String