Oracle中虚拟专用数据掌握办法研究-开辟技术[Oracle防范]
本文“Oracle中虚拟专用数据掌握办法研究-开辟技术[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
随着数据库技术的利用越来越遍及,利用数据库的用户数目的增添以及数据内容的敏感程度的加强,数据库的安全也变得越发重要.为了保证数据库中的数据不遭到非受权的查看和改正,必须掌握用户对数据的拜候.细粒度拜候掌握也就是虚拟专用数据库,它供应强盛的行级安全功效.
细粒度拜候掌握的工作办法是,通过透明地更改对数据的恳求,基于一系列定义的尺度向用户供应表的部分视图.在运行时,全部查询都附加了谓词,以便挑选出准许用户看到的行.比方,假如只答应用户查看帐户管理员 admin 的帐户,则细粒度拜候掌握设置自动地将查询:
select * from accounts;
where am_name = 'admin'; |
DBA 在表 ACCOUNTS 上设置了一项安全战略.该战略具有一个相关函数,称为policy function,它返回一个用作谓词的字符串 where am_name = 'admin'.
生成谓词所需的反复解析是一种在某些情形下可以举行修整的开销.比方,在大部份实际情形中,谓词并不象 am_name = 'SCOTT' 那样是静态的;它基于用户的身份、用户的权限级别、用户向哪个帐户管理员举行报告等情形,大概更具有动态性.由战略函数成立并返回的字符串大概会具有很强的动态性,而为了保证后来果,Oracle 必须每次重新履行战略函数,既浪费资源又降低性能.在这种范例的战略中,谓词每次履行时大概会有很大的差别,该战略称为"动态"战略,在 Oracle9i 数据库以及从前的版本中已经供应了这种战略.
除了保存动态战略之外,Oracle 数据库 10g 还基于谓词的构造推出了几种新范例的战略,为提高性能供应了更好的掌握:context_sensitive、shared_context_sensitive、shared_static 和 static.目前,让我们来理解每种战略范例的意义以及如安在得当的场所中利用它们.
为保持向后兼容性,10g 中的默许战略范例为"dynamic" — 正如 Oracle9i 中一样.在这种情形下,关于每行以及每位用户,在每次拜候表时都对战略函数举行重新求值.让我们来具体解析战略谓词:
where am_name = 'admin' |
忽视掉 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; |
以上是“Oracle中虚拟专用数据掌握办法研究-开辟技术[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |