暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 11g DBMS_FGA包的使用

原创 张鹏 2021-09-15
2133

DBMS_FGA包可以用于审计在数据库中执行的DML语句和SELECT语句

需要注意的是,执行失败的SQL不会被记录到审计记录中

例如下面语句中的失败语句,重复的主键字段插入SQL不会被记录
SQL> insert into t values(3,‘Dalian’,10,100);

1 row created.

SQL> commit;

Commit complete.

SQL> alter table t add primary key(a);

Table altered.

SQL> insert into t values(3,‘Dalian’,10,100);
insert into t values(3,‘Dalian’,10,100)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C004949) violated

SQL> /
insert into t values(3,‘Dalian’,10,100)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C004949) violated

–创建审计策略
BEGIN
DBMS_FGA.ADD_POLICY (
object_schema => ‘SCOTT’,
object_name => ‘EMP’,
policy_name => ‘mypolicy1’,
enable => TRUE,
statement_types => ‘INSERT, UPDATE, DELETE, SELECT’,
audit_column_opts => DBMS_FGA.ANY_COLUMNS);
END;
/

–批量创建脚本
SELECT ‘DBMS_FGA.ADD_POLICY (object_schema => ’ || ‘’’’ || OWNER || ‘’’’ || ‘, object_name => ’ || ‘’’’ || TABLE_NAME || ‘’’’
|| ‘, policy_name => ’ || ‘’’’ ||‘POL_’ || TABLE_NAME || ‘’’’ || ‘, enable => TRUE’ || ‘, statement_types => ‘’’
|| ‘INSERT, UPDATE, DELETE, SELECT’’’ || ‘, audit_column_opts => DBMS_FGA.ANY_COLUMNS);’
FROM DBA_TABLES WHERE OWNER = ‘SCOTT’;

BEGIN
DBMS_FGA.ADD_POLICY (object_schema => ‘SCOTT’, object_name => ‘SMDP_SUBSCRIPTIONS’, policy_name => ‘POL_SMDP_SUBSCRIPTIONS’, enable => TRUE, statement_types => ‘INSERT, UPDATE, DELETE, SELECT’, audit_column_opts => DBMS_FGA.ANY_COLUMNS);
DBMS_FGA.ADD_POLICY (object_schema => ‘SCOTT’, object_name => ‘T’, policy_name => ‘POL_T’, enable => TRUE, statement_types => ‘INSERT, UPDATE, DELETE, SELECT’, audit_column_opts => DBMS_FGA.ANY_COLUMNS);
DBMS_FGA.ADD_POLICY (object_schema => ‘SCOTT’, object_name => ‘TAB_1’, policy_name => ‘POL_TAB_1’, enable => TRUE, statement_types => ‘INSERT, UPDATE, DELETE, SELECT’, audit_column_opts => DBMS_FGA.ANY_COLUMNS);
DBMS_FGA.ADD_POLICY (object_schema => ‘SCOTT’, object_name => ‘TAB_2’, policy_name => ‘POL_TAB_2’, enable => TRUE, statement_types => ‘INSERT, UPDATE, DELETE, SELECT’, audit_column_opts => DBMS_FGA.ANY_COLUMNS);
DBMS_FGA.ADD_POLICY (object_schema => ‘SCOTT’, object_name => ‘EMP’, policy_name => ‘POL_EMP’, enable => TRUE, statement_types => ‘INSERT, UPDATE, DELETE, SELECT’, audit_column_opts => DBMS_FGA.ANY_COLUMNS);
DBMS_FGA.ADD_POLICY (object_schema => ‘SCOTT’, object_name => ‘OSMSR_EUICC_HISTORIES’, policy_name => ‘POL_OSMSR_EUICC_HISTORIES’, enable => TRUE, statement_types => ‘INSERT, UPDATE, DELETE, SELECT’, audit_column_opts => DBMS_FGA.ANY_COLUMNS);
END;
/

–通过视图来查看SQL结果
select * from dba_fga_audit_trail;

–开启审计策略
BEGIN
DBMS_FGA.ENABLE_POLICY (
object_schema => ‘SCOTT’,
object_name => ‘EMP’,
policy_name => ‘mypolicy1’,
enable => TRUE);
END;
/

–关闭审计策略
BEGIN
DBMS_FGA.DISABLE_POLICY (
object_schema => ‘scott’,
object_name => ‘emp’,
policy_name => ‘mypolicy1’);
END;
/

使用后需要删除审计策略
–删除审计策略
BEGIN
DBMS_FGA.DROP_POLICY (
object_schema => ‘scott’,
object_name => ‘emp’,
policy_name => ‘mypolicy1’);
END;
/

批量删除语句
SELECT ‘DBMS_FGA.DROP_POLICY (object_schema => ’ || ‘’’’ || OWNER || ‘’’’ || ‘, object_name => ’ || ‘’’’ || TABLE_NAME || ‘’’’
|| ‘, policy_name => ’ || ‘’’’ ||‘POL_’ || TABLE_NAME || ‘’’’ || ‘);’
FROM DBA_TABLES WHERE OWNER = ‘SCOTT’;

BEGIN
DBMS_FGA.DROP_POLICY (object_schema => ‘SCOTT’, object_name => ‘SMDP_SUBSCRIPTIONS’, policy_name => ‘POL_SMDP_SUBSCRIPTIONS’);
DBMS_FGA.DROP_POLICY (object_schema => ‘SCOTT’, object_name => ‘T’, policy_name => ‘POL_T’);
DBMS_FGA.DROP_POLICY (object_schema => ‘SCOTT’, object_name => ‘TAB_1’, policy_name => ‘POL_TAB_1’);
DBMS_FGA.DROP_POLICY (object_schema => ‘SCOTT’, object_name => ‘TAB_2’, policy_name => ‘POL_TAB_2’);
DBMS_FGA.DROP_POLICY (object_schema => ‘SCOTT’, object_name => ‘EMP’, policy_name => ‘POL_EMP’);
DBMS_FGA.DROP_POLICY (object_schema => ‘SCOTT’, object_name => ‘OSMSR_EUICC_HISTORIES’, policy_name => ‘POL_OSMSR_EUICC_HISTORIES’);
END;
/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论