小伙伴们业务和安全运维中需要数据库审计都是由哪些模块来实现的,专门的第三方产品吗?在医疗领域防统方等业务场景和数据库的审计集合很是紧密。
在Oracle逐个版本的演进中,Oracle 23ai 的审计特性在安全领域的重大革新,延续传统审计仅支持可用,新的完全使用统一审计功能,维度更多,策略灵活。
一、Oracle审计技术架构演进
- 标准审计(9i-19c)
- 原理:基于语句、权限、对象三层监控:
- 语句审计:跟踪特定SQL类型(如AUDIT TABLE监控所有DDL)
- 权限审计:记录系统权限使用(如AUDIT DELETE ANY TABLE)
- 对象审计:针对特定对象操作(如AUDIT INSERT ON hr.employees)
- 存储:记录存于SYS.AUD$表或操作系统文件(由AUDIT_TRAIL=DB/OS控制)
-
- 审计记录可存于数据库表(如SYS.AUD$或12c+的UNIFIED_AUDIT_TRAIL)或操作系统文件(路径由AUDIT_FILE_DEST参数指定)
- 支持扩展记录(AUDIT_TRAIL=DB_EXTENDED可捕获完整的SQL文本及绑定变量)
- 细粒度审计(FGA,9i+)
- 行级监控:通过DBMS_FGA.ADD_POLICY定义基于内容的审计策略(如监控salary > 10000的查询)
- 局限:仅支持SELECT语句,DML操作无法覆盖
- 统一审计(12c+)
- 架构革新:合并标准审计与FGA,策略统一管理,通过策略化配置(如CREATE AUDIT POLICY)实现集中管理,显著提升效率:
CREATE AUDIT POLICY policy_name ACTIONS SELECT ON hr.employees;--Audit policy created.
- 性能优化:审计日志集中存储在UNIFIED_AUDIT_TRAIL视图,查询效率提升
- Oracle强烈建议:12.2及以上版本用户立即迁移至统一审计。
二、技术特点
1. 精准可控
- 可限定审计范围:按用户(BY user)、操作结果(WHENEVER SUCCESSFUL/NOT SUCCESSFUL)或频率(BY ACCESS/SESSION)精细化控制
- 特权操作强制审计:启用AUDIT_SYS_OPERATIONS=TRUE后,所有SYS及SYSDBA操作必被记录(存于OS文件,防篡改)
2. 低侵入高兼容
- 审计策略独立于应用逻辑,无论用户通过程序或工具(如SQL*Plus)访问,行为均被捕获
- 符合C2级安全标准及GDPR、PCI DSS等法规要求,直接支撑合规审计
3. 性能可调优
- 支持审计表分区、定期清理日志,避免存储膨胀
- 敏感操作聚焦(如列级或FGA策略)减少冗余日志,平衡安全与性能
三、23ai全新审计架构
1. 传统审计彻底弃用
- 删除默认传统审计配置
- 以下参数被废弃(设置时触发ORA-32004/ORA-32006警告):
- AUDIT_TRAIL, AUDIT_SYS_OPERATIONS, AUDIT_FILE_DEST, AUDIT_SYSLOG_LEVEL
2. 强制统一审计模式
- 取消uniaud_on/uniaud_off选项,统一审计始终启用
- 预定义策略默认激活:
- - ORA_SECURECONFIG(安全配置变更)
- - ORA_LOGIN_LOGOUT(登录登出)
- - ORA_DV_SCHEMA_CHANGES(字典敏感列访问)
- - ORA_DV_DEFAULT_PROTECTION(数据库保险箱变更)
- - ORA$DICTIONARY_SENS_COL_ACCESS(字典敏感列访问)
四、Oracle 23ai核心新特性
1. 列级精准审计
- 原理:仅监控指定敏感列的操作(如salary更新)
-- 创建策略审计sal、ename列的SELECT操作
CREATE AUDIT POLICY employee_pii_access ACTIONS SELECT(sal, ename) ON scott.emp;
-- 追加审计sal列的UPDATE操作
ALTER AUDIT POLICY employee_pii_access ADD ACTIONS UPDATE(sal) ON scott.emp;
-- 审计empid列的INDEX操作
CREATE AUDIT POLICY employee_pii_access1 ACTIONS INDEX(empid) ON scott.emp;
--以上为示例
CREATE AUDIT POLICY emp_salary_policyACTIONS UPDATE(salary), SELECT(salary) ON hr.employees;
--Audit policy created.-- 仅审计薪资字段
AUDIT POLICY emp_salary_policy;
--Audit succeeded.-- 1. 创建测试表(SYSDBA)
CREATE TABLE employees (id NUMBER PRIMARY KEY,name VARCHAR2(50),salary NUMBER
);
INSERT INTO employees VALUES (1, 'Alice', 10000);-- 2. 创建审计策略(SYSDBA)
CREATE AUDIT POLICY audit_salary ACTIONS SELECT(salary) ON employees; -- 仅监控 salary 查询
AUDIT POLICY audit_salary;-- 3. 模拟用户查询
SELECT salary FROM employees WHERE id=1; -- 被审计
SELECT name FROM employees WHERE id=1; -- 不被审计-- 4. 查看审计记录
SELECT event_timestamp, dbusername, sql_text
FROM unified_audit_trail
WHERE object_name='EMPLOYEES';
2. 区块链表集成
- 原理:
- 通过CREATE BLOCKCHAIN TABLE创建防篡改表,每行生成SHA-256哈希链
- 场景:金融交易日志、医疗存证等司法取证场景
CREATE BLOCKCHAIN TABLE audit_logs (log_id NUMBER GENERATED ALWAYS AS IDENTITY,action VARCHAR2(50),user_name VARCHAR2(30)
)
NO DROP UNTIL 30 DAYS IDLE
NO DELETE UNTIL 16 DAYS AFTER INSERT -- 添加此行,保留期最少16天
HASHING USING "SHA2_512" VERSION "v1"; -- 指定哈希算法可以有不同的版本(必填)
--Table created.
INSERT INTO audit_logs (action, user_name) VALUES ('SALARY_UPDATE', 'ADMIN');
COMMIT;
--
INSERT INTO audit_logs (action, user_name) VALUES ('SALARY_UPDATE', 'ADMIN');
1 row created.
SYS@FREE> COMMIT;
Commit complete.
五、统一审计策略检查
SELECT POLICY_NAME, AUDIT_CONDITION, OBJECT_NAME
FROM audit_unified_policies
WHERE OBJECT_TYPE = 'Table'; -- 检查已启用的表级策略
六、传统审计的兼容性与过渡
- 升级兼容性23ai保留现有传统审计配置,继续生成审计记录,但禁止新增或修改传统审计设置(仅允许删除)。
- 迁移强制要求
- 禁用所有传统审计设置:执行 NOAUDIT 命令
- 关闭传统审计参数:
AUDIT_TRAIL = None
AUDIT_SYS_OPERATIONS = False
FGA策略处理细粒度审计(FGA)策略自动迁移,审计记录将输出至统一审计线索。
七、迁移操作指南
- 基础场景
- 启用核心预定义策略:ORA_SECURECONFIG + ORA_LOGIN_LOGOUT
- 关闭传统审计参数
迁移价值:通过统一审计实现精细化管控(如列级操作追踪),同时降低传统审计的维护成本。预定义策略的强制启用大幅提升基础安全水位。
