下列步骤创建一个表,知道口令的用户可从其检索包括加密的数据的一列的行。
CREATE TABLE customer (id CHAR(20), creditcard CHAR(107));
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'));
SELECT id, DECRYPT_CHAR(creditcard, 'credit card number is encrypted') FROM customer;
SELECT id FROM customer WHERE DECRYPT_CHAR(creditcard) = '2345678901234567';
列级别加密提供编码的便利,为带有加密的列的所有行传递隐式的 session password,且在同一 SQL 语句中的多个加密和解密函数调用中提供这种便利。然而,数据的机密性要求知道加密的列上的口令的用户避免违背它的秘密。例如,触发器和 UDR 应始终使用 session password,而不是显式的 password 参数,如果它们调用该加密或解密函数的话。
DBSA 可以列级别加密管理高度机密的数据。然而, GBase 8s 不阻止带有充足权限的用户将由某个其他口令加密的数据输入到表内,其其他行使用指定的列级别加密口令。