Oracle 数据库安全审计

1.1、传统审计 vs 统一审计

|----------|---------------------|---------------------|
| 特性 | **传统审计(AUD)** | **统一审计(12c+)** | | **接口** | AUDIT / NOAUDIT 语句 | CREATE AUDIT POLICY | | **存储** | SYS.AUD 表 | UNIFIED_AUDIT_TRAIL |
| 性能 | 每条审计一条 INSERT | 批量写入,性能更好 |
| 灵活性 | 有限 | 支持条件、列、行级审计 |
| 管理 | 直接操作 AUD 表 | DBMS_AUDIT_MGMT 包 |
| 默认启用 | 需要设置 audit_trail 参数 | 12c 默认启用(混合模式) |

1.2、统一审计策略管理

-- 审计所有 DDL 操作

CREATE AUDIT POLICY ddl_audit_policy

ACTIONS CREATE TABLE, ALTER TABLE, DROP TABLE,

CREATE INDEX, DROP INDEX,

CREATE VIEW, DROP VIEW,

CREATE USER, ALTER USER, DROP USER;

-- 审计特定表的 DML

CREATE AUDIT POLICY dml_hr_policy

ACTIONS SELECT ON hr.employees,

INSERT ON hr.employees,

UPDATE ON hr.employees,

DELETE ON hr.employees;

-- 审计登录行为

CREATE AUDIT POLICY login_policy

ACTIONS LOGON, LOGOFF;

-- 审计权限使用

CREATE AUDIT POLICY priv_policy

SYSTEM PRIVILEGES SELECT ANY TABLE, DROP ANY TABLE, ALTER SYSTEM, GRANT ANY ROLE;

-- 审计角色使用

CREATE AUDIT POLICY role_policy ROLES DBA, IMP_FULL_DATABASE;

-- 带条件的审计

CREATE AUDIT POLICY after_hours_policy

ACTIONS LOGON

WHEN 'TO_NUMBER(TO_CHAR(SYSDATE,''HH24'')) NOT BETWEEN 8 AND 18'

EVALUATE PER SESSION;

-- 审计 SYSDBA/SYSOPER 操作

CREATE AUDIT POLICY sysdba_policy PRIVILEGES SYSDBA, SYSOPER;

-- 启用审计策略

AUDIT POLICY ddl_audit_policy;

AUDIT POLICY login_policy;

AUDIT POLICY dml_hr_policy BY hr_admin;

AUDIT POLICY sysdba_policy;

-- 查看已启用的审计策略

SELECT * FROM AUDIT_UNIFIED_ENABLED_POLICIES;

-- 查看所有审计策略

SELECT POLICY_NAME, AUDIT_CONDITION, AUDIT_OPTION FROM AUDIT_UNIFIED_POLICIES;

-- 禁用审计策略

NOAUDIT POLICY ddl_audit_policy;

-- 删除审计策略

DROP AUDIT POLICY ddl_audit_policy;

1.3、细粒度审计(FGA)

-- 创建 FGA 策略:审计查询 salary 列

BEGIN

DBMS_FGA.ADD_POLICY(

object_schema => 'HR',

object_name => 'EMPLOYEES',

policy_name => 'AUDIT_SALARY',

audit_column => 'SALARY',

audit_condition => 'SALARY > 10000',

statement_types => 'SELECT,UPDATE',

audit_trail => DBMS_FGA.DB + DBMS_FGA.EXTENDED

);

END;

-- 查看 FGA 审计记录

SELECT TIMESTAMP, DB_USER, OBJECT_NAME, SQL_TEXT, SCN

FROM DBA_FGA_AUDIT_TRAIL

WHERE POLICY_NAME = 'AUDIT_SALARY'

ORDER BY TIMESTAMP DESC;

-- 禁用 FGA 策略

BEGIN

DBMS_FGA.DISABLE_POLICY('HR', 'EMPLOYEES', 'AUDIT_SALARY');

END;

-- 删除 FGA 策略

BEGIN

DBMS_FGA.DROP_POLICY('HR', 'EMPLOYEES', 'AUDIT_SALARY');

END;

1.4、SYSDBA/SYSOPER 审计

-- 确保 SYSDBA 审计已启用
**--**在 init.ora 或 spfile 中 AUDIT_SYS_OPERATIONS = TRUE

-- 查看 SYSDBA 操作的审计记录

SELECT USERNAME, TIMESTAMP, ACTION_NAME, SQL_TEXT

FROM UNIFIED_AUDIT_TRAIL

WHERE PRIVILEGED = 'YES'

ORDER BY TIMESTAMP DESC;

-- 传统方式查看 SYS 审计(OS 文件)
-- SYS 审计记录默认写入 OS 文件
-- $ADR_HOME/audit/ 目录下

1.5、审计记录管理与归档

-- 初始化审计清理

BEGIN

DBMS_AUDIT_MGMT.INIT_CLEANUP(

audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

default_cleanup_interval => 24

);

END;

-- 设置归档时间戳

BEGIN

DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(

audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

last_archive_time => SYSTIMESTAMP - 180

);

END;

-- 执行清理

BEGIN

DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(

audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

use_last_arch_time => TRUE

);

END;

-- 查看审计记录统计

SELECT COUNT(*) AS total,

MIN(EVENT_TIMESTAMP) AS earliest,

MAX(EVENT_TIMESTAMP) AS latest

FROM UNIFIED_AUDIT_TRAIL;

-- 按操作类型统计

SELECT ACTION_NAME, COUNT(*) AS cnt

FROM UNIFIED_AUDIT_TRAIL

GROUP BY ACTION_NAME ORDER BY cnt DESC;

实例:等保审计------全量 DDL/DML 审计

**S --- Situation(场景):**某军工企业要求:所有 DDL 操作必须审计、核心表 DML 审计、所有登录行为审计,审计记录保留 180 天。

**T --- Task(任务):**设计并实施完整的统一审计方案。

A --- Action(行动):

1、创建 3 个审计策略(DDL/DML/LOGIN);

2、启用策略并验证审计记录;

3、配置自动归档保留 180 天;

4、创建审计报表视图。

**R --- Result(结果):**方案上线后覆盖所有关键操作。一次安全演练中,10 分钟内还原完整操作链路,获得测评机构高度评价。

相关推荐
10岁的博客43 分钟前
DevEco Code 的 Plan+Build 模式:审方案再执行的技术深度解析
大数据·数据库·人工智能
buhuizhiyuci1 小时前
【算法篇】位运算 —— 基础篇
java·数据库·算法
youtootech1 小时前
HarmonyOS《柚兔学伴》项目实战08-关系型数据库入门——待办事项持久化
jvm·数据库·华为·harmonyos
微三云 - 廖会灵 (私域系统开发)1 小时前
电商系统国际化架构设计:多语言、多币种、多时区、多税制的全链路实现
java·前端·数据库
周杰伦的稻香2 小时前
PostgreSQL中的METHOD(认证方法)
数据库·postgresql
万岳科技系统开发2 小时前
智慧医院小程序开发满足医疗机构多场景服务需求
数据库·学习·小程序
kisbad2 小时前
Day 012|Embedding 和向量数据库:知识库检索到底在检什么
数据库·python·embedding·agent
谷禾牛博2 小时前
肠道菌群检测流程及差异和技术门槛在哪里?
数据库·经验分享·功能测试
Zhu7583 小时前
对docker环境的postgresql数据库做快速初始化
数据库·docker·postgresql
Wang's Blog3 小时前
Go-Zero项目开发5: 数据库与缓存一致性问题及 go-zero 缓存机制解析
数据库·缓存·golang