统一认证中权限管理的问题

一千年前的人 发布于 2012/06/12 12:43
阅读 6K+
收藏 28

一个企业有多个系统,每个员工在不同的系统中都有uid和密码(uid冗余了),并且每个uid在不同的系统中权限是不一样的。

现在要设计一个统一认证系统,弄一个DB或者LDAP来存所有员工的uid,然后各个系统通过统一认证系统进行认证。

每个uid的权限在不同的系统中是不一样的,现在问题是uid在各个系统的权限需要集中存储在 统一认证系统 中吗?

我的想法是像身份证一样,统一认证系统仅仅仅仅维护uid、密码、姓名、性别等这几个基本信息。其他的 组织结构、各个系统的权限等 ,由各个系统自己维护。

但是我看了一个比较的大公司的设计的权限系统,他们把各个系统的权限都统一存在统一认证系统仅仅中了。 我想他们这样设计,肯定还是有他们自己的道理的。

这让我很困惑。 大家来讨论一下各自的设计思路吧,请说说你的思路和理由。

以下是问题补充:

@一千年前的人:@红薯, 还能关联spring security,ldap,添加tag吗 (2012/06/12 15:42)
加载中
3
宏哥
宏哥

两个凡是:

1: LDAP只用于 用户认证(authentication),除非业务系统中的业务关系,和人事关系完全一致.这种情况很少.

-------以下是授权部分(Authorization)

2: 业务系统 Profile(简档)定义 ACL(Action control list), 也就是CRUD系统当中所谓"角色"

3: (Role)角色定义树状组织.

4: BOSR(business object sharing rules) 根据ACL,联合Role形成三个维度,进行精确的 可见性,访问性控制.

以上 3-4,是所有的 Open source软件都无法做到的. 而且用Mysql这种"非"数据库是不可能实现的.

增加一个流程控制,就可以实现任意的业务方面的权限控制.

宏哥
宏哥
回复 @jackstraw : mysql糟糕也就算了.那些搞mysql的人,更糟糕.哈哈
wartskcaj
wartskcaj
建议@宏哥有空发个帖子,标题叫:mysql做不了的哪些事儿 : )
1
宏哥
宏哥
 @mark35
select * from v_content where ( role_id in (select id from (select * from connectby('cms_role','id','pid','id','0',0,';') as t(id int, pid int, level int, branch text, pos int) where level >=1) utree) or owner_id='10000')

给你一个例子.
上面的SQL表示, 查询出v_content当中, 属于自己以及在自己管理的组织下的所有记录.
你也可以用括号把它变成一个结果集,再进行group sharing 的并操作,再对business rules 进行集成运算.
宏哥
宏哥
@mark35 , FYI
1
宏哥
宏哥

数据一般分为 Public/Private 和 Read, Write, Authorization(数据上的再授权) 组成6个组合

通过 组织构架图, 实现 近似 无限种组合, 

数据基准, 是以数据属主, 在 策略/组织数, 上进行递归运算, 自动向上级授权实现.

这是其中一个维度, 也是最复杂的维度, 

另外 可以设定组, 在组内 互相 public/private/auth 进行交叉共享, 这个共享仍然在组织树上递归授权

第三维度, 在于业务维度, 通过比如审批价格产生的数据授权, 再进行 组,组织树的 再运算, 又产生数据访问控制. 这个就非常复杂了.

你仔细理解这几句话, 相信你对所有系统的数据访问授权都能找到答案.

光石头
光石头
嗯 如果把操作 save/delete/update/get 包含在url中,你认为还是这么复杂吗?
0
NoahX
NoahX

统一认证我就不说了。

组织结构你要放在你们系统,因为你是人员信息权威源,第三方系统如果有需要可以同步组织结构数据。

授权信息可以不放。

一般简单意义上的统一授权都是基于角色。用户和角色的关系放在ldap中,由第三方系统配置到ldap。达到统一权限的目的。(一般软件都支持ldap人员数据)

授权信息不放你这里的主要原因的第三方系统你改不起。

一千年前的人
一千年前的人
有道理! 有一个疑惑的地方,你的意思是角色、角色与用户的关系也存在ldap吗? 但是不同的系统需要定义的角色是不一样的, 每个系统的角色都先定义到ldap也不现实啊...
0
中山野鬼
中山野鬼

看一个例子,不代表这个例子就是对的。包括IBM堆出来的。项目本身有非技术的原因,成功的实施项目不代表是合理的项目。特别是非定制开发的,只是产品化实施出来的东西。(话又回来,定制开发的东西,也未必是合理的东西,哈,受甲方猪头影响更大)。

权限系统和公司自身管理方式关联很大。没谁对谁错的。不能拿一个理论上完美的东西,去让甲方套。设计者也要着重关注甲方的业务特点,组织特点,和管理状态。这些是设计权限系统的重要参考信息,而不是理论本身。

0
一千年前的人
一千年前的人

引用来自“中山野鬼”的答案

看一个例子,不代表这个例子就是对的。包括IBM堆出来的。项目本身有非技术的原因,成功的实施项目不代表是合理的项目。特别是非定制开发的,只是产品化实施出来的东西。(话又回来,定制开发的东西,也未必是合理的东西,哈,受甲方猪头影响更大)。

