你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
oracle 基础(23)
 

然后,针对 EMPNO < 1,000 创建用于全部列的策略。

begin
   dbms_fga.add_policy (
      object_schema   => 'ACCMAN',
object_name => 'EMP',
policy_name => 'EMP_SEL_POL',
statement_types => 'SELECT');
      audit_option    => 'EMPNO < 1000',
      handler_module  => 'ENQUEUE_MESSAGE'
  );
end;

第三,给 MONICA 和 ADAM 添加特殊的策略。

begin
   dbms_fga.add_policy (
      object_schema   => 'ACCMAN',
object_name => 'EMP',
policy_name => 'EMP_SEL_POL',
      audit_column    => 'SALARY, BONUS',
statement_types => 'SELECT');
      audit_option    => 'EMPNO >= 1000 AND SAL <= 1000 and USER IN
(''MONICA'', ''ADAM'') AND USER != ''SAP_PAYROLL_APP''',
      handler_module  => 'ENQUEUE_MESSAGE'
  );
end;

正如您所看到的,audit_option 中的条件之间是相互排斥的,所以当用户尝试执行 SELECT 语句时,只有一个策略是有效的,也只有一条记录会被写入。

您可以使用该策略构建 FGA 策略集。 然后,您可以根据需要自由地启用或禁止策略,这不会影响操作。

问题
主要有以下四个问题:

  1. 当选择做出之后如果处理器模块(如果定义了)抛出错误,将会在 Oracle 不同版本中引起不同的行为:
    • 在 Oracle9i 数据库中,处理器模块 以无提示的方式 停止对该行进行检索,不会报错。 因此,如果有 100 行,其中 4 行满足了审计条件,处理器模块运行四次,每次都会失败。 该查询将仅仅返回 96 行,而不报告任何错误,您将绝不会知道事情已经发生了。 很显然,这种做法会产生不精确的结果。
    • 在 Oracle Database 10g 第 1 版中,处理器模块将忽略处理器模块中的错误,按照预期检索所有 100 行。
    • 在 Oracle Database 10g 第 2 版中,处理器模块将报告执行查询的用户会话方面的错误,而不返回任何行,甚至不返回那些不满足审计条件而没有执行处理器函数的 96 行。

    所以,在实施 FGA 处理器模块之前请先对其进行全面测试。

  2. 审计线索表——FGA_LOG$——在系统表空间中。 当更多的 FGA 条目产生时,空间表就填满了,这可能导致数据库运行中断。

  3. 审计线索被写入表中,不过是以异步方式进行的。 这会产生事务处理和 I/O,它将增加到数据库中的整体 I/O 中。 如果您的数据库是受 I/O 所限,您将看到实施 FGA 处理器模块后对整个数据库的性能影响。

  4. 您可以使用自治事务处理以异步方式编写审计线索。 所以,即使用户回滚该事物处理,也不会删除该线索条目,导致错误的正值. 如果您想将 FGA 用作一种简单的机制来识别用户,您应该注意这些错误的正值。

操作清单

  1. 识别敏感的表和列。
  2. 识别要访问的敏感度——例如,工资低于 500 的。
  3. 将所有可能的组合放在一张纸上,然后将这些组合合并成 WHERE 条件(谓词),在这种方式下,只要一个谓词就将满足任何给定的条件。
  4. 在那些谓词中构建 FGA 策略。
  5. 启动 FGA 策略。
  6. 之后,分析 FGA 审计线索文件。
  7. 制作清除计划,清除 FGA 线索表。

4.2 激活虚拟专用数据库

背景
如果您已经很熟悉应用程序环境和虚拟专用数据库(也称为行级安全性或细粒度访问控制),您可以跳过该节,直接查看策略节。

虚拟专用数据库 (VPD) 是一个很大的主题,因此我在这里只将一些基本的。 要了解背景知识,请参考我的 Oracle 杂志中有关该主题的 文章;您也可以在我的书里面找到关于 FGA 方面的更多信息。

假设您有一个称为 ACCOUNTS 的表,表中有以下数据:

SQL> select * from rates;

     ACCNO ACC_NAME                ACC_BAL
---------- -------------------- ----------
         1 John                       1000
         2 Jill                       1500
         3 Joe                        1200
         4 Jack                       1300
您想确保只有得到适当授权的人才可以查阅授权范围的帐户余额。也就是说,级别 1 看到的余额应该小于 1,000,级别 2 看到的余额应该小于 1,200,级别 3 可以看到所有的余额。 您还有另一张显示用户和级别的表。
SQL> select * from tab;

USERNAME                        USERLEVEL
------------------------------ ----------
CLERK1                                  1
CLERK2                                  2
CLERK3                                  3

要存储用户首次登录时的用户级别,因此需要创建应用程序环境:

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089