zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle 标准审计

Oracle标准 审计
2023-09-14 09:01:48 时间

Oracle 对普通用户的审计(标准审计)

对于普通用户可以启用标准审计和精细化审计

对普通用户建立标准审计

标准审计

  1. 基于语句
  2. 基于权限
  3. 基于对象

 

基于语句的审计

在普通用户基于对表的操作,比如create这种操作那么会建立审计,这个审计是除了对sys用户之外所以普通用户的审计

SQL> audit table by scott whenever successful;

Audit succeeded.

SQL> grant connect,resource to scott;

Grant succeeded.

SQL> connect scott/123456

Connected.

SQL> create table t1 (id int);

Table created.

SQL> insert into t1 values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> drop table t2;

drop table t2

 

SQL> select username,timestamp,obj_name,action_name from dba_audit_trail where username='SCOTT';

USERNAME        TIMESTAMP    OBJ_NAME    ACTION_NAME

------------------------------ ------------ ------------------------------ ----------------------------

SCOTT        12-DEC-19    T1  CREATE TABLE

SCOTT        12-DEC-19    LOGON

SCOTT        12-DEC-19    LOGON

SCOTT        12-DEC-19    LOGON

USERNAME        TIMESTAMP    OBJ_NAME    ACTION_NAME

------------------------------ ------------ ------------------------------ ----------------------------

SCOTT        12-DEC-19    LOGOFF

SCOTT        12-DEC-19    LOGOFF

SCOTT        28-DEC-18    LOGOFF

SCOTT        28-DEC-18    LOGOFF

SCOTT        12-DEC-19    T1    DROP TABLE

通过数据字典dba_audit_trail可以看到强制审计登入和退出的都有记录,同时可以看到创建表和删除表的操作也记录了下来,即用户和用户操作访问的对象已经操作的时间。

 

基于权限审计

基于权限审计:给用户授予select any table这个权限,这个权限比较大,对于这种权限的授予需要建立相关的审计,对用户的行为进行跟踪。

权限审计: 对某一个系统权限的使用状况进行审计,这里强调系统权限。

使用audit语句定义权限审计语法如下:

audit  privilege_name [by user_name]| [by session|access] [whenever [not] successful]

privilege_name: 表示系统权限名称

user_name: 表示用户名

例如:audit create table 可以表示对涉及creat table 权限的操作进行审计。

 

System-privilege auditing : 系统权限审计
SYS@orcl> audit select any table by hr;
SYS@orcl> grant select any table to hr;
SYS@orcl> audit table by hr;
SYS@orcl> select * from dba_stmt_audit_opts; --通过系统和用户描述当前系统审计选项。(权限和对象)

USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE
------------------------- ------------------------------ ------------------------------------ ----------------- -----------------
HR (null) SELECT ANY TABLE BY SESSION BY SESSION
HR (null) TABLE BY ACCESS BY ACCESS

SYS@orcl> select * from dba_priv_audit_opts; ----通过系统和用户描述当前被审计系统权限的审计选项。(权限)

USER_NAME PROXY_NAME PRIVILEGE SUCCESS FAILURE
-------------------- ------------------------------ ------------------------------------- ---------------- ----------------
HR (null) SELECT ANY TABLE BY SESSION BY SESSION

SYS@orcl> noaudit table by hr;
SYS@orcl> noaudit select any table by hr;

==============================================================================================
控制何时触发审计动作。
1)By session / By Access
by session对每个session中发生的重复操作只记录一次
by access对每个session中发生的每次操作都记录,而不管是否重复。
2)Whenever successful/ Whenever not successful
Whenever successful表示操作成功以后才记录下来。
Whenever not successful表示操作失败后才记录下来。

 

基于对象审计

基于对象的审计是当某个用户对具体的对象进行操作访问的时候所建立的审计,如select,update,delete等。

审计对各种模式对象的访问看起来类似于语句审计和权限审计:

AUDIT schema_object_clause BY {SESSION | ACCESS}

WHENEVER [NOT] SUCCESSFUL;

schema_object_clause指定对象访问的类型以及访问的对象。可以审计特定对象上14种不同的操作类型,下表中列出了这些操作。

对 象 选 项

说    明

ALTER

改变表、序列或物化视图

AUDIT

审计任何对象上的命令

COMMENT

添加注释到表、视图或物化视图

DELETE

从表、视图或物化视图中删除行

EXECUTE

执行过程、函数或程序包

FLASHBACK

执行表或视图上的闪回操作

GRANT

授予任何类型对象上的权限

INDEX

创建表或物化视图上的索引

INSERT

将行插入表、视图或物化视图中

LOCK

锁定表、视图或物化视图

READ

对DIRECTORY对象的内容执行读操作

RENAME

重命名表、视图或过程

SELECT

从表、视图、序列或物化视图中选择行

UPDATE

更新表、视图或物化视图

如果希望审计HR.JOBS表上的所有insert和update命令,而不管谁正在进行更新,则每次该动作发生时,都可以使用如下所示的audit命令:

SQL> audit insert, update on hr.jobs by access whenever successful;

Audit successful.

用户KSHELTON决定向HR.JOBS表添加两个新行:

SQL> insert into hr.jobs (job_id, job_title, min_salary, max_salary)

2  values ('IN_CFO','Internet Chief Fun Officer', 7500, 50000);

1 row created.

SQL> insert into hr.jobs (job_id, job_title, min_salary, max_salary)

2  values ('OE_VLD','Order Entry CC Validation', 5500, 20000);

1 row created.

查看DBA_AUDIT_TRAIL视图,可以看到KSHELTON会话中的两个insert命令:

USERNAME   TIMESTAMP      OWNER    OBJ_NAME   ACTION_NAME

SQL_TEXT

---------- -------------- -------- ---------- ---------------

---------------------------------------------------------------

KSHELTON   08/12/07 22:54 HR       JOBS       INSERT

insert into hr.jobs (job_id, job_title, min_salary, max_salary)

values ('IN_CFO','Internet Chief Fun Officer', 7500, 50000);

KSHELTON   08/12/07 22:53 HR       JOBS       INSERT

insert into hr.jobs (job_id, job_title, min_salary, max_salary)

values ('OE_VLD','Order Entry CC Validation', 5500, 20000);

KSHELTON   08/12/07 22:51                     LOGON

3 rows selected.