[Oracle]数据库安全之-审计audit
[Oracle]数据库安全之-审计audit
Oracle的审计是一个事后的工作,即数据库出现安全问题后,为了定位、发现问题的根源,可以通过审计追根溯源。Oracle审计主要包含以下3个部分:
Trigger-based Auditing(触发器)
Auditing the sys User-(SYS用户审计)
Standard Auditing (标准审计)
触发器审计
下面是一个触发器审计的例子,一旦emp表的sal字段的值增大超过1.1倍,就在审计表emp_sal_audit里记录该次操作。
[sql]
CREATE TRIGGER trg_a_idu_r_emp_sal
AFTER INSERT OR DELETE OR UPDATE OF sal ON emp
FOR EACH ROW
BEGIN
IF (:NEW.sal > :OLD.sal * 1.10)
THEN INSERT INTO emp_sal_audit VALUES (:OLD.empno
,:OLD.sal
,:NEW.sal
,user
,sysdate);
END IF;
END;
/
SYS用户的审计
对SYS用户的审计比较特殊,因为SYS用户的权限太大,它的审计信息不能存储在数据库里,否则SYS可以随意修改审计信息,因此sys用户审计日志写到操作系统日志中。
下面是一个例子:
1)首先启动对SYS用户的审计
[sql]
SQL> alter system set audit_sys_operations = true scope = spfile;
系统已更改。
2)由SYS用户向测试表插入一条数据
[sql]
SQL> show user
USER 为 "SYS"
SQL> insert into test.t (object_id) values(1);
已创建 1 行。
SQL> commit;
提交完成。
3)在操作系统日志中可以看到如下信息:
[plain]
Audit trail: LENGTH : '176' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[12] 'CORP\xianzhu' CLIENT TERMINAL:[14] 'L-SHC-00436132' STATUS:[1] '0' DBID:[10] '1327298419' .
标准审计
标准审计根据对象不同,可以分为以下4个部分:
审计会话
审计对象
审计操作
审计授权
下面以审计对象为例:
1)首先,开启标准审计
[sql]
SQL> ALTER SYSTEM SET AUDIT_TRAIL = DB,EXTENDED SCOPE = SPFILE;
系统已更改。
SQL> audit select, insert, update, delete on test.t;
审计已成功。
2)在表上做DML操作
[sql]
SQL> delete from test.t;
已删除72768行。
SQL> insert into t (object_id) values(1);
已创建 1 行。
SQL> commit;
提交完成。
3)在审计表里查看相应审计信息
[sql]
SQL> col userid for a10
SQL> col obj$name for a10
SQL> col sqltext for a40
SQL> select userid,obj$name,sqltext from sys.aud$ where userid='TEST' and obj$name='T';
USERID OBJ$NAME SQLTEXT
---------- ---------- ----------------------------------------
TEST T delete from test.t
TEST T insert into t (object_id) values(1)