前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录一则FGA审计“A用户对B用户某张表的更新操作”需求

记录一则FGA审计“A用户对B用户某张表的更新操作”需求

作者头像
Alfred Zhao
发布2019-05-24 19:35:44
5990
发布2019-05-24 19:35:44
举报

环境:Oracle 11.2.0.4 我这里测试A用户为JINGYU,要审计的表为B用户SCOTT下的EMP表。通过FGA来实现。

  • 1.添加审计策略
  • 2.测试审计效果
  • 3.控制审计策略

1.添加审计策略

官方文档语法:

DBMS_FGA.ADD_POLICY( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2, audit_condition VARCHAR2, audit_column VARCHAR2, handler_schema VARCHAR2, handler_module VARCHAR2, enable BOOLEAN, statement_types VARCHAR2, audit_trail BINARY_INTEGER IN DEFAULT, audit_column_opts BINARY_INTEGER IN DEFAULT);

添加审计策略,目标是审计JINGYU用户有更新SCOTT用户下EMP表的操作。

代码语言:javascript
复制
--审计JINGYU用户有更新SCOTT用户下EMP表的操作
BEGIN
dbms_fga.add_policy(
object_schema => 'SCOTT',
object_name => 'EMP',
policy_name => 'FGA_TEST_01',
audit_condition => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''JINGYU'' ',
statement_types    =>  'UPDATE');
END;
/

这里主要是audit_condition的写法,有一个SYS_CONTEXT('USERENV','SESSION_USER')写法:

代码语言:javascript
复制
select * from dual where SYS_CONTEXT('USERENV','SESSION_USER') = 'JINGYU';

测试一下,证明这样写where条件是有效的:

代码语言:javascript
复制
SQL> show user
USER is "JINGYU"
SQL> select * from dual where SYS_CONTEXT('USERENV','SESSION_USER') = 'JINGYU';

D
-
X

SQL> conn ludan
Enter password: 
Connected.
SQL> show user
USER is "LUDAN"
SQL>  select * from dual where SYS_CONTEXT('USERENV','SESSION_USER') = 'JINGYU';

no rows selected

SQL> 

2.测试审计效果

查询FGA_LOG$,确认审计效果:

代码语言:javascript
复制
select * from FGA_LOG$ where OBJ$NAME = 'EMP';

测试审计效果:

  • 使用JINGYU用户更新SCOTT.EMP下的一条记录;预期结果是有审计信息生成。
  • 使用LUDAN用户更新SCOTT.EMP下的一条记录;预期结果是无审计信息生成。

3.控制审计策略

3.1 禁用/启用审计策略 官方文档语法:

--禁用审计策略 DBMS_FGA.DISABLE_POLICY( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 ); --启用审计策略 DBMS_FGA.ENABLE_POLICY( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2, enable BOOLEAN);

代码语言:javascript
复制
--禁用审计策略
BEGIN
DBMS_FGA.DISABLE_POLICY (
object_schema   =>  'scott',
object_name     =>  'emp',
policy_name     =>  'FGA_TEST_01');
END;
/

--启用审计策略
BEGIN
DBMS_FGA.ENABLE_POLICY (
object_schema    =>  'SCOTT',
object_name      =>  'EMP',
policy_name      =>  'FGA_TEST_01',
enable           =>   TRUE);
END;
/

3.2 删除审计策略 官方文档语法:

DBMS_FGA.DROP_POLICY( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 );

代码语言:javascript
复制
--删除policy
BEGIN
DBMS_FGA.DROP_POLICY(
   object_schema  => 'SCOTT',
   object_name => 'EMP',
   policy_name => 'FGA_TEST_01');
END;
/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.添加审计策略
  • 2.测试审计效果
  • 3.控制审计策略
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档