您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

数据类型保留

SAP IQ 可确保在解密数据后保留原始数据类型的明文,前提是将该数据类型作为参数提供给 AES_DECRYPT 函数,或者此函数位于 CAST 函数内。

SAP IQ 会将 CAST 函数的目标数据类型与原始加密数据的数据类型进行比较。如果这两种数据类型不匹配,则会出现 -1001064 错误,其中包括有关原始和目标数据类型的详细信息。

例如,假定有一个经过加密的 VARCHAR(1) 值以及下面这个有效的解密语句:

SELECT AES_DECRYPT ( thecolumn, ‘theKey’,

VARCHAR(1) ) FROM thetable

如果尝试使用以下语句对数据进行解密:

SELECT AES_DECRYPT ( thecolumn, ‘theKey’,

SMALLINT ) FROM thetable

则返回的错误如下:

Decryption error: Incorrect CAST type smallint(5,0)

for decrypt data of type varchar(1,0).

只有提供 CAST 或数据类型参数时,才进行该数据类型检查。否则,查询将以二进制数据形式返回密码文本。

当对文字常量使用 AES_ENCRYPT 函数时(如以下语句中所示):

INSERT INTO t (cipherCol) VALUES (AES_ENCRYPT (1, ‘key’))

1 的数据类型不明确;它可以是 TINYINT、SMALLINTINTEGER、UNSIGNED INTBIGINT、UNSIGNED BIGINT,也可能是其它数据类型。

您应显式使用 CAST 函数来消除任何潜在的不明确性,如以下语句中所示:

INSERT INTO t (cipherCol)

VALUES ( AES_ENCRYPT (CAST (1 AS UNSIGNED INTEGER), ‘key’))

在加密数据时通过使用 CAST 函数以显式方式转换数据类型,可以防止在解密数据时出现与使用 CAST 函数有关的问题。

如果要加密的数据来自于列,或加密数据是使用 LOAD TABLE 插入的,则不存在不明确性问题。