【Oracle 审计介绍】志不强者智不达,言不信者行不果。这篇文章主要讲述Oracle 审计介绍相关的知识,希望能为你提供帮助。
查看审计是否开启
SQL>
show parameter auditNAMETYPEVALUE
------------------------------------ ----------- ------------------------------
audit_file_deststring/opt/oracle/admin/XE/adump
audit_sys_operationsbooleanTRUE
audit_syslog_levelstring
audit_trailstringDB
unified_audit_common_systemlogstring
unified_audit_systemlogstring
SQL>
审计相关的视图
SYS.AUD$是唯一保留审计结果的表。其它的都是视图。STMT_AUDIT_OPTION_MAP 包含有关审计选项类型代码的信息由SQL.BSQ 脚本在CREATEDATABASE 的时候创建
AUDIT_ACTIONS包含对审计跟踪动作类型代码的说明
ALL_DEF_AUDIT_OPTS包含默认对象审计选项。当创建对象时将应用这些选项DBA_STMT_AUDIT_OPTS描述由用户设置的跨系统的当前系统审计选项
DBA_PRIV_AUDIT_OPTS描述由用户正在审计的跨系统的当前系统权限
DBA_OBJ_AUDIT_OPTS描述在所有对象上的审计选项
USER_OBJ_AUDIT_OPTSUSER 视图描述当前用户拥有的所有对象上的审计选项以下是审计记录
DBA_AUDIT_TRAIL列出所有审计跟踪条目
USER_AUDIT_TRAILUSER视图显示与当前用户有关的审计跟踪条目DBA_AUDIT_OBJECT包含系统中所有对象的审计跟踪记录
USER_AUDIT_ OBJECTUSER 视图列出一些审计跟踪记录而这些记录涉及当前用户可以访问的对象的语句DBA_AUDIT_SESSION列出涉及CONNECT 和DISCONNECT 的所有审计跟踪记录
USER_AUDIT_ SESSIONUSER视图列出涉及当前用户的CONNECT 和DISCONNECT 的所有审计跟踪记录DBA_AUDIT_STATEMENT列出涉及数据库全部的GRANT REVOKE AUDIT NOAUDIT 和ALTER SYSTEM 语句的审计跟踪记录
USER_ AUDIT_ STATEMENT对于USER 视图来说这些语句应是用户发布的DBA_AUDIT_EXISTS列出BY AUDIT NOT EXISTS 产生的审计跟踪条目下面的视图用于细粒度审计
DBA_AUDIT_POLICIES 显示系统上的所有审计策略
DBA_FGA_AUDIT_TRAIL 列出基于值的审计的审计跟踪记录
Audit_trail
默认取值为None
none 禁用数据库审计
os 启用数据库审计,并将数据库审计记录定向到操作系统审计记录
db 启用数据库审计,并将数据库所有审计记录定向到数据库的SYS.AUD$表
db_extended 启用数据库审计,并将数据库所有审计记录定向到数据库的SYS.AUD$表。另外,填充SYS.AUD$表的SQLBIND 列和SQLTEXT CLOB 列。
xml 启用数据库审计,并将所有记录写到XML格式的操作系统文件中。
xml_extended 启用数据库审计,输出审计记录的所有列,包括SqlText和SqlBind的值。AUDIT_SYS_OPERATIONS设置为true那么sys用户的操作也会被审计,但此值默认为false alter system set audit_trail=db_extended scope=spfile ;
审计级别
(所有类型的审计都使用audit命令来打开审计,使用noaudit命令来关闭审计。)
当开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。Statement:
按语句来审计,比如audit table 会审计数据库中所有的create table,drop table,truncate table语句,alter session by cmy会审计cmy用户所有的数据库连接。Privilege:
按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户a 访问了用户b的表时(如select * from b.t)会用到select any table权限,故会被审计。注意用户是自己表的所有者,所以用户访问自己的表不会被审计。Object:
按对象审计,只审计on关键字指定对象的相关操作,如aduit alter,delete,drop,insert on cmy.t by scott;
这里会对cmy用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。注意Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access;
后, 对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,想比trigger可以对schema的DDL进行“审计”,这个功能稍显不足。
举例:
1.Schema Object Auditing(对象审计)
审计对SCOTT.EMP表的select操作
sys@TEST>
audit select on scott.emp;
2.Privilege Auditing(权限审计)
审计所有系统权限
sys@TEST>
audit all privileges;
3.Statement Auditing(语句审计)
审计由SCOTT用户发出的所有SELECT TABLE
sys@TEST>
audit select table by scott;
推荐阅读
- spring+mybatis启动NoClassDefFoundError异常分析三部曲之一(稳定重现问题)
- RedHat Yum 命令备忘单
- PassJava 开源项目(十六)(Elasticsearch 简介)
- 企业该如何构建智能化敏捷运维体系4.0呢(要点都在这了)
- Task.Factory.StartNew<TResult; 和 Task.Run<TResult; 到底有什么区别()
- JDK8中String的intern()方法详细解读内存图解+多种例子+1.1w字长文
- # yyds干货盘点 # Python网络爬虫真实的URL看来真不能光凭着XHR找
- 无需DevEco Studio就能编译OHOS应用
- Kubernetes的安全机制