Oracle审计篇——标准审计

9 篇文章 1 订阅

一、 简介

1. 什么是标准审计

标准审计审计SQL语句、权限、对象和网络活动。 可以使用AUDIT语句配置标准审计,使用NOAUDIT语句删除此配置。可以将审计记录写入数据库审计跟踪或操作系统审计文件。

11g默认审计选项

-- 以下权限将对所有用户审计
select privilege,success,failure from dba_priv_audit_opts;

PRIVILEGE                                SUCCESS    FAILURE
---------------------------------------- ---------- ----------
CREATE EXTERNAL JOB                      BY ACCESS  BY ACCESS
CREATE ANY JOB                           BY ACCESS  BY ACCESS
GRANT ANY OBJECT PRIVILEGE               BY ACCESS  BY ACCESS
EXEMPT ACCESS POLICY                     BY ACCESS  BY ACCESS
CREATE ANY LIBRARY                       BY ACCESS  BY ACCESS
GRANT ANY PRIVILEGE                      BY ACCESS  BY ACCESS
DROP PROFILE                             BY ACCESS  BY ACCESS
ALTER PROFILE                            BY ACCESS  BY ACCESS
DROP ANY PROCEDURE                       BY ACCESS  BY ACCESS
ALTER ANY PROCEDURE                      BY ACCESS  BY ACCESS
CREATE ANY PROCEDURE                     BY ACCESS  BY ACCESS
ALTER DATABASE                           BY ACCESS  BY ACCESS
GRANT ANY ROLE                           BY ACCESS  BY ACCESS
CREATE PUBLIC DATABASE LINK              BY ACCESS  BY ACCESS
DROP ANY TABLE                           BY ACCESS  BY ACCESS
ALTER ANY TABLE                          BY ACCESS  BY ACCESS
CREATE ANY TABLE                         BY ACCESS  BY ACCESS
DROP USER                                BY ACCESS  BY ACCESS
ALTER USER                               BY ACCESS  BY ACCESS
CREATE USER                              BY ACCESS  BY ACCESS
CREATE SESSION                           BY ACCESS  BY ACCESS
AUDIT SYSTEM                             BY ACCESS  BY ACCESS
ALTER SYSTEM                             BY ACCESS  BY ACCESS

23 rows selected.
-- 以下语句也将对所有用户审计:
select audit_option,success,failure from dba_stmt_audit_opts;

AUDIT_OPTION                             SUCCESS    FAILURE
---------------------------------------- ---------- ----------
ALTER SYSTEM                             BY ACCESS  BY ACCESS
SYSTEM AUDIT                             BY ACCESS  BY ACCESS
CREATE SESSION                           BY ACCESS  BY ACCESS
CREATE USER                              BY ACCESS  BY ACCESS
ALTER USER                               BY ACCESS  BY ACCESS
DROP USER                                BY ACCESS  BY ACCESS
PUBLIC SYNONYM                           BY ACCESS  BY ACCESS
DATABASE LINK                            BY ACCESS  BY ACCESS
ROLE                                     BY ACCESS  BY ACCESS
PROFILE                                  BY ACCESS  BY ACCESS
CREATE ANY TABLE                         BY ACCESS  BY ACCESS
ALTER ANY TABLE                          BY ACCESS  BY ACCESS
DROP ANY TABLE                           BY ACCESS  BY ACCESS
CREATE PUBLIC DATABASE LINK              BY ACCESS  BY ACCESS
GRANT ANY ROLE                           BY ACCESS  BY ACCESS
SYSTEM GRANT                             BY ACCESS  BY ACCESS
ALTER DATABASE                           BY ACCESS  BY ACCESS
CREATE ANY PROCEDURE                     BY ACCESS  BY ACCESS
ALTER ANY PROCEDURE                      BY ACCESS  BY ACCESS
DROP ANY PROCEDURE                       BY ACCESS  BY ACCESS
ALTER PROFILE                            BY ACCESS  BY ACCESS
DROP PROFILE                             BY ACCESS  BY ACCESS
GRANT ANY PRIVILEGE                      BY ACCESS  BY ACCESS
CREATE ANY LIBRARY                       BY ACCESS  BY ACCESS
EXEMPT ACCESS POLICY                     BY ACCESS  BY ACCESS
GRANT ANY OBJECT PRIVILEGE               BY ACCESS  BY ACCESS
CREATE ANY JOB                           BY ACCESS  BY ACCESS
CREATE EXTERNAL JOB                      BY ACCESS  BY ACCESS

28 rows selected.

2. 谁可以执行标准审计

