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