设为首页 加入收藏

TOP

Salesforce的数据权限机制(三)
2019-09-17 18:31:29 】 浏览:58
Tags:Salesforce 数据 权限 机制
r

Coordinator

系统管理员

所有权限

Administrator

超级管理员

所有权限

RecordAdministrator

记录管理员

ReadProperties,ReadChildren,WriteProperties,ReadContent,DeleteChildren,CreateChildren,LinkChildren,DeleteAssociations,CreateAssociations

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2)用户、组的设计:用户可以隶属于多个组,一个组也可以包括多个成员(组和用户)

3)ACL(访问控制表)机制:通过 ACL 机制实现对文档的权限控制。ACL包含多个用户、组的访问权限,如下表:

成员名(组或用户)

角色权限集名

Group1

Consumer

User1

Editor

User2

Read

 

 

 

 

 

 

 

注:Group1组中的所有成员拥有所在组的权限。

4)权限机制设计:内容库中的每一个对象(文件夹、文件等)都关系一个ACL对象。当用户访问内容库的对象时,先根据该对象对应的 ACL 里查找当前用户拥有的该对象的权限,然后判断当前用户是否拥有操作该对象的相关权限,从而实现内容库对象的权限管理。

Alfresco中的权限继承机制允许内容库对象继承父级节点的权限,因此,在对象创建的时候不必为每一个对象分配ACL。只要为目录结构分配好权限,在对象创建以后默认继承父级节点权限。通过用户、组、ACL的灵活配置,可以实现复杂的内容安全控制。

5)权限机制的具体实现:在底层把对象的操作规定了一个接口:NodeService。将对象的各种操作抽象为几种基本方法,如:getProperties(), setProperties()。将这些方法进行拦截,拦截的工作是通过当前操作用户,当前操作的对象id,当前执行的操作,判断是否可以调用该方法,从而实现在底层实现对对象权限的控制。

参考:

Alfresco权限机制

 

2. Oracle VPD

产品功能:VPD(Virtual Private Database)是从数据库层面实现数据访问控制的一种成熟技术,归属 Oracle security框架下。通过 VPD,银行便可以确保客户只看到他们自己的帐户,电信公司可以安全地隔离客户记录,HR应用程序可以支持复杂的员工记录数据访问原则。

如何使用:

VPD 是介于用户 SQL 语句和实际执行对象之间的介质层。SQL 语句在执行前,会自动被拦截并进行额外处理,处理结果往往是在 where 语句中添加特殊的条件式。

将一个或多个安全策略与表或视图关联,当对带安全策略的表访问(select/insert/update/delete)时,数据库将调用一个实施该策略的函数。策略函数返回一个访问条件(where子句),即谓词。应用程序将它附加到用户的 SQL 语句,从而动态修改用户的数据访问权限。如下面例子所示:如果执行 select * from t_policy 语句,则可以使用 VPD 添加 where t2 not in (10) 子句:

(1)建立测试数据表(t_policy):

CREATE TABLE T_POLICY 
(
  T1  VARCHAR2(10 BYTE), 
  T2  NUMBER(10) 
); 
insert into t_policy values('a',10); 
insert into t_policy values('b',20); 
insert into t_policy values('c',30); 
commit; 

(2)建立VPD需要的策略,这里的名字是:Fn_GetPolicy

CREATE OR REPLACE function Fn_GetPolicy(P_Schema In Varchar2,P_Object In Varchar2) return varchar2 is 
  Result varchar2(1000); 
begin 
  Result:='t2 not in (10)';     -- t2 != 10
  return(Result); 
end Fn_GetPolicy; 

(3)将策略与需要保护的表进行关联:

declare 
Begin 
Dbms_Rls.Add_Policy( 
Object_Schema =>'niegc',  --数据表(或视图)所在的Schema名称 
Object_Name =>'T_Policy', --数据表(或视图)的名称 
Policy_Name =>'T_TestPolicy', --POLICY的名称,主要用于将来对Policy的管理 
Function_Schema =>'NIEGC',  --返回Where子句的函数所在Schema名称 
Policy_Function =>'Fn_GetPolicy', --返回Where子句的函数名称 
Statement_Types =>'Select,Insert,Update,Delete', --要使用该Policy的DML类型,如'Select,Insert,Update,Delete' 
Update_Check =>True, --仅适用于Statement_Type为'Insert,Update',值为'True'或'False'. 如果为'True',则用户插入的值不符合Policy_Function返回条件时,该DML执行返回错误信息。
Enable =>True    --是否启用,值为'True'或'False' 
); 
end; 

(4)验证VPD效果

执行用户SQL:

select * from t_policy;

此时结果会少了t2=10这项

参考:

Oracle VPD实现数据细粒度访问

Oracle VPD详解 

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇作业小结2 下一篇基础才是重中之重~面向接口编程..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目