任何用户都可以使用AUDIT语句为其自己拥有的对象配置审计,使用NOAUDIT语句删除此配置,执行此任务不需要其他权限。无论AUDIT_TRAIL参数设置如何,用户都可以运行语句来设置审计选项。如果已禁用审计,则下次启用时,Oracle数据库将记录由AUDIT语句设置的审计活动。

  • 要审计另一个schema中的对象,用户必须具有AUDIT ANY系统特权。
  • 要审计系统权限,用户必须具有该AUDIT SYSTEM权限。
  • 如果O7_DICTIONARY_ACCESSIBILITY初始化参数已设置为FALSE(缺省值),则只有拥有该SYSDBA特权的用户才能对SYS.AUD$和SYS.FGA_LOG$表中的数据执行DML操作。
  • 无需设置AUDIT_TRAIL即可启用细粒度审计或SYS审计。对于细粒度审计,可以根据需要添加和删除细粒度审计策略,将它们应用于要监视的特定操作或对象。要启用SYS审计,将AUDIT_SYS_OPERATIONS参数设置为TRUE。

二、 审计参数设置

AUDIT_TRAIL参数值(重启生效):

  • none:不启用审计功能;
  • db:启用审计功能,审计信息写入sys.aud$数据字典中,审计结果只有连接信息,没有sql语句(sys用户的记录以及强制性要求的记录都写入os文件);
  • db, extended:与db相比,审计结果增加了执行的sql和绑定变量
  • os:启用审计功能,审计信息以文本格式写入os文件;
  • xml:启用审计功能,审计信息以xml格式写入os文件,没有sql语句;
  • xml, extended:与xml相比,审计结果增加了执行的sql和绑定变量

AUDIT_TRAIL

三、 标准审计类型

1. 根据审计内容分类

  • 语句审计(Statement Auditing):对特定的SQL语句进行审计,不指定具体对象;
  • 权限审计(Privilege Auditing):对特定的系统权限使用情况进行审计;
  • 对象审计(Object Auditing):对特定的对象上执行的特定语句进行审计;
  • 网络审计(Network Auditing):对网络协议错误与网络层内部错误进行审计。

2. 根据用户是否执行成功分类

  • 对执行成功的语句进行审计
  • 对失败的语句进行审计
  • 无论成功与否都进行审计

3. 根据对同一语句审计次数分类

  • 会话审计(by session,默认):用户在同一会话执行的相同语句只审计一次,记一条审计记录
  • 访问审计(by access):用户执行多少次语句就审计多少次,形成多少条审计记录

四、 审计配置

1.  语句审计

  • 语句审计是对特定的SQL语句进行审计,与具体的对象没有关系。
AUDIT sql_statement_shortcut | ALL | ALL STATEMENTS
[BY user_lists] | [IN SESSION CURRENT] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]

解释:

- sql_statement_shortcut:被审计的SQL语句shortcut;

- ALL:审计大部分SQL语句,这里不在列出;

- ALL STATEMENT:对最高级别的SQL语句进行审计,即对直接执行的SQL语句进行审计,而不对包含在PL/SQL程序中的SQL语句进行审计(ALL STATEMENT级别才能审计commit和rollback操作);

- BY user_lists:指定审计的用户,如果不指定,则审计全部用户;

- IN SESSION CURRENT:只对当前会话进行审计;

- BY SESSION:会话审计,同一个SQL语句只审计一次;

- BY ACCESS:存取审计,同一个SQL语句执行几次就审计几次;

- WHENEVER SUCCESSFUL:只审计执行成功的SQL语句;

- WHENEVER NOT SUCCESS:只审计执行不成功的SQL语句;

AUDIT

例如

-- all statement 级别
audit all statements by aud_user by access; 

-- DML
audit update table, insert table, delete table by aud_user by access; 

-- Select
audit Select table by aud_user by access; 

-- 执行权限
AUDIT EXECUTE PROCEDURE by aud_user BY ACCESS WHENEVER NOT SUCCESSFUL;

-- 审计对表所有操作
audit table by aud_user by access;

-- 审计指定用户连接/断开操作
audit connect by aud_user;
-- 审计所有用户连接/断开操作
audit connect;

-- 审计用户授权操作
audit grant any role by access;
audit grant any object privilege by access;
audit grant any privilege by access;
  • 要取消对某个语句的审计,只需将AUDIT命令改为NOAUDIT命令即可,其语法与AUDIT相同。NOAUDIT 取消审计的操作对已经连接的session无用,但新开的session将不再审计。
  • 通过数据字典DBA_STMT_AUDIT_OPTS可以了解当前数据库哪些用户进行了语句审计及审计设置信息。例如,查看与scott用户相关的语句审计:
