DECRYPTBYCERT (Transact-SQL)

用证书的私钥解密数据。

主题链接图标Transact-SQL 语法约定

语法

DecryptByCert ( certificate_ID , { 'ciphertext' | @ciphertext } 
    [ , { 'cert_password' | @cert_password } ] )

参数

  • certificate_ID
    数据库中证书的 ID。certificate_ID 的数据类型为 int。

  • ciphertext
    已用证书的公钥加密的数据的字符串。

  • @ciphertext
    包含已使用证书进行加密的数据的 varbinary 类型变量。

  • cert_password
    用来加密证书私钥的密码。必须为 Unicode 字符。

  • @cert_password
    类型为 nchar 或 nvarchar 的变量,其中包含用来加密证书私钥的密码。必须为 Unicode 字符。

返回类型

最大大小为 8,000 个字节的 varbinary。

注释

此函数用证书的私钥解密数据。使用非对称密钥进行的加密转换会消耗大量资源。因此,EncryptByCert 和 DecryptByCert 不适合用于对用户数据的例行加密。

权限

需要对证书具有 CONTROL 权限。

示例

下面的示例从 [AdventureWorks2008R2].[ProtectedData04] 中选择标记为 data encrypted by certificate JanainaCert02 的行。此示例使用证书 JanainaCert02 的私钥对密码进行解密,首次解密时使用的是证书的密码 pGFD4bb925DGvbd2439587y。解密后的数据将从 varbinary 转换为 nvarchar。

SELECT convert(nvarchar(max), DecryptByCert(Cert_Id('JanainaCert02'),
    ProtectedData, N'pGFD4bb925DGvbd2439587y'))
FROM [AdventureWorks2008R2].[ProtectedData04] 
WHERE Description 
    = N'data encrypted by certificate '' JanainaCert02''';
GO