DECRYPTBYCERT (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

此函数使用证书的私钥解密已加密数据。

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

certificate_ID
数据库中证书的 ID。 certificate_ID 具有 int 数据类型

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

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

cert_password
用于加密证书私钥的密码。 cert_password 必须具有 Unicode 数据格式。

@cert_password
类型为 nchar 或 nvarchar 的变量,其中包含用来加密证书私钥的密码。 @cert_password 必须具有 Unicode 数据格式。

返回类型

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

备注

此函数用证书的私钥解密数据。 使用非对称密钥进行的加密转换会消耗大量资源。 因此,建议开发人员避免使用 ENCRYPTBYCERT 和 DECRYPTBYCERT 进行用户数据的常规加密/解密。

权限

DECRYPTBYCERT 需要对证书具有 CONTROL 权限。

示例

此示例从 [AdventureWorks2022].[ProtectedData04] 选择行,选择范围标记为最初使用证书 JanainaCert02 加密的数据。 该示例首先使用证书 pGFD4bb925DGvbd2439587y 的密码解密证书 JanainaCert02 的私钥。 然后使用此私钥解密已加密文本。 该示例将解密后的数据从 varbinary 转换为 nvarchar

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

另请参阅

ENCRYPTBYCERT (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
加密层次结构