Invoke-SqlColumnMasterKeyRotation

启动列主密钥的轮换。

语法

Invoke-SqlColumnMasterKeyRotation
      -SourceColumnMasterKeyName <String>
      -TargetColumnMasterKeyName <String>
      [-KeyVaultAccessToken <String>]
      [-ManagedHsmAccessToken <String>]
      [-InputObject] <Database>
      [-Script]
      [-AccessToken <PSObject>]
      [-TrustServerCertificate]
      [-HostNameInCertificate <String>]
      [-Encrypt <String>]
      [-ProgressAction <ActionPreference>]
      [<CommonParameters>]
Invoke-SqlColumnMasterKeyRotation
      -SourceColumnMasterKeyName <String>
      -TargetColumnMasterKeyName <String>
      [-KeyVaultAccessToken <String>]
      [-ManagedHsmAccessToken <String>]
      [[-Path] <String>]
      [-Script]
      [-AccessToken <PSObject>]
      [-TrustServerCertificate]
      [-HostNameInCertificate <String>]
      [-Encrypt <String>]
      [-ProgressAction <ActionPreference>]
      [<CommonParameters>]

说明

Invoke-SqlColumnMasterKeyRotation cmdlet 启动将现有源列主密钥替换为 Always Encrypted 功能的新目标列主密钥。

该 cmdlet 检索包含使用指定源列主密钥加密的加密密钥值的所有列加密密钥对象。

然后,该 cmdlet 解密当前的加密值,使用目标列主密钥重新加密生成的纯文本值,然后更新受影响的列加密密钥对象以添加新的加密值。

因此,每个受影响的列加密密钥都包含两个加密值:一个使用当前源列主密钥生成,另一个使用目标列主密钥生成。

如果源或目标列主密钥存储在 Azure 中,则需要为密钥保管库或托管 HSM 指定有效的身份验证令牌(或令牌)。 或者,在调用此 cmdlet 之前,可以使用 Add-SqlAzureAuthenticationContext 向 Azure 进行身份验证。

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

示例

示例 1:启动轮换列主密钥的过程。

Invoke-SqlColumnMasterKeyRotation -SourceColumnMasterKeyName "CMK1" -TargetColumnMasterKeyName "CMK2"

此命令启动轮换名为 CMK1 的列主密钥的过程,并将其替换为名为 CMK2 的列主密钥。

示例 2:启动使用指定的身份验证令牌轮换列主密钥的过程

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

# Obtain access tokens. 
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token  
$managedHSMAccessToken = (Get-AzAccessToken -ResourceUrl https://managedhsm.azure.net).Token  

# Pass the tokens to the cmdlet.  
Invoke-SqlColumnMasterKey -SourceColumnMasterKeyName CMK1 -TargetColumnMasterKeyName CMK2 -KeyVaultAccessToken $keyVaultAccessToken -ManagedHSMAccessToken $managedHSMAccessToken

该示例启动轮换名为 CMK1 的列主密钥并将其替换为名为 CMK2 的列主密钥的过程。 假设其中一个密钥存储在密钥保管库中,另一个密钥存储在 Azure Key Vault 中的托管 HSM 中。 Invoke-SqlColumnMasterKey 将使用获取的身份验证令牌与密钥保管库和托管 HSM 终结点通信。

参数

-AccessToken

用于向 SQL Server 进行身份验证的访问令牌,作为用户/密码或 Windows 身份验证的替代方法。

例如,这可用于使用 Service PrincipalManaged Identity连接到 SQL Azure DBSQL Azure Managed Instance

要使用的参数可以是表示令牌的字符串,也可以是运行 Get-AzAccessToken -ResourceUrl https://database.windows.net返回的 PSAccessToken 对象。

此参数是模块 v22 中的新增参数。

类型:PSObject
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Encrypt

连接到 SQL Server 时要使用的加密类型。

此值映射到 Microsoft.Data.SqlClient 驱动程序的 SqlConnection 对象的 Encrypt 属性 SqlConnectionEncryptOption

在模块的 v22 中,默认为 Optional(为了与 v21 兼容)。 在模块的 v23+ 中,默认值为“必需”,这可能会为现有脚本创建中断性变更。

此参数是模块 v22 中的新增参数。

类型:String
接受的值:Mandatory, Optional, Strict
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-HostNameInCertificate

用于验证 SQL Server TLS/SSL 证书的主机名。 如果为强制加密启用了 SQL Server 实例,并且想要使用主机名/shortname 连接到实例,则必须传递此参数。 如果省略此参数,则必须将完全限定域名(FQDN)传递给 -ServerInstance 才能连接到为强制加密启用的 SQL Server 实例。

此参数是模块 v22 中的新增参数。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputObject

指定此 cmdlet 为其运行操作的 SQL 数据库对象。

类型:Database
Position:1
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-KeyVaultAccessToken

指定 Azure Key Vault 中密钥保管库的访问令牌。 如果当前和/或目标列主密钥存储在 Azure Key Vault 中的密钥保管库中,请使用此参数。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-ManagedHsmAccessToken

指定 Azure Key Vault 中托管 HSM 的访问令牌。 如果当前和/或目标列主密钥存储在 Azure Key Vault 中的托管 HSM 中,请使用此参数。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Path

指定运行操作的 SQL 数据库的路径。

如果未为此参数指定值,cmdlet 将使用当前工作位置。

类型:String
Position:1
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-ProgressAction

确定 PowerShell 如何响应脚本、cmdlet 或提供程序生成的进度更新,例如由 Write-Progress cmdlet 生成的进度栏。 Write-Progress cmdlet 创建显示命令状态的进度栏。

类型:ActionPreference
别名:proga
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Script

指示此 cmdlet 运行执行任务的 Transact-SQL 脚本。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-SourceColumnMasterKeyName

指定源列主密钥的名称。

类型:String
Position:Named
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-TargetColumnMasterKeyName

指定目标列主密钥的名称。

类型:String
Position:Named
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-TrustServerCertificate

指示通道是否在绕过证书链以验证信任的同时进行加密。

在模块的 v22 中,默认为 $true(为了与 v21 兼容)。 在模块的 v23+ 中,默认值将为“$false”,这可能会为现有脚本创建中断性变更。

此参数是模块 v22 中的新增参数。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

输入

Microsoft.SqlServer.Management.Smo.Database