Set-SqlColumnEncryption
加密、解密或重新加密資料庫中指定的資料行。
語法
ByObject
Set-SqlColumnEncryption
[-InputObject] <Database>
-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]
[-DisableFallBackToClientSide]
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
ByPath
Set-SqlColumnEncryption
[[-Path] <String>]
-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]
[-DisableFallBackToClientSide]
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Description
Set-SqlColumnEncryption Cmdlet 會使用 Always Encrypted 功能來加密、解密或重新加密指定的資料庫數據行。
Cmdlet 會接受 SqlColumnEncryptionSettings 對象的數位,每個物件都會指定資料庫中一個數據行的目標加密組態。
Cmdlet 會根據數據行目前的加密組態和指定的目標加密設定,加密、解密或重新加密每個指定的數據行。
Cmdlet 會與保存數據行主要金鑰的金鑰存放區通訊。 如果保護要加密、解密或重新加密之數據行的任何數據行主要密鑰儲存在 Azure 中,您必須為儲存金鑰保存庫或儲存金鑰的受控 HSM 指定有效的驗證權杖。 或者,您可以先使用 Add-SqlAzureAuthenticationContext 向 Azure 進行驗證,再呼叫此 Cmdlet。
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 行不會加密(如果數據行最初加密,則會解密)。
此範例會使用離線方法,這表示學生數據表在整個作業中仍無法使用更新。
假設數據行主要密鑰保護 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'
此範例會使用就地加密將目標加密設定套用至資料庫數據行,前提是符合就地加密的所有必要條件,也就是資料庫已啟用記憶體保護區,而且 Cmdlet 觸發的密碼編譯作業中使用的密鑰會啟用記憶體保護區。
參數
-AccessToken
用來向 SQL Server 驗證的存取令牌,作為使用者/密碼或 Windows 驗證的替代方案。
例如,這可用來連線到 SQL Azure DB 或 SQL Azure Managed Instance 或 。 Service PrincipalManaged Identity
要使用的參數可以是字串,表示令牌或 PSAccessToken 物件,如執行 Get-AzAccessToken -ResourceUrl https://database.windows.net所傳回。
此參數是模組 v22 的新功能。
參數屬性
| 類型: | PSObject |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-AllowVerboseLogging
如果設定,Cmdlet 會將詳細資訊訊息新增至記錄檔(如果已設定 'LogFileDirectory' 參數),並保留基礎連結庫用來執行作業的 dacpac 檔案。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ColumnEncryptionSettings
指定 SqlColumnEncryptionSettings 物件的陣列,每個物件都會指定資料庫中一個數據行的目標加密組態。
參數屬性
| 類型: | SqlColumnEncryptionSettings[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-DisableFallBackToClientSide
指定此參數時,如果作業不適合就地模式,而不是以無訊息方式回復至用戶端加密模式,Cmdlet 就會產生適當的錯誤訊息。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-EnclaveAttestationProtocol
指定具有安全記憶體保護區之 Always Encrypted 的記憶體保護區證明通訊協定。 Cmdlet 需要此參數,才能在伺服器端安全記憶體保護區內就地執行密碼編譯作業,以排除下載和上傳數據的費用。 請注意,就地加密具有其他必要條件:您的資料庫必須已設定記憶體保護區,而且您必須使用已啟用記憶體保護區的密碼編譯密鑰。
參數屬性
| 類型: | SqlConnectionAttestationProtocol |
| 預設值: | None |
| 接受的值: | NotSpecified, AAS, None, HGS |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | AttestationProtocol |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-EnclaveAttestationURL
使用具有安全記憶體保護區的 Always Encrypted 時,指定就地加密的記憶體保護區證明 URL。 如果 EnclaveAttestationProtocol 設定為 AAS 或 HGS,則為必要項。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Encrypt
線上到 SQL Server 時要使用的加密類型。
此值會對應至 Encrypt Microsoft.Data.SqlClient 驅動程式之 SqlConnection 物件上的 屬性 SqlConnectionEncryptOption 。
在模組的 v22 中,預設值為 Optional (為了與 v21 相容)。 在模組的 v23+ 中,預設值會是 「強制」,這可能會為現有的腳本建立重大變更。
此參數是模組 v22 的新功能。
參數屬性
| 類型: | String |
| 預設值: | None |
| 接受的值: | Mandatory, Optional, Strict |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-HostNameInCertificate
用於驗證 SQL Server TLS/SSL 憑證的主機名稱。 如果您的 SQL Server 實例已啟用強制加密,而且您想要使用主機名/shortname 連線到實例,則必須傳遞此參數。 如果省略此參數,則必須將完整功能變數名稱 (FQDN) 傳遞至 -ServerInstance 才能連線到啟用強制加密的 SQL Server 實例。
此參數是模組 v22 的新功能。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-InputObject
指定此 Cmdlet 執行作業的 SQL 資料庫物件。
參數屬性
| 類型: | Database |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByObject
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-KeepCheckForeignKeyConstraints
如果已設定,則會保留外鍵條件約束的檢查語意 (CHECK 或 NOCHECK)。
否則,如果未設定,而且未設定 UseOnlineApproach ,則一律會使用NOCHECK選項重新建立外鍵條件約束,以將對應用程式的影響降到最低。
KeepCheckForeignKeyConstraints 只有在設定 UseOnlineApproach 時才有效。
使用脫機方法時,一律會保留外鍵條件約束的語意。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-KeyVaultAccessToken
指定 Azure Key Vault 中金鑰保存庫的存取令牌。 如果保護要加密、解密或重新加密之數據行的任何數據行主要密鑰儲存在 Azure Key Vault 中的金鑰保存庫中,請使用此參數。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-LockTimeoutInSeconds
指定 Cmdlet 將等候開始最後一個追補反覆專案所需的資料庫鎖定時間上限(以秒為單位)。 -1 值(預設值)表示沒有逾時期間(也就是永遠等候)。 值為 0 表示完全不等候。 當等候鎖定超過逾時值時,會傳回錯誤。 只有在 設定 UseOnlineApproach 時才有效。
參數屬性
| 類型: | Int32 |
| 預設值: | -1 |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-LogFileDirectory
如果設定,Cmdlet 將會在指定的目錄中建立記錄檔。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ManagedHsmAccessToken
指定 Azure Key Vault 中受控 HSM 的存取令牌。 如果保護要加密、解密或重新加密之數據行的任何數據行主要密鑰儲存在 Azure Key Vault 的受控 HSM 中,請使用此參數。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-MaxDivergingIterations
指定連續追補反覆專案的最大數目,其中已處理的數據列數目會增加。 達到此限制時,Cmdlet 會假設無法趕上源數據表中所做的變更,並中止作業並重新建立資料庫的原始狀態。 只有在 設定 UseOnlineApproach 時才有效。 必須小於 MaxIterations的值。
參數屬性
| 類型: | Int32 |
| 預設值: | 5 |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-MaxDowntimeInSeconds
指定源數據表無法用於讀取和寫入的最大時間(以秒為單位)。 只有在 設定 UseOnlineApproach 時才有效。
參數屬性
| 類型: | Int32 |
| 預設值: | 300 |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-MaxIterationDurationInDays
指定植入或單一追補反覆專案的最大時間(以天為單位)。 如果植入或任何追補反覆專案需要超過指定的值,Cmdlet 會中止作業,並重新建立資料庫的原始狀態。 只有在 設定 UseOnlineApproach 時才有效。
參數屬性
| 類型: | Int32 |
| 預設值: | 3 |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-MaxIterations
指定追趕階段中的反覆項目數目上限。 達到此限制時,Cmdlet 會中止作業,並重新建立資料庫的原始狀態。 只有在 設定 UseOnlineApproach 時才有效。
參數屬性
| 類型: | Int32 |
| 預設值: | 100 |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Path
指定此 Cmdlet 執行作業的 SQL 資料庫路徑。 如果您未指定此參數的值,Cmdlet 會使用目前的工作位置。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByPath
| Position: | 1 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Script
指出此 Cmdlet 會傳回執行此 Cmdlet 所執行工作的 Transact-SQL 腳本。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-TrustServerCertificate
指出通道是否會在略過憑證鏈結以驗證信任時加密。
在模組的 v22 中,預設值為 $true (為了與 v21 相容)。 在模組的 v23+ 中,預設值會是 『$false』,這可能會為現有的腳本建立重大變更。
此參數是模組 v22 的新功能。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-UseOnlineApproach
如果設定,Cmdlet 會使用線上方法,以確保資料庫可供其他應用程式在作業的大部分期間內讀取和寫入使用。
否則,Cmdlet 會鎖定受影響的數據表,使其無法用於整個作業的更新。 數據表將可用於讀取。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。