ENCRYPTBYASYMKEY (Transact-SQL)

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

此函数使用非对称密钥加密数据。

Transact-SQL 语法约定

语法

EncryptByAsymKey ( Asym_Key_ID , { 'plaintext' | @plaintext } )  

参数

Asym_Key_ID
数据库中非对称密钥的 ID。 Asym_Key_ID 具有 int 数据类型

cleartext
ENCRYPTBYASYMKEY 将使用非对称密钥对其加密的数据字符串。 cleartext 可以具有

  • binary
  • char
  • nchar
  • nvarchar
  • varbinary

  • varchar

数据类型。

@plaintext
ENCRYPTBYASYMKEY 将使用非对称密钥对其加密的包含值的变量。 @plaintext 可以具有

  • binary
  • char
  • nchar
  • nvarchar
  • varbinary

  • varchar

数据类型。

返回类型

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

备注

与对称密钥加密和解密相比,使用非对称密钥的加密和解密操作消耗大量资源,因此成本很高。 我们建议开发人员避免对大型数据集执行非对称密钥加密和解密操作 - 例如,存储在数据库表中的用户数据数据集。 相反,我们建议开发人员首先使用强对称密钥对数据进行加密,然后使用非对称密钥对该对称密钥进行加密。

如果输入超出一定字节数,ENCRYPTBYASYMKEY 将返回 NULL(具体取决于算法)。 具体限制:

  • 一个 512 位的 RSA 密钥最多可加密 53 个字节
  • 一个 1024 位的密钥最多可加密 117 个字节
  • 一个 2048 位的密钥最多可加密 245 个字节

在 SQL Server 中,证书和非对称密钥都用作 RSA 密钥的包装器。

示例

此示例将用非对称密钥 JanainaAsymKey02 加密 @cleartext 中存储的文本。 该语句将加密数据插入到 ProtectedData04 表中。

INSERT INTO AdventureWorks2022.Sales.ProtectedData04   
    VALUES( N'Data encrypted by asymmetric key ''JanainaAsymKey02''',  
    EncryptByAsymKey(AsymKey_ID('JanainaAsymKey02'), @cleartext) );  
GO  

另请参阅

DECRYPTBYASYMKEY (Transact-SQL)
CREATE ASYMMETRIC KEY (Transact-SQL)
加密层次结构