WEB开发网
开发学院数据库Oracle Oracle 10g 新特性之虚拟专用数据库 阅读

Oracle 10g 新特性之虚拟专用数据库

 2006-08-07 11:52:45 来源:WEB开发网   
核心提示: 10g 可以利用这种情况,在 SGA 中对谓词进行高速缓存,Oracle 10g 新特性之虚拟专用数据库(4),并在会话中重用该谓词,而不必重新执行策略函数,我们可能对于不同类型的帐户拥有不同的表 — SAVINGS 和 CHECKING — 但是规则仍然是相同的:

10g 可以利用这种情况,在 SGA 中对谓词进行高速缓存,并在会话中重用该谓词,而不必重新执行策略函数。策略函数类似于以下形式:

  create or replace vpd_pol_func
   (
   p_schema in varchar2,
   p_table in varchar2
   )
   return varchar2
   is
   begin
   return 'cust_name = sys_context(''vpdctx'', ''cust_name'')';
   end;

而策略定义为:

policy_type => dbms_rls.static

这种方法确保策略函数只执行一次。即使应用程序上下文在会话中改变,也从不重新执行该函数,使得此过程的速度非常快。

建议将静态策略用于在几个用户中托管应用程序的情况。在这种情况下,单个数据库拥有几个用户的数据。当每个用户登录时,登录后触发器可以设置用于策略函数的应用程序上下文的值,以便快速生成谓词。

但是,将策略定义为静态也是一把双刃剑。在以上的示例中,我们假设应用程序上下文属性 VPDCTX.CUST_NAME 的值在会话中不改变。如果这种假设不正确,将会怎样呢?如果该值改变,策略函数将不会执行,因此在谓词中将不会使用新值,而返回错误的结果!因此,在将策略定义为静态时要非常小心;您必须绝对确信该值不会改变。如果您不能作这种假设,则最好将策略定义为对上下文敏感。

共享策略类型。 为了重用代码并最大限度地利用已经分析过的代码,您可以决定为几个表使用通用的策略函数。例如,在上述示例中,我们可能对于不同类型的帐户拥有不同的表 — SAVINGS 和 CHECKING — 但是规则仍然是相同的:限制用户查看余额超过其授权范围的帐户。这种情况要求为 CHECKING 和 SAVINGS 表上的策略使用统一的函数。该策略创建为 context_sensitive。

上一页  1 2 3 4 5  下一页

Tags:Oracle 特性 虚拟

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接