实施列级别加密

下列步骤创建一个表,知道口令的用户可从其检索包括加密的数据的一列的行。

  1. 创建一个包含至少一个类型 BLOB、CLOB,或长度足以存储加密的值的字符数据类型的列。例如,下列语句创建名为 customer 的表,其中列 creditcard 可存储加密的信用卡号码:
    CREATE TABLE customer (id CHAR(20), creditcard CHAR(107));
  2. 指定口令(与可选的提示)并插入加密的数据:
    SET ENCRYPTION PASSWORD 'credit card number is encrypted' 
              WITH HINT 'Why is this difficult to read?';
              INSERT INTO customer VALUES ('Alice', 
              encrypt_tdes('1234567890123456'));
              INSERT INTO customer VALUES ('Bob',
              encrypt_tdes('2345678901234567'));
  3. 使用解密功能,查询加密了的数据:
    SELECT id, DECRYPT_CHAR(creditcard, 
                'credit card number is encrypted') FROM customer;
    下列查询在 WHERE 子句中调用解密函数,使用 session password 缺省值,而不是显式的 password 参数:
    SELECT id FROM customer
                    WHERE DECRYPT_CHAR(creditcard) = '2345678901234567';

列级别加密提供编码的便利,为带有加密的列的所有行传递隐式的 session password,且在同一 SQL 语句中的多个加密和解密函数调用中提供这种便利。然而,数据的机密性要求知道加密的列上的口令的用户避免违背它的秘密。例如,触发器和 UDR 应始终使用 session password,而不是显式的 password 参数,如果它们调用该加密或解密函数的话。

DBSA 可以列级别加密管理高度机密的数据。然而, GBase 8s 不阻止带有充足权限的用户将由某个其他口令加密的数据输入到表内,其其他行使用指定的列级别加密口令。