New-SqlColumnEncryptionKey
在数据库中创建列加密密钥对象。
语法
New-SqlColumnEncryptionKey
-ColumnMasterKeyName <String>
[-EncryptedValue <String>]
[-KeyVaultAccessToken <String>]
[-ManagedHsmAccessToken <String>]
[-Name] <String>
[-InputObject] <Database>
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
New-SqlColumnEncryptionKey
-ColumnMasterKeyName <String>
[-EncryptedValue <String>]
[-KeyVaultAccessToken <String>]
[-ManagedHsmAccessToken <String>]
[-Name] <String>
[[-Path] <String>]
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
说明
New-SqlColumnEncryptionKey cmdlet 在数据库中创建列加密密钥对象。 列加密密钥对象封装对称加密密钥的加密值,该加密密钥随后可用于使用 Always Encrypted 功能加密数据库列。
此 cmdlet 支持两种操作模式:
如果指定了列加密密钥的加密值,则 cmdlet 只需创建封装指定加密值的新列加密密钥对象。
如果未指定列加密密钥的加密值,则 cmdlet 首先生成纯文本密钥值,使用指定的列主密钥对其进行加密,然后创建封装生成的加密值的新列加密密钥对象。 在此模式下,cmdlet 与保存列主密钥的密钥存储进行通信。 如果密钥存储在 Azure 中,则需要为密钥保管库或保存密钥的托管 HSM 指定有效的身份验证令牌。 或者,在调用此 cmdlet 之前,可以使用 Add-SqlAzureAuthenticationContext 向 Azure 进行身份验证。
Module requirements: version 21+ on PowerShell 5.1; version 22+ on PowerShell 7.x.
示例
示例 1:生成和加密列加密密钥
New-SqlColumnEncryptionKey -Name 'CEK1' -ColumnMasterKeyName 'CMK1'
此命令生成列加密密钥的纯文本值,使用指定的主密钥加密纯文本值,然后创建列加密密钥对象,封装数据库中生成的加密值。
示例 2:使用 Azure Key Vault 中密钥保管库中存储的列主密钥生成和加密列加密密钥。
在此示例中,Azure Key Vault 中密钥保管库的令牌将传递给 cmdlet。
# Connect to Azure account.
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount
# Obtain the access token.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
# Pass the token to the cmdlet. It will use the token to communicate with the key vault containing the column master key.
New-SqlColumnEncryptionKey -Name 'CEK1' -ColumnMasterKeyName 'CMK1' -KeyVaultAccessToken $keyVaultAccessToken
示例 3:为列加密密钥的现有加密值创建列加密密钥对象。
New-SqlColumnEncryptionKey -Name 'CEK1' -ColumnMasterKeyName 'CMK1' -EncryptedValue '0x01700000016C006F00630061006C006D0061006300680069006E0065002F006D0079002F003200660061006600640038003100320031003400340034006500620031006100320065003000360039003300340038006100350064003400300032003300380065006600620063006300610031006300284FC4316518CF3328A6D9304F65DD2CE387B79D95D077B4156E9ED8683FC0E09FA848275C685373228762B02DF2522AFF6D661782607B4A2275F2F922A5324B392C9D498E4ECFC61B79F0553EE8FB2E5A8635C4DBC0224D5A7F1B136C182DCDE32A00451F1A7AC6B4492067FD0FAC7D3D6F4AB7FC0E86614455DBB2AB37013E0A5B8B5089B180CA36D8B06CDB15E95A7D06E25AACB645D42C85B0B7EA2962BD3080B9A7CDB805C6279FE7DD6941E7EA4C2139E0D4101D8D7891076E70D433A214E82D9030CF1F40C503103075DEEB3D64537D15D244F503C2750CF940B71967F51095BFA51A85D2F764C78704CAB6F015EA87753355367C5C9F66E465C0C66BADEDFDF76FB7E5C21A0D89A2FCCA8595471F8918B1387E055FA0B816E74201CD5C50129D29C015895CD073925B6EA87CAF4A4FAF018C06A3856F5DFB724F42807543F777D82B809232B465D983E6F19DFB572BEA7B61C50154605452A891190FB5A0C4E464862CF5EFAD5E7D91F7D65AA1A78F688E69A1EB098AB42E95C674E234173CD7E0925541AD5AE7CED9A3D12FDFE6EB8EA4F8AAD2629D4F5A18BA3DDCC9CF7F352A892D4BEBDC4A1303F9C683DACD51A237E34B045EBE579A381E26B40DCFBF49EFFA6F65D17F37C6DBA54AA99A65D5573D4EB5BA038E024910A4D36B79A1D4E3C70349DADFF08FD8B4DEE77FDB57F01CB276ED5E676F1EC973154F86'
参数
-AccessToken
用于向 SQL Server 进行身份验证的访问令牌,作为用户/密码或 Windows 身份验证的替代方法。
例如,这可用于使用 Service Principal
或 Managed Identity
连接到 SQL Azure DB
和 SQL Azure Managed Instance
。
要使用的参数可以是表示令牌的字符串,也可以是运行 Get-AzAccessToken -ResourceUrl https://database.windows.net
返回的 PSAccessToken
对象。
此参数是模块 v22 中的新增参数。
类型: | PSObject |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ColumnMasterKeyName
指定用于生成列加密密钥的指定加密值的列主密钥的名称,或用于生成新加密值的列主密钥的名称。
类型: | String |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | 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 |
-EncryptedValue
指定一个十六进制字符串,该字符串是加密列加密密钥值。
类型: | String |
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: | 2 |
默认值: | 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 |
-Name
指定要创建的列加密密钥对象的名称。
类型: | String |
Position: | 1 |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-Path
指定运行操作的 SQL 数据库的路径。 如果未为此参数指定值,cmdlet 将使用当前工作位置。
类型: | String |
Position: | 2 |
默认值: | 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 |
-TrustServerCertificate
指示通道是否在绕过证书链以验证信任的同时进行加密。
在模块的 v22 中,默认为 $true
(为了与 v21 兼容)。 在模块的 v23+ 中,默认值将为“$false”,这可能会为现有脚本创建中断性变更。
此参数是模块 v22 中的新增参数。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
Microsoft.SqlServer.Management.Smo.Database
输出
SqlColumnEncryptionKey