Oracle基于系统级触发器的审计功能
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于系统级触发器的审计功能
从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括:
●数据库启动/关闭触发器
●DDL触发器
●最终用户登陆/注销触发器
●系统错误触发器
●DDL触发器
使用这些触发器,可以对数据库发生的一些重要事件进行审计。
当触发事件发生的时候,可以启动触发器。在触发器中,可以通过DML操作将审计操作记录在日志表中,或者通过抛出一个EXCEPTION来制止某种操作。在触发器中,可以通过使用系统事件函数(Event Attribute Functions)来获取一些信息。以下是系统事件函数的详细情况:
可以获得一些和用户相关的信息,比如:
SELECT sys_context('USERENV','TERMINAL') FROM DUAL;
用户环境的取值包括:
●TERMINAL:客户端操作系统终端的名称
●LANGUAGE:NLS_LANG的值
●LANG :ISO字符集的名称.
●SESSIONID:SESSION的ID
●INSTANCE:实例的ID
●ISDBA:是否具有DBA权限
●CLIENT_INFO:64字节的用户信息,可以用DBMS_APPLICATION_INFO设置的
值:
●NLS_TERRITORY :当前SESSION的 territory
●NLS_CURRENCY:当前SESSION的货币符
●NLS_CALENDAR:当前SESSION的历法
●NLS_DATE_FORMAT:当前SESSION的日期格式
●NLS_DATE_LANGUAGE :显示日期的语言
●NLS_SORT:排序方式(BINARY 或者linguistic)
●CURRENT_USER:当前SESSION拥有权限的用户的名称(比如说当前SESSION
是SYS,但是正在执行system.myproc,那么current_user就是system)
●CURRENT_USERID :当前SESSION拥有的权限的用户的ID
●SESSION_USER:session所属的用户名
●SESSION_USERID:当前SESSION所属的用户id
●CURRENT_SCHEMA:当前SESSION缺省的SCHEMA名称,可以用SESSION SET
CURRENT_SCHEMA 语句修改.
●CURRENT_SCHEMAID :当前SESSION缺省的SCHEMA的ID
●PROXY_USER:打开当前SESSION的用户的名称
●PROXY_USERID:打开当前SESSION的用户的ID
●DB_DOMAIN:当前数据库的DOMAIN
●DB_NAME:当前数据库的名称
●HOST:客户端的主机名称
●OS_USER:客户端的操作系统用户名
●EXTERNAL_NAME:用户的外部名称。对于SSL用户,使用v.503协议,返回的
值是证书中的DN
●IP_ADDRESS:客户端的IP地址
●NETWORK_PROTOCOL:连接串中的PROTOCOL=protocol指明的网络协议
●BG_JOB_ID :如果当前的SESSION是由ORACLE后台进程启动的,那么返回
JOB_ID,否则返回空值
●FG_JOB_ID:如果当前SESSION是由ORACLE客户端进程启动的一个JOB,那么
返回JOB_ID,否则返回空值
●AUTHENTICATION_TYPE:返回数据库鉴权的方法,返回值包括:
●DATABASE: 使用数据库的用户名口令
●OS:使用操作系统外部用户鉴权
●NETWORK:网络鉴权
●PROXY:OCI的代理连接鉴权
●AUTHENTICATION_DATA:使用X.503证书鉴权的时候,返回HEX2的证书
1.5.1 oracle 8i新增的数据库事件触发器
从ORALCE 8i开始,用户可以通过常见系统级触发器来追踪一些系统事件。通过这些触发器,用户可以进行一些操作,包括审计、把一些对象PIN入共享池、进行一些维护操作等。以下是一些系统级触发器的类型:
可以用来进行一些数据库启动后和关闭前的前处理和后处理。比如在数据库启动的时候把一些PL/SQL对象固定倒内存中。Servererror触发器可以用于记录某些重要的错误信息,以便于跟踪系统,发现故障。在使用系统级触发器前,首先要确认系统参数
_system_trig_enabled是否设置为TRUE。
1.5.2 DDL触发器概述
通过DDL触发器可以记录特定的DDL操作。DDL触发器是从ORACLE 8i开始具有的触发器类型。在ORACLE 9i中,DDL触发器得到了加强。DDL触发器的触发事件���括:
●BEFORE / AFTER ALTER
●BEFORE / AFTER CREATE
●BEFORE / AFTER DROP
●BEFORE / AFTER RENAME
●BEFORE / AFTER ANALYZE
●BEFORE / AFTER ASSOCIATE STATISTICS
●BEFORE / AFTER DISASSOCIATE STATISTICS
●BEFORE / AFTER AUDIT
●BEFORE / AFTER NOAUDIT
●BEFORE / AFTER COMMENT
●BEFORE / AFTER DDL
●BEFORE / AFTER GRANT
●BEFORE / AFTER REVOKE
●BEFORE / AFTER TRUNCATE
●AFTER SUSPEND
要创建DDL触发器,需要一定的系统权限,这些权限包括:
●create trigger
●create any trigger
●administer database trigger
●alter any trigger
●drop any trigger