更改开始

密数据密钥类型标量函数

数据密钥解密函数返回一个值,该值是使用数据加密时指定的算法对第一个参数(之前使用ENCRYPT_DATAKEY函数加密)进行解密的结果。 解密函数的名称表明了所需的结果数据类型。 调用的解密函数的名称必须与加密数据的原始数据类型一致。

FL 505

DEC RYPT_DATAKEY_type 是以下内置标量函数之一:

  • 解密数据整数
  • 解密数据大整数
  • 解密十进制数据
  • 解密_数据类型_varchar
  • 解密数据包
  • 解密_datakey_vargraphic
  • 解密_datakey_dbclob
  • 解密数据位

授权

更改开始用于调用解密功能的主授权ID必须被授权使用用于加密数据的密钥标签。 RACF 和类似的外部安全产品可以允许访问,前提是使用密钥标签的授权允许与主授权 ID 相关联的组之一使用 with.The 密钥标签保存在与加密值一起存储的元数据中,因此在解密过程中无需指定密钥标签。 当主授权ID没有ACEE时, Db2 会创建一个ACEE,以便在执行解密功能时检查所需的授权。 有关更多信息,请参阅 《当 Db2 创建ACEE时》更改结束

语法

整数:

阅读语法图跳过可视化语法图DECRYPT_DATAKEY_INTEGERDECRYPT_DATAKEY_BIGINT( 加密数据)

小数点:

阅读语法图跳过可视化语法图DECRYPT_DATAKEY_DECIMAL( 加密数据,31,精确,0 ,规模 )

字符串:

阅读语法图跳过可视化语法图DECRYPT_DATAKEY_VARCHARDECRYPT_DATAKEY_CLOBDECRYPT_DATAKEY_VARGRAPHICDECRYPT_DATAKEY_DBCLOB( 加密数据),ccsid-常量

位:

阅读语法图跳过可视化语法图DECRYPT_DATAKEY_BIT( 加密数据)

该模式是 SYSIBM。

encrypted-data
返回内置VARBINARY或BLOB值的表达式。 必须以与ENCRYPT_DATAKEY函数相同的格式返回该值。
ccsid-常量
一个整数常量,用于指定解密函数应返回数据的CCSID。 该值必须是DECP中的CCSID值之一。 如果函数的返回结果是 VARCHAR,则指定的 CCSID 必须是 SBCS 或 MIXED CCSID。 如果函数的返回结果是 CLOB,且编码方案为 Unicode,则指定的 CCSID 必须是 MIXED CCSID;否则指定的 CCSID 必须是 SBCS 或 MIXED CCSID。 如果函数VARGRAPHIC或DBCLOB的结果,指定的CCSID必须是DBCS CCSID。 有关 CCSID 367 的特殊注意事项,请参阅字符串的编码方案和 CCSID 规则
如果加密数据是字符或图形字符串,而未指定 ccsid ,则默认值由编码方案和结果的数据类型确定,如下所示:
  • 对于静态SQL语句,计划或包的ENCODING绑定选项,或编译的SQL标量函数、本机SQL过程或高级触发器的CREATE或ALTER语句的应用程序编码方案选项。
  • 对于动态 SQL 语句,应用程序编码特殊寄存器的值。
结果的默认CCSID由结果数据类型决定:
  • VARCHAR:默认结果CCSID是编码方案的混合数据CCSID。
  • CLOB:默认结果CCSID是编码方案的混合数据CCSID。
  • VARGRAPHIC或DBCLOB:默认结果CCSID是编码方案的DBCS CCSID。
精确度
一个大于或等于1且小于或等于31的整数常数。
刻度
一个大于或等于零且小于或等于精度的整数常数。 该值指定结果的量纲。
函数结果的数据类型由调用的解密函数的名称决定。 解密函数的名称必须指明由ENCRYPT_DATAKEY函数加密的原始值的数据类型。
表 1. 数据密钥解密功能和结果的数据类型
函数 第一个参数的数据类型 加密数据的原始数据类型 函数结果的数据类型
解密数据整数 VARBINARY INTEGER INTEGER
解密数据大整数 VARBINARY BIGINT BIGINT
解密十进制数据 VARBINARY DECIMAL 十进制 (精度刻度
解密数据位 VARBINARY CHAR用于位数据,VARCHAR用于位数据 VARCHAR FOR BIT DATA
解密_数据类型_varchar VARBINARY CHAR 或 VARCHAR VARCHAR

解密数据包 BLOB CLOB CLOB
解密_datakey_vargraphic VARBINARY 图形、VAR图形 VARGRAPHIC
解密_datakey_dbclob BLOB DBCLOB DBCLOB

结果的“长度”属性是加密数据的数据类型的长度属性减去8个字节。 如果函数返回字符串数据类型,则结果的长度属性为加密数据类型的长度属性减去16个字节。 结果的实际长度为加密后的原始字符串的长度。 如果加密数据中包含加密字符串之外的字节,则函数不会返回这些字节。

如果第一个参数为空,则结果可以为空;如果第一个参数为空,则结果为空值。

如果结果数据类型为字符串,则加密数据将解密为原始CCSID,然后将中间结果转换为指定的CCSID作为结果。 如果结果数据类型为VARCHAR FOR BIT DATA,则结果的CCSID为65535。 否则,如果结果数据类型为VARCHAR、CLOB、DBCLOB或VARGRAPHIC,则结果的CCSID为 ccsid。 如果使用与原始加密值不同的 CCSID 对数据进行解密,则在将解密值转换为该 CCSID 时可能会发生扩展。 在这种情况下,在执行解密之前,必须先将加密数据值转换为具有更大字节数的不等长字符串。

示例

解密PROTECTED_SSN VARBINARY列中的值。 加密数据最初是一个字符串。

SELECT DECRYPT_DATAKEY_VARCHAR(PROTECTED_SSN)
FROM CUSTOMER
WHERE CID = ?

结果CCSID未指定,因此默认为 ccsid参数的默认值。

更改结束