权限系统和公司自身管理方式关联很大。没谁对谁错的。不能拿一个理论上完美的东西,去让甲方套。设计者也要着重关注甲方的业务特点,组织特点,和管理状态。这些是设计权限系统的重要参考信息,而不是理论本身。

目前在设计一个东西的时候,先看有没有一个标准性的东西, 别人是怎么实现的,他们都有些什么最佳实践。 反正尽量避免闭门造车。 总的来说还是见闻太少,缺少对一个大型的成功的系统的学习和分析, 还是有点迷信典型。 我十分赞同 @宏哥 的建议:

1: LDAP只用于 用户认证
2: 业务系统 Profile(简档)定义 ACL
3: (Role)角色定义树状组织.

0
宏哥
宏哥

引用来自“中山野鬼”的答案

看一个例子,不代表这个例子就是对的。包括IBM堆出来的。项目本身有非技术的原因,成功的实施项目不代表是合理的项目。特别是非定制开发的,只是产品化实施出来的东西。(话又回来,定制开发的东西,也未必是合理的东西,哈,受甲方猪头影响更大)。

权限系统和公司自身管理方式关联很大。没谁对谁错的。不能拿一个理论上完美的东西,去让甲方套。设计者也要着重关注甲方的业务特点,组织特点,和管理状态。这些是设计权限系统的重要参考信息,而不是理论本身。

不得不说你,太不专业了.

权限系统全部都是这样设计的.

只有最后一个Business Object Sharing Rules是不一样的. 这是业务规则.

主数据,可以控制所有访问控制.

连业务规则都是根据配置数据进行设定.

0
一千年前的人
一千年前的人

引用来自“宏哥”的答案

两个凡是:

1: LDAP只用于 用户认证(authentication),除非业务系统中的业务关系,和人事关系完全一致.这种情况很少.

-------以下是授权部分(Authorization)

2: 业务系统 Profile(简档)定义 ACL(Action control list), 也就是CRUD系统当中所谓"角色"

3: (Role)角色定义树状组织.

4: BOSR(business object sharing rules) 根据ACL,联合Role形成三个维度,进行精确的 可见性,访问性控制.

以上 3-4,是所有的 Open source软件都无法做到的. 而且用Mysql这种"非"数据库是不可能实现的.

增加一个流程控制,就可以实现任意的业务方面的权限控制.

宏哥, 多谢指教。 前两点我都明白了。 对第3,4点, 还有点问题:

3.   (Role)角色定义树状组织 

      (1) 和 一个企业的组织结构(Organization Structure)  有联系和区别吗?

      (3) Role 是存在 ldap中吗? 各个业务系统要求的Role是不一样的, 统一存难度有点大。。

4.  BOSR(business object sharing rules)

     我理解的就类似 oracle 的账户可以把自己的权限grant给其信任的账户, 是这样的吗?

0
笨蛋EGG
笨蛋EGG
很值得讨论的一个东西······我也是不知道怎么做,自己随便搞……
0
宏哥
宏哥

引用来自“一千年前的人”的答案

引用来自“宏哥”的答案

两个凡是:

1: LDAP只用于 用户认证(authentication),除非业务系统中的业务关系,和人事关系完全一致.这种情况很少.

-------以下是授权部分(Authorization)

2: 业务系统 Profile(简档)定义 ACL(Action control list), 也就是CRUD系统当中所谓"角色"

3: (Role)角色定义树状组织.

4: BOSR(business object sharing rules) 根据ACL,联合Role形成三个维度,进行精确的 可见性,访问性控制.

以上 3-4,是所有的 Open source软件都无法做到的. 而且用Mysql这种"非"数据库是不可能实现的.

增加一个流程控制,就可以实现任意的业务方面的权限控制.

宏哥, 多谢指教。 前两点我都明白了。 对第3,4点, 还有点问题:

3.   (Role)角色定义树状组织 

      (1) 和 一个企业的组织结构(Organization Structure)  有联系和区别吗?

      (3) Role 是存在 ldap中吗? 各个业务系统要求的Role是不一样的, 统一存难度有点大。。

4.  BOSR(business object sharing rules)

     我理解的就类似 oracle 的账户可以把自己的权限grant给其信任的账户, 是这样的吗?

具体实现很复杂.

角色定义,各个系统都可以自定义,不是人事上的组织定义,而是递归授权的基础.

Role基本上和ldap没有关系.Ldap只回答who are you的问题,就是authentication, Role 可以回答在具体事件当中,where are you的问题, 所有维度统一起来,才能回答what can you do

可以定义group,进行交叉授权.

BOSR ,更复杂. 同样一个东西,比如销售数据,财务报销数据,会对应不同的rule,如果增加一个流程,就意味着,不同阶段,对应不同rule. 和oracle那玩意类似,但是复杂很多.

这个东西,如果用 垃圾java的那个spring security来实现,需要100000000000000000万个xml配置才能实现.

光石头
光石头
脑残,华为的内部系统是java实现的,全球500强的企业,多少组织结结构,多少权限细分,认证也是使用的ldap,你见过后台权限控制的表结构吗?
返回顶部
顶部