Oracle 对普通用户的审计(标准审计)
对于普通用户可以启用标准审计和精细化审计
对普通用户建立标准审计
标准审计
- 基于语句
- 基于权限
- 基于对象
基于语句的审计
在普通用户基于对表的操作,比如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} |
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; |
用户KSHELTON决定向HR.JOBS表添加两个新行:
SQL> insert into hr.jobs (job_id, job_title, min_salary, max_salary) |
查看DBA_AUDIT_TRAIL视图,可以看到KSHELTON会话中的两个insert命令:
USERNAME TIMESTAMP OWNER OBJ_NAME ACTION_NAME |