SQL> select * from dba_stmt_audit_opts where user_name='SCOTT';
 
USER_NAME PROXY_NAME  AUDIT_OPTION    SUCCESS    FAILURE
--------- ----------- --------------- ---------- ----------
SCOTT                 TABLE           BY ACCESS  BY ACCESS
SCOTT                 INSERT TABLE    BY ACCESS  BY ACCESS

2.  权限审计

  • 权限审计是对特定的系统权限进行审计
AUDIT system_privilege | [ALL PRIVILEGES] [BY user_lists] | [IN SESSION CURRENT] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]

例子

-- 每次成功使用ALTER TABLESPACE权限时,都会将一行内容添加到SYS.AUD$
audit alter tablespace by access whenever successful;

-- 审计 select any table权限
audit select any table by aud_user by access; 
  • 通过数据字典DBA_PRIV_AUDIT_OPTS查看当前数据库中对哪些用户使用了什么权限审计。

3. 对象审计

  • 对象审计是指对特定模式对象的操作进行审计,与用户无关
-- sql_operation指定特定对象上要审计的SQL语句
AUDIT sql_operation | ALL ON [schema.]object] [BY user_lists] | [IN SESSION CURRENT][BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]

例子

-- 审计对scott.dept表所有操作
audit all on scott.dept by access;

-- 审计对hr.employees表DML操作
audit update,insert,delete on hr.employees by access;
  • 查询DBA_OBJ_AUDIT_OPTS查看当前数据库对哪些对象进行了对象审计

4. 网络审计

对协议错误与网络层内部错误进行审计,捕获客户端与服务器通信过程中发生的错误,这些错误由SQL*NET网络服务抛出。

AUDIT NETWORK [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]

例子

-- Configuring Network Auditing
AUDIT NETWORK BY ACCESS;

--Removing Network Auditing
NOAUDIT NETWORK;

五、 DDL操作审计

生产环境经常遇到DROP、TRUNCATE、DELETE等误操作,其中大部分影响较大的是DDL

1. 启|禁用

alter system set enable_ddl_logging = TRUE|FALSE; -- 不需重启

2. 审计记录位置

审计内容只有时间、语句,不记录执行者

  • 12c之前版本

alert日志

  • 12c开始

$ORACLE_BASE/diag/rdbms/dbname/dbname/log ddl 

http://www.orasql.com/blog/archives/2014/09/05/tracking_drop_op.htm

六、 强制审计

Oracle始终进行审计某些与数据库相关的操作,并将它们写入操作系统审计文件。即使已启用数据库审计(AUDIT_TRAIL参数设置为DB),Oracle仍会将强制审计内容写入操作系统文件。

默认情况下,操作系统文件位于$ORACLE_BASE/admin/$ORACLE_SID/adump目录中。在Windows系统上,Oracle数据库还会将此信息写入Windows事件查看器。可以通过设置AUDIT_FILE_DEST初始化参数来更改此目录的位置(重启生效)

强制审计包括以下操作:

  • 数据库启动:审计记录内容包括启动实例的操作系统用户,用户终端标识符以及日期和时间戳。此数据存储在操作系统审计跟踪中,因为数据库审计跟踪在成功完成启动之后才可用。
  • SYSDBA和SYSOPER登录:Oracle数据库记录所有SYSDBA和SYSOPER连接。
  • 数据库关闭:审计记录内容包括关闭实例的操作系统用户,用户终端标识符以及日期和时间戳。

七、 审计相关视图

视图名含义
SYS.AUD$审计功能基表,其他视图里的数据都是由aud$所得。如果需要删除审计数据,只需要删除aud$中数据既可。
DBA_AUDIT_TRAIL查询所有审计记录的信息
DBA_AUDIT_STATEMENTDB配置了哪些语句级审计
DBA_PRIV_AUDIT_OPTSDB配置了哪些权限级审计
DBA_OBJ_AUDIT_OPTSDB配置了哪些对象级审计
DBA_AUDIT_OBJECT查询所有对象跟踪信息,信息完全包含在dba_audit_trail中
DBA_AUDIT_SESSION查询logon或logoff的信息
DBA_AUDIT_EXISTS列出audit not exists和audit exists(默认)产生的审计跟踪
AUDIT_ACTIONS可以查询出aud$等视图中actions列的含义
SYSTEM_PRIVILEGE_MAP可以查询出aud$等视图中priv$used列的含义(注意前面加'-')

参考

Oracle中如何记录和查看用户的登录记录 - 墨天轮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值