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

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

 2006-08-07 11:52:45 来源:WEB开发网   
核心提示: 动态策略, 为保持向后兼容性,Oracle 10g 新特性之虚拟专用数据库(2),10g 中的默认策略类型为“dynamic” — 正如 Oracle9i 中一样,在这种情况下,而该余额由应用程序上下文所决定,我们并不在策略函数中将此余额值固定,对于每行

动态策略。 为保持向后兼容性,10g 中的默认策略类型为“dynamic” — 正如 Oracle9i 中一样。在这种情况下,对于每行以及每位用户,在每次访问表时都对策略函数进行重新求值。让我们来详细分析策略谓词:

where am_name = 'SCOTT'

忽略掉 where 子句,谓词就具有两个不同的部分:在等式操作符之前的部分 (am_name) 和等式操作符之后的部分 ('SCOTT')。在大多数情况下,后面的部分更象是变量,因为它是由用户的数据提供的(如果用户是 SCOTT,则其值为 'SCOTT')。在等号前面的部分是静态的。因此,即使函数不必为生成适当的谓词而对每行求出策略函数的值,由于了解前面部分的静态性以及后面部分的动态性,也可以提高性能。在 10g 中,可以在 dbms_rls.add_policy 调用中使用 "context_sensitive" 类型的策略作为参数来实现这种方法:

policy_type => dbms_rls.context_sensitive

在另一个示例中,我们有一个称为 ACCOUNTS 的表,它拥有几列,其中一列是 BALANCE,表示帐户余额。假设允许某个用户查看低于某特定余额的帐户,而该余额由应用程序上下文所决定。我们并不在策略函数中将此余额值固定,而是3是根据应用程序上下文确定,如:

  create or replace vpd_pol_func
   (
   p_schema in varchar2,
   p_table in varchar2
   )
   return varchar2
   is
   begin
   return 'balance < sys_context(''vpdctx'', ''maxbal'')';
   end;

上一页  1 2 3 4 5  下一页

Tags:Oracle 特性 虚拟

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