记录一则FGA审计“A用户对B用户某张表的更新操作”需求
2018-06-11 21:34 AlfredZhao 阅读(739) 评论(1) 编辑 收藏 举报环境:Oracle 11.2.0.4
我这里测试A用户为JINGYU,要审计的表为B用户SCOTT下的EMP表。通过FGA来实现。
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表的操作。
--审计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')写法:
select * from dual where SYS_CONTEXT('USERENV','SESSION_USER') = 'JINGYU';
测试一下,证明这样写where条件是有效的:
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$,确认审计效果: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);
--禁用审计策略
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 );
--删除policy
BEGIN
DBMS_FGA.DROP_POLICY(
object_schema => 'SCOTT',
object_name => 'EMP',
policy_name => 'FGA_TEST_01');
END;
/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!