`
Feiing
  • 浏览: 238007 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个可能的列级权限控制方案讨论

阅读更多
最近的项目需要做到列级权限控制,  大意如下

public class DomainObject {
   private String attr1;
   private String attr2;
}


需求是 角色1 可对 attr1  进行读操作, 对 attr2 进行写操作,  而 角色2  对 attr1, attr2 都没有读权限.

目前考虑的方案 : 主要是在 ui 上控制, 如果没有读权限, 则显示空或无权限, 如果只有读权限, 则控制输入框为只读.

实现 : 建一张表用以纪录角色对 DomainObject   各属性的权限,  使用 webwork interceptor  拦截所有页面上的 ww 标签访问,  然后到配置表中查找权限信息,  如果查到匹配,  就将信息记录在一个集合中(类似 fieldError), 不妨称之为 fieldSecurityInfo,   最后更改标签模板,  根据 fieldSecurityInfo 中的信息做相应控制, 感觉大体可行.

目前的问题是 :

1. 如何拦截 <ww:> 标签的访问 ?
2. 只在 ui 上控制是否足够安全? 如果需要后台控制,  觉得难度工作量更大.


有做过类似需求的同学,  请不吝发言 
分享到:
评论
23 楼 xgylog 2006-08-04  
如果建权限表,个人感觉后台实现比较好,通过session bean 和自定义标签,一条sql即可完成,权限表实际起到字典的作用,不过最好给业务管理员留下管理功能,可以灵活的控制各个权限级别访问类型的变更和角色的增加。
22 楼 BirdGu 2006-07-19  
ACL也好,RBCL也好,准确地说都属于访问控制的策略,而不是具体的实现方式。
21 楼 凤舞凰扬 2006-07-18  
引用

我还真没听说过Oracle可以做到一个表中某几行可以由某人修改,另外几行又只能只读什么的,能说清楚点么?
基于行的安全控制,Oracle 早就做到了。http://www.oracle.com/technology/oramag/oracle/03-jul/o43security.html
引用
ACL一般应用于用户数少(相对于权限)的场景,性能好是它的特点
RBAC一般应用于用户多,权限也多的场景,灵活是其主要解决的问题
说大了,世界上权限控制方式只有两种,一种是控制单体数据(怎么叫都好,什么行数据,实例数据都可以),另外一种是控制数据集合的权限.ACL,RBAC和这种划分是没有冲突的.所谓的列数据控制,其实是控制数据集合权限的变形罢了. 在这上面糊涂的人,其实是没有搞清楚自己到底要控制什么罢了.在说明白点,就是上面说的控制数据attr,其实应该控制的是operation(business logic)
说实话,我的确不理解ACL从实现上对基于列的控制有什么作用,如果只是讨论所谓的概念,我也写得很清楚了http://forum.iteye.com/viewtopic.php?t=20586&postdays=0&postorder=asc&start=15。 就是基于ACL也好,基于RBAC也好,说到底只是权限控制的行为方式,而并非怎么去寻找一个更好的思路去实现基于行控制的行为。 如果要把基于属性的控制泛化为operation,基本就没得谈了。
引用
现在一般的Web应用,由于使用Connection Pool,一般数据库用户都使用的同一个。所以依赖数据库的访问控制机制是不行的。

普遍的,全面的属性级访问控制是否有必要?象ACEGI的话也只是支持对象级的访问控制。
那确实,在绝大多数情况,甚至列对象级的控制都是不需要的。不过既然谈到了这个问题,也就是存在了需求。
20 楼 zkj_beyond 2006-07-16  
独狼 写道
引用
如果配置什么的看编程技巧了,我是把这些业务表的列都生成xml,角色和表列的关系也在xml中,启动web服务器时把没个角色 规则实例化成 一个java对象,如果修改角色,只要修改内存中java对象和xml就可以了。
经过实践,比放数据库中简单。

这种方式对维护者就是恶梦啊。。。

我不认为复杂。和你建立权限表一样!可能更简单。

这里我把这个xml当成数据库。你把这个xml转化成表单是如此的容易。
我用xstreame上瘾了。先定义java对象,然后确定xml.

private class RoleMapping{
    private  String role;
    private  String tableName;
    String[] fieldName;
     Boolean[] isReaders;
    Boolean[] isWriters;
    ............................

}
其实控制权限的就这一堆对象,初始化这个对象的是 需要 控制权限的表极其字段。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

不知道大家用过lotus domain开发过OA没有,它的字段控制和楼主的需求类似。
19 楼 独狼 2006-07-15  
引用
如果配置什么的看编程技巧了,我是把这些业务表的列都生成xml,角色和表列的关系也在xml中,启动web服务器时把没个角色 规则实例化成 一个java对象,如果修改角色,只要修改内存中java对象和xml就可以了。
经过实践,比放数据库中简单。

这种方式对维护者就是恶梦啊。。。
18 楼 riss 2006-07-15  
wolfsquare 写道


引用
这个都可以做到行级的访问控制了.

我还真没听说过Oracle可以做到一个表中某几行可以由某人修改,另外几行又只能只读什么的,能说清楚点么?


Oracle高级安全特性中有个"精细存取控制",这是我在&lt;Oracle专家高级编程&gt;中学得,并在实际项目中用到.
Oracle标准版是没有这个特性地!只有企业版的才有!当然标准版了可以通过一个小巧门可以做到.
比较有意思的东西!!!
17 楼 zkj_beyond 2006-07-15  
Feiing 写道

public class DomainObject {
   private String attr1;
   private String attr2;
}


需求是 角色1 可对 attr1  进行读操作, 对 attr2 进行写操作,  而 角色2  对 attr1, attr2 都没有读权限.

我到是不建议把这些放到web层处理,应该放到logic层。
public class Field{
    private String name;
    private  Object value;
    private type class;
    private isRead;
    private isWrite;
    private String role;
}

public class DomainObject  implment IDomain{
   private Field attr1;
   private Field attr2;
}

如果配置什么的看编程技巧了,我是把这些业务表的列都生成xml,角色和表列的关系也在xml中,启动web服务器时把没个角色 规则实例化成 一个java对象,如果修改角色,只要修改内存中java对象和xml就可以了。
经过实践,比放数据库中简单。
16 楼 wolfsquare 2006-07-15  
DS也有适用场景的,在需要使用权限做大量过滤时候就只好抓瞎了,不如SQL连接来得干脆。
15 楼 jini 2006-07-15  
wolfsquare 写道
引用
你們回帖的人 有使用過 DS 做過 Access Control 嗎 ?

老兄,你从哪个星系过来的亚,我们有说到DS吗?


喔 ~ 我只是好奇問問.. 沒有挑釁的意思

因為 討論到 Access Control 的彈性與複雜性 最好還是以 Directory Server 有繼承性的關係會比在資料庫中容易的多..
14 楼 BirdGu 2006-07-14  
现在一般的Web应用,由于使用Connection Pool,一般数据库用户都使用的同一个。所以依赖数据库的访问控制机制是不行的。

普遍的,全面的属性级访问控制是否有必要?象ACEGI的话也只是支持对象级的访问控制。
13 楼 wolfsquare 2006-07-14  
引用
你們回帖的人 有使用過 DS 做過 Access Control 嗎 ?

老兄,你从哪个星系过来的亚,我们有说到DS吗?

引用
这个都可以做到行级的访问控制了.

我还真没听说过Oracle可以做到一个表中某几行可以由某人修改,另外几行又只能只读什么的,能说清楚点么?

回到楼主的问题:
引用
1. 如何拦截 &lt;ww:&gt; 标签的访问 ?
2. 只在 ui 上控制是否足够安全? 如果需要后台控制, 觉得难度工作量更大.

1.为什么不采取安全标签来控制而要拦截 标签访问?
2.前台要控制,后台视安全要求了来决定,仅仅在一两个地方做权限的特殊控制问题不大,难的是整个权限系统设计通用,概念一致,简单,还要容易管理.
12 楼 riss 2006-07-14  
我想这个问题解决本质依赖于数据库
如果使用的是ORACLE数据库考虑使用"精细访问控制"看可不可以,这也许比你的要求做的更好,至少在数据库级你是做不到随便查看,修改,和删除数据了,这得看你如何根据角色来制定策略了.说的对与不对只能作为参考.
我曾经做过这样的东西:根据用户角色,什么样角色可以访问数据库中的什么记录.什么样的角色可以对它进行修改,插入数据(这依赖数据库中指定的策略了).这个都可以做到行级的访问控制了.我目前只知道ORACLE可以做到.其他的不了解.SQL server应该不能这样!呵呵!
11 楼 jini 2006-07-14  
引用

需求是 角色1 可对 attr1 进行读操作, 对 attr2 进行写操作, 而 角色2 对 attr1, attr2 都没有读权限.

這用 aop 的觀念實現一點都不難, 否則利用 SessionBean 設定 method-security 應該是最方便的.

........................................................................
另外, 在 directory server 應該有區分 ACL and ACI

aci 的範例

aci: (target=”“ldap:///$rootSuffix”)
  (targetfilter=(!(objectclass=sunServiceComponent)))
  (targetattr != “userPassword||passwordHistory
   ||passwordExpirationTime||passwordExpWarned||passwordRetryCount
  ||retryCountResetTime||accountUnlockTime||passwordAllowChangeTime”)
  (version 3.0; acl “anonymous access rights”;
   allow (read,search,compare)
   userdn = “ldap:///anyone”; )

根據不同 target, 設定相關的 permissions ( allow/deny ) 以及相關人員,

ACL 在同一個 directoy entry 之中, 僅算是 ACI 的屬性,  通常應用在系統的存取權限控制上..
........................................................................

說真的. 我完全不知道為什麼 method security 會扯到 ACL .

引用

ACL一般应用于用户数少(相对于权限)的场景,性能好是它的特点
RBAC一般应用于用户多,权限也多的场景,灵活是其主要解决的问题


最後, ACL 和 RBAC 也沒什麼直接的關係. ACI 可以設定 DN 為 Role...
"ACL一般应用于用户数少, RBAC一般应用于用户多" 真的是蠻奇怪的觀念的 ...

你們回帖的人 有使用過 DS 做過 Access Control 嗎 ?
10 楼 BirdGu 2006-07-13  
ACL有很多规则组成。每项规则有三个要素:主体(用户),操作的对象(对象,对象的某个属性,或者程序),被授权的操作(读,写,执行等)。

基于行的权限控制也好,基于列的控制权限也好,只是ACL中的操作对象的粒度不同。

在信息安全领域,关于访问控制的理论是很丰富和完备的。但是,现在要完美的实现这些理论却还是很困难的。主要限制就是实现的复杂度以及性能。

所以,根据实际情况,在安全性和性能,复杂度之家折衷考虑吧。
9 楼 wolfsquare 2006-07-13  
ACL一般应用于用户数少(相对于权限)的场景,性能好是它的特点
RBAC一般应用于用户多,权限也多的场景,灵活是其主要解决的问题
说大了,世界上权限控制方式只有两种,一种是控制单体数据(怎么叫都好,什么行数据,实例数据都可以),另外一种是控制数据集合的权限.ACL,RBAC和这种划分是没有冲突的.所谓的列数据控制,其实是控制数据集合权限的变形罢了. 在这上面糊涂的人,其实是没有搞清楚自己到底要控制什么罢了.在说明白点,就是上面说的控制数据attr,其实应该控制的是operation(business logic)
8 楼 凤舞凰扬 2006-07-04  
Feiing 写道
其实这个 列级 权限控制跟 实例级 权限控制很类似,  标准的 实例级 权限控制是采用 ACL 实现,  不过其复杂度和执行效率都令人诟病

      ACL是什么东东?这么牛?我一直思考着基于列的权限控制,复杂度和效率一直是让我不敢着手和思考的原因。
    我曾经做到过数据行的管理与控制,据说Oracle做到行与列的管理控制。
    我曾经尝试想用ValueObject的原理去考量基于列的控制,自今也没有一个可以去实现的方案。
    刚刚查了一下google, ACL 指Access Control List 。是否如楼上所说的?
引用
ACL(access control list)

访问控制表

ACL是存在于计算机中的一张表,它使操作系统明白每个用户对特定系统对象,例如文件目录或单个文件的存取权限。每个对象拥有一个在访问控制表中定义的安全属性。这张表对于每个系统用户有拥有一个访问权限。最一般的访问权限包括读文件(包括所有目录中的文件),写一个或多个文件和执行一个文件(如果它是一个可执行文件或者是程序的时候)。Windows NT,Novell公司的Netware,Digital公司的 OpenVMS和基于UNIX系统是使用这种访问控制表的系统。而此表的实现在各个系统中却不一样。

在Windows NT中,每个系统对象和一个访问控制表相关。每个ACL都有一个或多个访问控制入口,包括用户名或用户组的名称。对于每个用户,组或人物,他们的访问权限在表中的一个位串中记录。一般说来,系统管理员和对象的所有者创建对象的访问控制表。

作为一个一般的例子,试想一个三个用户的操作系统,在其中一个人是程序员,另一个是程序测试员最后一个是系统本身。ACL中的程序对象可能如下所示:

programmer read write execute

tester read execute

system execute

在这个三个入口的ACL中,在读写和执行程序对象前,系统将测试请求者是否有权限提出这一请求。例如,程序测试者有权读程序和运行程序,但无权写程序,或更改程序。
, 但是我看不出,这对基于数据行与数据列的权限控制有任何指导的意义啊?
7 楼 heaven 2006-06-01  
&lt;p&gt;个人认为,当前的需求是做 实例级的访问控制,用acl模型和rbac应该都无所,用acl的话最终要得到当前用户对该实例的访问控制列表,如果用rbac的概念描述就是得到当前ob的ops,其实是一样的,用什么模型取决于当前的安全需求是object central 还是 user central。
    &lt;p&gt;在通常的分层实现的j2ee应用程序中,通常有两个切面可以获得实例
web 层 在进入controller之前, 通过分析request得到当前实例,进行控制,
service层,使用aop通过分析service method的参数得到实例,进行控制。
    &lt;p&gt;大概就是这样思路,具体实现起来有太多的细节需要考虑。
看过很多成功的web应用都是用acl,用rbac的还罕有,见过的rbac大都走了样子,只剩下一个rabc的概念.
6 楼 liuyxit 2006-05-30  
跟我准备做的自定义列表有点相似。

而我的设想是用自定义标签完成。
就我这情况而言,最麻烦又最想解决的是数据量的问题。
而你的权限就用自定义 标签就差不多了。
5 楼 downpour 2006-05-30  
哪能嘎麻烦?映射数据库嘛?如果这些字段都对应于数据库,为什么不对某些字段做一次ORM,对另外一些字段再做一次ORM,这样一来,你的隔离就针对对象了。
4 楼 wainwen 2006-05-30  
Feiing 写道
wainwen 写道
建议先把权限模型确定下来,再考虑如何实现。
ACL = Access Control List,访问控制列表。
另外一个很重要的概念是 RBAC = Role Based Access Contol,可以google一下。
如果对于权限模型经验不多,最好看看相关资料后再确定自己如何设计。个人感觉,权限系统是信息管理系统中非常复杂,也非常容易设计不到位的部分。
下面是一个比较简单的事业部制组织机构及权限模型:
组织结构:建立一颗部门树,部门可以嵌套子部门
职务:建立多种职务,简单系统,职业和部门可以没有关系,比如项目经理,公司所有部门都可以有项目经理的职务
权限:权限和职务关联,比如项目经理可以有以下权限:创建新任务、请假审批等
员工:一个员工,属于一个特定部门,同时可以在一个部门具有多种职务,也可以在多个部门兼任多个职务


你说了这么多,  跟我要做的列级权限控制有什么关系?

抱歉,有些跑题。
我有点印象,好像是前面有贴子提到不太了解ACL,因此多说了几句,呵呵。

相关推荐

    vpd列级权限控制举例

    oracle数据安全介绍与简明使用之:vpd列级权限控制举例

    1855列级名庄[收集].pdf

    1855列级名庄[收集].pdf

    数据库原理实验4-数据的安全性与完整性控制(实验报告含总结体会、代码)

    1 实验目的 ... (2) 掌握用户授权和回收权限的基本方法。 (3) 掌握系统级权限和对象级权限的授权和回收方法 (4) 掌握角色的使用方法 (5) 掌握实体完整性、参照完整性和用户...(17) 列级权限 2.5 掌握实体完整

    建发列级名庄联盟行销推广策略.pptx

    建发列级名庄联盟行销推广策略.pptx

    数据库原理实验-数据安全性-sqlServer

    1实验目的 ... (2)掌握用户授权和回收权限的基本方法。 (3)掌握系统级权限和对象级权限的授权和回收方法 (4)掌握角色的使用方法 2实验内容 2.1掌握用户管理的基本使用方法 ...(2)创建超级用户。...(17)列级权限。

    Oracle中基于列级安全保护的视图分析.pdf

    Oracle中基于列级安全保护的视图分析.pdf

    SQL SERVER 2000中的列级约束与表级约束

    SQL Server 2000中的列级约束与表级约束 在SQL Server 2000中有5 种约束: 主键约束(primary key constraint) 唯一性约束(unique constraint) 检查约束(check constraint) 缺省约束(default constraint) ...

    应用于TOF传感器中列级ADC的研究_徐立康.caj

    应用于TOF传感器中列级ADC的研究_徐立康.caj

    信号与系统傅立列级讲义

    傅立列級數信號與系統的資料 繁體中文 傅立列級數信號與系統的資料 傅立列級數信號與系統的資料 傅立列級數信號與系統的資料傅立列級數信號與系統的資料

    一种用于CMOS图像传感器的10位高速列级ADC

    一种用于CMOS图像传感器的10位高速列级ADC

    从零开始学习MySQL–数据库管理–003

    MySQL访问控制系统入门 MySQL访问控制由两部分...table_priv和columns_priv表:包含表级和列级权限。 procs_priv表:包含存储函数和存储过程的权限。 创建用户帐户 create user yourName identified by 'password'; c

    大数据安全保障措施.doc

    账号权限管理系统具体实现功能与组织自身需求有关,除基本的创建或删除账号、 权限管理和审批功能外,建议实现的功能还包括:一是权限控制的颗粒度尽可能小,最 好做到对数据表列级的访问和操作权限控制。二是对权限...

    大数据安全保障措施-.docx

    账号权限管理系统具体实现功能与组织自身需求有关,除基本的创建或删除账号、权限管理和审批功能外,建议实现的功能还包括:一是权限控制的颗粒度尽可能小,最好做到对数据表列级的访问和操作权限控制。二是对权限的...

    Hive权限设置说明文档.doc

    CDH平台,通过hue访问hive,控制库级别,表级别,及列级别的访问权限

    应用于CMOS图像传感器的高速列级ADC

    应用于CMOS图像传感器的高速列级ADC

    MySQL用户管理

    CREATE和REVOKE语句影响4个表:授权表内容 user 能连接服务器的用户以及他们拥有的任何全局权限 db 数据库级权限 tables_priv 表级权限 columns_priv 列级权限 还有第5个授权表(host),但它不受GRANT和...

    大连海事大学数据库实验六

    (2)根据书上的例子,针对TPCH数据库模式设计各种权限管理语句,每种类型权限语句至少要设计一个,描述清楚权限要求,运行你所设计的权限语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。

    oracle数据库经典题目

    SGA区是由Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时连接同一个实例时,SGA区数据供多个用户共享,所以SGA区又称为共享全局区。用户对数据库的各种操作主要在SGA区中进行。...

    数据库作业4-20181

    一、 视图设计与操作,请针对你在实验 2 中 二、 用户口令管理设计题 三、 用户授权操作题 四、 数据库完整性实验题

Global site tag (gtag.js) - Google Analytics