» 网友学堂 » Oracle教程 » Oracle 10g 新特性之虚拟专用数据库 3 -> 当日更新
Oracle 10g 新特性之虚拟专用数据库 3
作者:ljjk5 发表时间:2007-3-3 08:34 阅读:220次 在百度搜索相关内容

  1 BILL CAMP  1000
  2 TOM CONNOPHY 2000
  3 ISRAEL D   1500  
  
  不允许 Michelle 查看余额超过 1600 的帐户。当她执行类似以下的查询时:

  select * from accounts;
  
  将看到:

  ACCTNO ACCT_NAME  BALANCE
  ------ ------------ -------
  1 BILL CAMP  1000
  3 ISRAEL D   1500  
  
  acctno 2 的余额超过 1600,它已禁止显示。对于 Michelle 而言,表中只有两行,而不是三行。当她执行类似以下的查询时:
  select count(*) from accounts;
  
  该查询只计算表中的记录数,输出是二,而不是三。

  但是,此时我们可以决定将安全策略稍微放松一些。在本查询中,Michelle 不能查看帐户余额等秘密数据;她只是计算表中所有记录的数目。在与安全策略一致的情况下,我们可以允许此查询计算所有记录的数目,无论是否允许她查看这些记录。如果需要这样,则在对 10g 的 dbms_rls.add_policy 的调用中的另一个参数允许实现此功能:
  
  sec_relevant_cols => 'BALANCE'
  
  现在,当用户选择列 BALANCE 时,无论是显式选择还是隐含在 select * 中,VPD 策略都会介入,对行作出限制。否则将会选择表中所有的行,因为在查询中用户只选择了总计行数,而没有选择列 BALANCE。如果将以上参数设置为所示的形式,则查询

  select count(*) from accounts;
  
  将显示三列,而不是两列。但是查询:

#Advertisement