原文:http://baike.baidu.com/view/2108713.htm?fr=aladdin
权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。 很多人,常将“用户身份认证”、“密码加密”、“系统管理”等概念与权限管理概念混淆。
场景举例编辑
以上举例,局限于功能访问权限。还有一些更加丰富、更加细腻的权限管理。比如:
3,普通审查员审查财务数据的权限是:在零售行业审核最高限额是¥50万,在钢铁行业最高限额是¥1000万;高级审查员不受该限额限制;
4,
ATM取款每次取款额不能超过¥5000元,每天取款总额不能超过¥20000元。
这些权限管理和数据(可以统称为资源)直接相关,又称为数据级权限管理、细粒度权限管理或者内容权限管理。
分类编辑
从控制力度来看,可以将权限管理分为两大类:
1,功能级权限管理;
2,数据级权限管理。
从控制方向来看,也可以将权限管理分为两大类:
1,从系统获取数据,比如查询订单、查询客户资料;
2,向系统提交数据,比如删除订单、修改客户资料。
概念编辑
用户身份认证,根本就不属于权限管理范畴。用户身份认证,是要解决这样的问题:用户告诉系统“我是谁”,系统就问用户凭什么证明你就是“谁”呢?对于采用用户名、密码验证的系统,那么就是出示密码。当用户名和密码匹配,则证明当前用户是谁;对于采用
指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。
密码加密,是隶属用户
身份认证领域,不属于权限管理范畴。
系统管理,一般是系统的一个模块。而且该模块一般还含有权限管理子模块。因此,很多人误认为权限管理系统只是系统的一个小小的子模块。系统管理里面的权限管理模块,只是一个操作界面,让企业IT
管理员能够设置角色等
安全策略。系统背后还有很多权限验证逻辑,这些都并不属于该模块。总体来说,该模块相当于给权限管理模块提供了一些数据,比如:
张三是
人力资源经理等。
更多混淆概念,请参考:《对权限管理认识的一些误区》。
技术实现编辑
按照权限管理的力度,逐步介绍权限管理实现技术。
4.1,功能权限管理技术实现
功能权限管理技术,一般就使用基于角色
访问控制技术RBAC(Role Based Access Control)。该技术被广泛运用于各个系统,非常容易掌握。该技术模型如下图示:
权限设置
一般来说,系统提供如下功能:
1,角色管理界面,由用户定义角色,给角色赋权限;
2,用户角色管理界面,由用户给
系统用户赋予角色。
3,一些优秀系统,还支持用户定义权限,这样新增功能的时候,可以将需要保护的功能添加到系统。
这里,我们谈谈Spring Security框架。它将访问角色固化到程序代码里面。那么这种控制就相当于由
软件开发人员完成,而不是最终用户。这从实施角度来看,是完全错误的。更多阅读,可以查看《Spring Security优劣之我见》。
权限验证
功能级的权限验证逻辑非常简单。查看该当前登录用户的角色是否包含该功能的权限。如果有,则表示有权访问,否则表示无权访问。
对于WEB系统,一般定义一个Filter就可以完成权限验证,无需在各个程序入口进行权限判断。程序伪代码如下:
// 获取访问功能
String url=request.getRequestPath();
// 进行权限验证
User user=request.getSession().get("user");
boolean permit=PrivilegeManager.permit( user, url );
if( permit ) {
chain.doFilter( request, response );
} else {
// 可以转到提示界面
}
4.2,数据级权限管理技术实现
目前,数据级权限管理领域,一直没有统一的技术。大体上,
软件开发人员采用如下技术:
1,硬编码,也就是将这种逻辑以if/else等形式与业务代码耦合在一起,这种情况居多;
2,使用
规则引擎,也有一些企业将这种逻辑以规则形式提出来,并使用规则引擎解析规则;
3,使用第三方专业
软件,有
开源中间件
Ralasafe
[1]
;开源框架Spring Security
[2]
;商业产品Oracle Entitlements Server,IBM Tivoli Access Manager,
UPMS通用用户权限系统等。
Ralasafe和Oracle、IBM的商业产品一样,都是
中间件形式。对应用系统和应用数据库结构没有要求。都有管理界面进行直接操控管理,而且都能在线进行测试。相比较,
Ralasafe还可以控制查询权限(即从系统查询订单、查询客户等),Oracle、IBM的商业产品没有这方面功能;从产品学习难度来看,Ralasafe只要有一些IT经验,就能快速上手;Oracle、IBM产品即使是专业人员,也难以掌握。
Spring Security是
框架,需要对你的应用系统进行改动,你的系统必须在该框架进行设计编写。它只是帮助开发人员将权限提取出来了,但数据级权限还需要开发人员开发Voter。而且配置工作巨大,难以测试。
虽然上述提到的产品,都是Java产品。但Ralasfe和Oracle、IBM的商业产品,以
中间件形式,可以部署在独立服务器上,使用web service等方式与非Java系统交互。
实施
5.1,功能级权限控制
5.2,部分预定义好的数据级权限
有些复杂一点的系统,提供了一些规则和管理界面,可以让系统使用者(一般是企业IT
管理员)输入规则参数。比如普通审查员审查财务数据的金额区间,勾选某用户能够查询哪些组织机构的订单数据。
这是给企业提供了部分控制数据级权限的能力。但该能力还非常弱,仅限于已定义好的策略,不能适应安全策略变化。而,企业需求肯定会随着业务发展、时间推移,发生变化。比如:普通审查员审查区间由原来的单一设置区间,改为按照行业、按照地域来设置不同的区间。用户查询订单不仅和组织机构有关,还和订单业务领域(体育、食品等)有关。当这些需求发生的时候,企业还要求助于
软件开发商进行修改。
5.3,企业完全掌控安全策略
企业完整掌控安全策略,应该包括2个方面内容:1,功能级权限管理完全自我掌控;2,数据级权限管理完全自我掌控。实现这方面需要,还需要考虑企业的IT能力:IT能力没有
软件开发商强,而且权限管理涉及整个系统安全,关系重大。因此
软件必须是这样的:1,图形化、集中管理的,便于企业管理;2,可在线测试的,定制策略后在不影响业务的情况下,进行测试,确保无误。
目前,就
Ralasafe和Oracle、IBM产品满足要求。