透明数据加密(TDE)是Oracle提供的数据库层加密技术,无需修改应用程序代码即可自动加密和解密数据,适用于保护敏感列或整个表空间的数据。
CREATE TABLE sensitive_data (id NUMBER, ssn VARCHAR2(11) ENCRYPT);ALTER TABLE existing_table ADD (new_encrypted_column VARCHAR2(50) ENCRYPT);CREATE TABLESPACE encrypted_ts ENCRYPTION ENCRYPT;Oracle的DBMS_CRYPTO包提供了灵活的加密功能,支持多种算法(如AES、DES、3DES),适用于需要自定义加密逻辑的场景(如加密CLOB、BLOB等大对象数据)。
DECLARE
l_key RAW(128) := UTL_RAW.CAST_TO_RAW('my_secret_key_123'); -- 128位密钥
l_data VARCHAR2(100) := 'Sensitive data';
l_encrypted_data RAW(2000);
BEGIN
l_encrypted_data := DBMS_CRYPTO.ENCRYPT(
src => UTL_RAW.CAST_TO_RAW(l_data),
typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, -- AES-256-CBC-PKCS5
key => l_key,
iv => UTL_RAW.CAST_TO_RAW('initial_vector_123') -- 初始化向量(IV)
);
DBMS_OUTPUT.PUT_LINE('Encrypted: ' || RAWTOHEX(l_encrypted_data));
END;
DECLARE
l_key RAW(128) := UTL_RAW.CAST_TO_RAW('my_secret_key_123');
l_encrypted_data RAW(2000) := HEXTORAW('...'); -- 替换为加密后的十六进制值
l_decrypted_data RAW(2000);
BEGIN
l_decrypted_data := DBMS_CRYPTO.DECRYPT(
src => l_encrypted_data,
typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
key => l_key,
iv => UTL_RAW.CAST_TO_RAW('initial_vector_123')
);
DBMS_OUTPUT.PUT_LINE('Decrypted: ' || UTL_I18N.RAW_TO_CHAR(l_decrypted_data, 'AL32UTF8'));
END;
需手动管理密钥和IV(初始化向量),建议将密钥存储在Oracle Wallet或**硬件安全模块(HSM)**中,避免硬编码。
通过Linux文件系统加密保护Oracle数据文件、日志文件等底层存储,即使物理设备丢失,数据也无法被非法访问。常见工具包括:
sudo yum install cryptsetup(Oracle Linux)sudo cryptsetup luksFormat /dev/sdb1 # 加密/dev/sdb1分区
sudo cryptsetup open /dev/sdb1 encrypted_data # 打开加密分区
sudo mkfs.ext4 /dev/mapper/encrypted_data # 格式化为ext4文件系统
sudo mount /dev/mapper/encrypted_data /oracle/data # 挂载到Oracle数据目录
sudo umount /oracle/data && sudo cryptsetup close encrypted_datasudo yum install ecryptfs-utilssudo mount -t ecryptfs /oracle/secure /oracle/secure # 挂载加密目录
sudo ecryptfs-add-passphrase # 添加加密密码
文件系统加密的优点是保护范围广(覆盖所有存储在加密分区/目录中的数据),但可能影响系统性能(加密/解密操作由内核处理)。
无论采用哪种加密方法,密钥管理都是关键环节。Oracle推荐的做法:
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "wallet_password";
ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "key_password" WITH BACKUP;
以上方法可根据业务需求组合使用(如TDE保护表空间+文件系统加密保护数据文件),以实现多层安全防护。