最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

DBMS_RLS包实现数据库表行级安全控制

来源:懂视网 责编:小采 时间:2020-11-09 15:04:24
文档

DBMS_RLS包实现数据库表行级安全控制

DBMS_RLS包实现数据库表行级安全控制:DBMS_RLS 是实现数据库表行级别安全控制的,这个包包含精细访问控制管理接口,这个接口是用来实现VPD(Virtual Private Database),虚拟私有数据库。DBMS_RLS只能在ORACLE的企业版(Enterpris Edition Only)本才可以用。oracle ebs 的权
推荐度:
导读DBMS_RLS包实现数据库表行级安全控制:DBMS_RLS 是实现数据库表行级别安全控制的,这个包包含精细访问控制管理接口,这个接口是用来实现VPD(Virtual Private Database),虚拟私有数据库。DBMS_RLS只能在ORACLE的企业版(Enterpris Edition Only)本才可以用。oracle ebs 的权

DBMS_RLS 是实现数据库表行级别安全控制的,这个包包含精细访问控制管理接口,这个接口是用来实现VPD(Virtual Private Database),虚拟私有数据库。DBMS_RLS只能在ORACLE的企业版(Enterpris Edition Only)本才可以用。oracle ebs 的权限是用这个来管理的。在

DBMS_RLS 是实现数据库表行级别安全控制的,这个包包含精细访问控制管理接口,这个接口是用来实现VPD(Virtual Private Database),虚拟私有数据库。DBMS_RLS只能在ORACLE的企业版(Enterpris Edition Only)本才可以用。oracle ebs 的权限是用这个来管理的。在数据库的数据安全访问的解决上,有很多的方法来解决权限的问题,有的是通过功能模块来控制访问权限的,有的是用建立视图的方法控制,例如查询语句中加where语句来控制。但是用view的方法时,当表结构或者权限变更的时候就很不容易操作,编码工作量大、系统适应用户管理体系的弹性空间较小,一旦权限逻辑发生变动,就可能需要修改权限体系,导致所有的View都必须修改;用where语句可以解决问题但是安全性不好,只能在应用程序级别才能控制,绕开应用程序就无法控制。

Oracle VPD 技术在数据库级别的安全控制有效的解决了数据访问操作的权限问题,可以对数据库对象进行访问控制,可以灵活的隔离数据,oracle已经实现了VPD,可以直接使用,比在应用层权限控制实现起来较方便,权限维护也比容易。VPD访问控制原理也是使用where语句来控制,只是这个where语句是数据库在操作数据时自动拼接,不是在应用层拼接,而且由事先定义的策略来决定是否拼接条件语句。

下面我来用DBMS_RLS的包来实现如下条件的访问控制功能:
有如下4个用户AM145,AM147,AM148,AM149
1,只能查询OE.CUSTS表,
2,其过滤条件是OE.CUSTS.account_mgr_id=substr(user,3,3)

第一步:创建用户及访问授权
$>sqlplus / as sysdba
create user AM145 identified by AM145;
grant create session to AM145;
grant select on oe.custs to AM145;
create user AM147 identified by AM147;
grant create session to AM147;
grant select on oe.custs to AM147;
create user AM148 identified by AM148;
grant create session to AM148;
grant select on oe.custs to AM148;
create user AM149 identified by AM149;
grant create session to AM149;
grant select on oe.custs to AM149;

第二步:创建function获得where 过滤条件的predicate.函数返回拼接在DML语句的where条件之后的语句,但是where语句并不是执行DML时可见的,系统根绝策略自动添加的,条件来自策略函数的返回值。
vi fun1.sql
create or replace FUNCTION oe.policy_function (object_schema IN VARCHAR2, object_name VARCHAR2)
RETURN VARCHAR2 IS
ls_return varchar2(100);
ls_username varchar2(100);
begin
ls_username := user;
if ls_username like 'AM%' then
ls_return := 'oe.custs.account_mgr_id=substr('||''''||ls_username||''''||',3,3)';
end if;
return ls_return;
end;
/

SQL> @fun1.sql

Function created.

第三步:添加策略
vi myPolicy1.sql
BEGIN
dbms_rls.add_policy(object_schema => 'oe',
object_name => 'custs',
policy_name => 'my_policy1',
function_schema =>'oe',
policy_function => 'policy_function',
statement_types =>'select',
enable=>true);
END;
/

SQL> @myPolicy1.sql

PL/SQL procedure successfully completed.

第四步:验证是否成功
SQL> select account_mgr_id,count(*) from oe.custs group by account_mgr_id;

ACCOUNT_MGR_ID COUNT(*)
-------------- ----------
147 76
149 74
148 58
145 111


SQL> conn AM145/AM145
Connected.
SQL> select count(*) from oe.custs;

COUNT(*)
----------
111

SQL> conn AM147/AM147
Connected.
SQL> select count(*) from oe.custs;

COUNT(*)
----------
76

SQL> conn AM148/AM148
Connected.
SQL> select count(*) from oe.custs;

COUNT(*)
----------
58

SQL> conn AM149/AM149
Connected.
SQL> select count(*) from oe.custs;

COUNT(*)
----------
74

从上面可以看出,对用户AM145,AM147,AM148,AM149的访问控制成功。

Note:删除策略:
SQL> CONN / AS SYSDBA
Connected.
SQL> exec DBMS_RLS.DROP_POLICY('oe', 'CUSTS', 'my_policy1');

PL/SQL procedure successfully completed.

SQL> conn AM145/AM145
Connected.
SQL> select count(*) from oe.custs;

COUNT(*)
----------
319
删除策略后用户AM145,AM147,AM148,AM149是可以看OE表的所有的行数据的。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

DBMS_RLS包实现数据库表行级安全控制

DBMS_RLS包实现数据库表行级安全控制:DBMS_RLS 是实现数据库表行级别安全控制的,这个包包含精细访问控制管理接口,这个接口是用来实现VPD(Virtual Private Database),虚拟私有数据库。DBMS_RLS只能在ORACLE的企业版(Enterpris Edition Only)本才可以用。oracle ebs 的权
推荐度:
标签: 安全 控制 实现
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top