标准数据库审计
要使用数据库审计,必须先将静态AUDIT_TRAIL 参数设置为指向审计记录的存储位置。
这样做可启用数据库审计。启用数据库审计并指定审计选项(登录事件、行使的系统和
对象权限或使用的SQL 语句)后,数据库开始收集审计信息。
如果将AUDIT_TRAIL 设置为OS,审计记录存储在操作系统的审计系统中。在Windows
环境下,审计记录存储在事件日志中。在UNIX 或Linux 环境下,审计记录存储在使用
AUDIT_FILE_DEST 参数指定的文件中。
如果将AUDIT_TRAIL 参数设置为DB 或DB, EXTENDED,您可以在DBA_AUDIT_TRAIL
视图(SYS 方案的一部分)中查看审计记录。
如果AUDIT_TRAIL 设置为XML 或XML,EXTENDED,审计记录会写入
AUDIT_FILE_DEST 参数指向的目录中的XML 文件。使用V$XML_AUDIT_TRAIL 视图
可查看此目录中的所有XML 文件。
维护审计线索是一项重要的管理任务。审计线索可能会迅速地增长,具体取决于审计选项
的审计重点。如果维护不当,审计线索会创建过多的记录,以至影响系统的性能。审计开
销与生成的记录号直接相关。
SQL> show parameters audit
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
-
audit_file_dest string /opt/oracle/admin/orcl/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB
unified_audit_common_systemlog string
unified_audit_sga_queue_size integer 1048576
unified_audit_systemlog
修改审计存储形式
可以将审计线索设置为:
• NONE
• OS
• DB
• DB, EXTENDED
• XML
• XML, EXTENDED
在修改静态初始化参数之后重新启动数据库
ALTER SYSTEM SET AUDIT_TRAIL='XML' SCOPE=SPFILE;
如果数据库是使用Database Configuration Assistant (DBCA) 创建的,默认情况下,audit_trail 参数设置为DB。
当AUDIT_TRAIL 设置为DB 时,默认的行为是将审计线索记录到数据库的AUD$ 表中,如果数据库是手动创建的(使用CREATE DATABASE 命令),默认将AUDIT_TRAIL 设置为NONE。
通过标准审计收集的额外信息包括:
• 系统更改号(SCN),记录对系统的每一项更改。
• 用户执行的确切SQL 文本及与SQL 文本一起使用的绑定变量。只有已指定
AUDIT_TRAIL=DB, EXTENDED 的情况下,这些列才会出现。
通过细粒度审计收集的额外信息包括:
• 每个审计记录的序列号。
• 将源自一条语句的多个审计条目联系起来的语句编号。
公共属性包括:
• 用全球标准时间(UTC) 表示的全球时间戳。这个字段在监视不同地理位置和不同
时区中的数据库时特别有用。
• 每个Real Application Cluster (RAC) 实例的唯一实例编号。
• 用于将一个事务处理的审计记录组成一组的事务处理标识符。
DBA_COMMON_AUDIT_TRAIL 视图中组合了标准审计日志记录和细粒度审计日志记录。
指定审计选项
SQL 语句审计:
AUDIT table;
系统权限审计(非重点和重点):
AUDIT select any table, create any trigger;
AUDIT select any table BY hr BY SESSION;
对象权限审计(非重点和重点):
AUDIT ALL on hr.employees;
AUDIT UPDATE,DELETE on hr.employees BY ACCESS;
审计成功失败sql语句
AUDIT TABLE BY hr WHENEVER NOT SUCCESSFUL;
创建触发器审计特定值
CREATE OR REPLACE TRIGGER system.hrsalary_audit
AFTER UPDATE OF salary
ON hr.employees
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :old.salary != :new.salary THEN
INSERT INTO system.audit_employees
VALUES (sys_context('userenv','os_user'), sysdate,
sys_context('userenv','ip_address'),
:new.employee_id ||
' salary changed from '||:old.salary||
' to '||:new.salary);
END IF;
END;
/
FGA 策略
如果满足FGA 谓词并且引用了相关列,则会对记录进行审计。
• 不管指定列是什么,都会审计DELETE 语句。
• 会审计MERGE 语句以及生成的基础INSERT、UPDATE 和DELETE 语句
FGA 准则
要审计所有行,请使用null 审计条件。
• 要审计所有列,请使用null 审计列。
• 策略名必须唯一。
• 创建策略时,审计的表或视图必须已经存在。
• 如果审计条件语法无效,则访问审计的对象时会出现
ORA-28112 错误。
• 如果表中不存在审计的列,则不会审计任何行。
• 如果不存在事件处理程序,并不会返回任何错误,仍会创建审计记录。
FGA 的审计线索存储在FGA_LOG$ 表中
dbms_fga.add_policy (
object_schema => 'HR', //审计角色名
object_name => 'EMPLOYEES', //审计对象名
policy_name => 'audit_emps_salary', //审计名
audit_condition=> 'department_id=10', //审计条件
audit_column => 'SALARY,COMMISSION_PCT', //审计列
handler_schema => 'secure',
handler_module => 'log_emps_salary',
enable => TRUE, //是否启用了FGA 策略
statement_types => 'SELECT,UPDATE');
SYSDBA 审计
有SYSDBA 或SYSOPER 权限的用户可在数据库处于关闭
状态时进行连接。
• 审计线索必须存储在数据库外部。
• 始终会对以SYSDBA 或SYSOPER 身份执行的连接进行
审计。
• 可使用AUDIT_SYS_OPERATIONS 启用对SYSDBA 或
SYSOPER 操作的附加审计。
• 可使用AUDIT_FILE_DEST 控制审计线索。
启用SYSDBA 审计
AUDIT_SYS_OPERATIONS=TRUE(默认设置为FALSE。)
标准审计的审计线索存储在AUD$ 表中。FGA 的审计线索存储在FGA_LOG$ 表中。默认
情况下,这两个表都是在SYSTEM 表空间中创建的。通过使用数据泵导出和导入实用程序
可将这两个表移到另一表空间中。
注:不支持将审计表移到SYSTEM 表空间外部。
在从审计表中删除记录的过程中,可能会丢失审计记录。
最佳实践提示
请根据时间戳执行导出,然后根据同一时间戳删除审计线索中的行。
Oracle 12c 统一审计(Unified Auditing)
- 审计
审计功能(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放指定的地方
- 统一审计
Oracle Database 12c 推出一套全新的审计架构,称为统一审计功能。统一审计主要利用策略和条件在 Oracle 数据库内部有选择地执行有效的审计。新架构将现有审计跟踪统一为单一审计跟踪,从而简化了管理,提高了数据库生成的审计数据的安全性。
查看统一审计是否开启
value值true为开启
SELECT * FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
(注意:在SE的数据库12.1.0.1和12.1.0.2版本中,由于Bug 17466854的影响,即使完全的统一审计有效的情况下,V$OPTION的Unified Auditing行也表示为FALSE。Bug 17466854将在未来版本12.2中修复。)
- 开启统一审计
关闭数据库
shutdown immediate
lsnrctl stop
2.启用统一审计
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle 开起
make -f ins_rdbms.mk uniaud_off ioracle 禁用
创建审计策略
查询可供使用的actions条件
select * from auditable_system_actions;
create audit policy select_jye actions select on fixf_svr_szhjymx ;
使审计策略有效
audit policy select_jye;
查询创建的策略
select POLICY_NAME,AUDIT_OPTION_TYPE,OBJECT_NAME,COMMON from AUDIT_UNIFIED_POLICIES where POLICY_NAME = upper('select_jye');
查询现行运行的策略
select USER_NAME,POLICY_NAME,ENABLED_OPT,SUCCESS,FAILURE from AUDIT_UNIFIED_ENABLED_POLICIES;
无效掉审计策略
noaudit policy select_jye;
修改审计策略
alter audit policy select_jye add actions insert on fixf_svr_szhjymx ;
alter audit policy select_jye drop actions select on fixf_svr_szhjymx ;
删除审计策略
注意:在删除某审计策略之前,必须无效掉该审计策略,否则会报ORA-46361错误。
DROP AUDIT POLICY select_jye;
查看审计结果
以前的审计功能,不同的组件会放在不同的位置存储,例如:
SYS.AUD$会存放数据库的标准审计结果
SYS.FGA_LOG$ 会存放细粒度审计结果(fine-grained auditing)
DVSYS.AUDIT_TRAIL$会存放Oracle Database Vault和Oracle Label Security等组件的审计结果
等等。。。
在统一审计功能下,存储和查看更加简单化,所有的审计结果都存放在新追加的AUDSYS schema下,并可以通过字典表UNIFIEDAUDITTRAIL,进行确认。
select * from UNIFIED_AUDIT_TRAIL ;
补充根据审核类别创建统一审计
审核类别
类别 | 要指定的内容 |
---|---|
privileges | 一个或多个系统/对象权限 |
actions | 一个或多个SQL命令 |
roles | 一个或多个角色 |
混合 |
、