Oracle 透明数据加密 (TDE)
- 概览
- 安全信息的需要
- 敏感信息的自动加密
- 内嵌于 Oracle 数据库中
- 无需更改应用程序逻辑
- 加密数据和索引值
- 使用加密密钥
- 整个数据库的主密钥
- 存储在 Oracle Wallet 中
- 加密的原理如下:将明文数据及密码(称为密钥)传递给加密程序,加密程序使用提供的密钥加密明文数据,然后返回加密数据。
- 过程
- TDE 使用外部安全模块 (ESM) 执行以下操作:生成加密密钥、提供加密和解密函数及在数据库内外安全地存储加密密钥
- 主密钥存储在数据库外部的 Wallet 中。该 Wallet 是使用 Oracle Wallet Manager 创建的,而主密钥则是由ESM 生成的。
- 实施透明数据加密
- 创建 Wallet:自动创建或使用 Oracle Wallet Manager 创建
- sqlnet.ora 条目示例
-
ENCRYPTION_WALLET_LOCATION =
(SOURCE=(METHOD=FILE)(METHOD_DATA=
(DIRECTORY=/opt/oracle/product/10.2.0/db_1/))) - 在实例中设置主密钥
-
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY <password>;
- 在实例(将来)中打开 Wallet
-
ALTER SYSTEM SET ENCRYPTION WALLET OPEN
IDENTIFIED BY <password>; - 创建包含加密列的表
-
CREATE TABLE emp (
first_name VARCHAR2(128),
last_name VARCHAR2(128),
empID NUMBER ENCRYPT NO SALT,
salary NUMBER(6) ENCRYPT USING '3DES168',
comm NUMBER(6) ENCRYPT
); - 现有表和 TDE
-
ALTER TABLE emp ADD (ssn VARCHAR2(11) ENCRYPT);--添加加密列
ALTER TABLE emp MODIFY (first_name ENCRYPT); --加密未加密列
ALTER TABLE emp MODIFY (first_name DECRYPT); --禁用列加密
ALTER TABLE emp MODIFY (first_name ENCRYPT [NO] SALT);--添加或删除 salt
ALTER TABLE emp REKEY USING '3DES168'; --更改密钥和加密算法 - 注意事项
- 不能加密 SYS 所拥有的表。
- 不支持 LONG 和 LOB 数据类型
- 支持的加密算法
- 3DES168
- AES128
- AES192
- AES256
- 必须使用 NO SALT 加密索引列
- TDE 使用索引执行等式搜索
- 必须先解密加密数据,然后再执行表达式求值
- Wallet 对用户名和口令的支持
- Wallet 现在可以持有多个证书:
-
- 用户名和口令可以存储在 Wallet 中,而不必通过命令行提供。
- 批处理作业处理:操作系统上列出进程时防止公开用户名和口令
- 使用以下方法设置:
-
- – sqlnet.ora 中的 WALLET_LOCATION
- – mkstore 实用程序
数据泵加密(DP)
- 在导出和导入期间,使用您自己提供的列密钥
-
-
ENCRYPTION_PASSWORD = <password>
-
- 外部表
-
- CREATE TABLE emp_ext (
first_name, last_name, empID,
salary ENCRYPT IDENTIFIED BY "xIcf3T9u" )
ORGANIZATION EXTERNAL
( TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY "D_DIR"
LOCATION('emp_ext.dat') )
REJECT LIMIT UNLIMITED
as select * from employees;
RMAN 加密备份
- 概览
- 透明模式
- 需要 Oracle Wallet
- 最适合在同一位置执行的日常备份和还原操作
- 是默认加密模式
- 口令模式
- 需要提供口令
- 最适合在远程位置还原的备份
- 双重模式
- 可以使用 Oracle Wallet 或口令
- 最适合在本地和远程还原的备份
- 透明模式设置
- 创建 Wallet
- 在实例中打开 Wallet
- ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY <password>;
- 在实例中设置主密钥
- ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY <password>;
- 将 RMAN 配置为使用透明加密
- CONFIGURE ENCRYPTION FOR DATABASE ON
- 备份或恢复命令不会发生更改
- 可以暂时覆盖永久配置
- SET ENCRYPTION OFF
- 口令模式设置
- 将 RMAN 会话设置为使用口令加密
- SET ENCRYPTION ON IDENTIFIED BY password ONLY
- 备份命令不会发生更改
- 将 RMAN 会话设置为解密用口令加密的备份
- SET DECRYPTION IDENTIFIED BY password1
- {, password2,…, passwordn}
- 恢复命令不会发生更改
- 双重模式设置
- 创建 Wallet
- 在实例中打开 Wallet
- ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY <password>;
- 将 RMAN 会话设置为使用双模式加密
- SET ENCRYPTION ON IDENTIFIED BY password
- 备份命令不会发生更改
- 如果需要,请将 RMAN 会话设置为使用口令解密备份
- SET DECRYPTION IDENTIFIED BY password1 {, password2,…, passwordn}
- 恢复命令不会发生更改
- 注意事项
- 不能加密映像副本备份
- COMPATIBLE 必须至少设置为 10.2.0
- V$RMAN_ENCRYPTION_ALGORITHMS 包含可能的加密算法列表
- 备份加密只适用于 Oracle Database 企业版
- 每个新的加密备份使用一个新加密密钥
- 可以通过使用多个通道提高磁盘性能
- 可以随时更改主密钥,而不会影响以透明方式加密的备份。
虚拟专用数据库 (VPD)
- 概览
- 详细访问控制 (FGAC) +安全应用程序上下文
- VPD 使用策略向 SQL 语句添加保护敏感数据的条件
- VPD 提供行级访问控制
- 应用程序属性在应用程序上下文中定义,由详细访问策略使用。
- 功能
- 列级 VPD 根据所访问的安全列实施行级访问控制。
- 通过定制,可以定义静态和非静态策略。
- 使用共享策略,可以将一个策略与多个对象相关联。
- 策略类型可以为 INDEX。
- 策略谓词文本字符串的大小可以为 32 KB。
- 创建列级策略
- 授予权限
- GRANT EXECUTE ON dbms_rls to admin1;
- 创建函数
- 使用 DBMS_RLS 程序包将该策略应用于表、视图或同义词。