`
yzgfbj
  • 浏览: 77375 次
  • 来自: ...
社区版块
存档分类
最新评论

【转】权限管理 之 数据库设计

阅读更多
但凡涉及多用户不同权限的网络或者单机程序,都会有权限管理的问题,比较突出的是MIS系统。    
   
  下面我要说的是MIS系统权限管理的数据库设计及实现,当然,这些思路也可以推广开来应用,比如说在BBS中用来管理不同级别的用户权限。    
   
  权限设计通常包括数据库设计、应用程序接口(API)设计、程序实现三个部分。    
   
  这三个部分相互依存,密不可分,要实现完善的权限管理体系,必须考虑到每一个环节可行性与复杂程度甚至执行效率。    
   
  我们将权限分类,首先是针对数据存取的权限,通常有录入、浏览、修改、删除四种,其次是功能,它可以包括例如统计等所有非直接数据存取操作,另外,我们还可能对一些关键数据表某些字段的存取进行限制。除此,我想不出还有另外种类的权限类别。    
   
  完善的权限设计应该具有充分的可扩展性,也就是说,系统增加了新的其它功能不应该对整个权限管理体系带来较大的变化,要达到这个目的,首先是数据库设计合理,其次是应用程序接口规范。    
   
  我们先讨论数据库设计。通常我们使用关系数据库,这里不讨论基于Lotus产品的权限管理。    
   
  权限表及相关内容大体可以用六个表来描述,如下:    
  1   角色(即用户组)表:包括三个字段,ID,角色名,对该角色的描述;    
  2   用户表:包括三个或以上字段,ID,用户名,对该用户的描述,其它(如地址、电话等信息);    
  3   角色-用户对应表:该表记录用户与角色之间的对应关系,一个用户可以隶属于多个角色,一个角色组也可拥有多个用户。包括三个字段,ID,角色ID,用户ID;    
  4   限制内容列表:该表记录所有需要加以权限区分限制的数据表、功能和字段等内容及其描述,包括三个字段,ID,名称,描述;    
  5   权限列表:该表记录所有要加以控制的权限,如录入、修改、删除、执行等,也包括三个字段,ID,名称,描述;    
  6   权限-角色-用户对应表:一般情况下,我们对角色/用户所拥有的权限做如下规定,角色拥有明令允许的权限,其它一律禁止,用户继承所属角色的全部权限,在此范围内的权限除明令禁止外全部允许,范围外权限除明令允许外全部禁止。该表的设计是权限管理的重点,设计的思路也很多,可以说各有千秋,不能生搬硬套说某种方法好。对此,我的看法是就个人情况,找自己觉得合适能解决问题的用。    
   
  先说第一种也是最容易理解的方法,设计五个字段:ID,限制内容ID,权限ID,角色/用户类型(布尔型字段,用来描述一条记录记录的是角色权限还是用户权限),角色/用户ID,权限类型(布尔型字段,用来描述一条记录表示允许还是禁止)    
   
  好了,有这六个表,根据表六,我们就可以知道某个角色/用户到底拥有/禁止某种权限。    
   
  或者说,这么设计已经足够了,我们完全实现了所需要的功能:可以对角色和用户分别进行权限定制,也具有相当的可扩展性,比如说增加了新功能,我们只需要添加一条或者几条记录就可以,同时应用程序接口也无须改动,具有相当的可行性。但是,在程序实现的过程中,我们发现,使用这种方法并不是十分科学,例如浏览某个用户所拥有的权限时,需要对数据库进行多次(甚至是递归)查询,极不方便。于是我们需要想其它的办法。使用过Unix系统的人们都知道,Unix文件系统将对文件的操作权限分为三种:读、写和执行,分别用1、2、4三个代码标识,对用户同时具有读写权限的文件被记录为3,即1+2。我们也可以用类似的办法来解决这个问题。初步的想法是修改权限列表,加入一个字段:标识码,例如,我们可以将录入权限标识为1,浏览权限标识为2,修改权限标识为4,删除权限标识为8,执行权限标识为16,这样,我们通过权限累加的办法就可以轻易的将原本要分为几条记录描述的权限放在一起了,例如,假定某用户ID为1,库存表对应的限制内容ID为2,同时规定角色类型为0、用户类型为1,我们就可以将该用户具有录入、浏览、修改、删除库存表的权限描述为:2,15,1,1。    
   
  确实很简单,不是吗?甚至还有更过激的办法,将限制内容列表也加上一列,定义好标识码,这样,我们甚至可以用简单的一条记录描述某个用户具有的对全部内容所具有的全部权限了。当然,这样做的前提是限制内容数量比较小,不然,呵呵,2的n次方递增起来可是数量惊人,不容易解析的。    
   
  从表面上看,上述方法足以达到实现功能、简化数据库设计及实现的复杂度这个目的,但这样做有个弊端,我们所涉及的权限列表不是相互独立而是互相依赖的,比如说修改权限,其实是包含浏览权限的,例如,我们可能只是简单的设置用户对库存表存取的权限值为录入+修改+删除(1+4+8=13),但事实上,该用户具有(1+2+4+8=15)的权限,也就是说,在这种方案中,13=15。于是当我们调用API询问某用户是否具有浏览权限时,就必须判断该用户是否具有对该数据表的修改权限,因此,如果不能在程序中固化权限之间的包含关系,就不能利用应用程序接口简单的做出判断。但这与我们的目的“充分的可扩展性”矛盾。    
   
  这个问题如何解决?我想到了另外一种设置标识码的方法,那就是利用素数。我们不妨将录入、浏览、修改、删除、执行的基本标志码定为2,3,5,7,11,当遇到权限互相包含的时候,我们将它的标识码设定为两个(或多个)基本标志码的乘积,例如,可以将“修改”功能的标志码定为3*5=15,然后将所有的权限相乘,就得到了我们需要的最终权限标识值。这样,我们在询问用户是否具有某项权限的时候,只需要将最终的值分解成质因子,例如,我们可以定义一个用户具有录入+修改+删除库存表的权限为   2*15*7=2*3*5*7,即表示,该用户具有了对库存表录入+浏览+修改+删除权限。    
   
  当然,对权限列表我们使用上述方法的前提是权限列表记录条数不会太多并且关系不是十分复杂,否则,光是解析权限代码就要机器忽悠半宿:)    
   
  我希望以上的分析是正确且有效的(事实上,我也用这些的方法在不止一套系统中实现),但无论如何,我觉得如此实现权限管理,只是考虑了数据库设计和应用程序接口两部分内容,对于实现,还是显得很费劲。因此,我恳请有过类似设计、实现经验的同志们提出建设性的意见和修改建议。    
   
  另外,关于数据库设计的思路还有使用二维表的,这将在以后的时间里讨论,关于应用程序接口的设计和实现我也将在利用另外篇幅和大家共同探讨,代码将用类C语法实现(我不喜欢pascal,抱歉)
分享到:
评论
1 楼 L_Jason_T 2008-03-21  
看了您写的文章,感觉很好,最近中心要求我们做一个简单的权限管理系统,正不知道该如何下手,还请您能多多指教一下. 可以吗?@!  我的邮箱:liaoqiang1113@163.com QQ:  516466435    可以的话,请联系我,谢谢了...

相关推荐

    工资管理系统数据库设计报告(数据库课程设计).doc

    数据库课程设计报告 工资管理系统数据库设计报告 设计题目:工资管理系统 学 院:信息技术学院 专 业:信息管理与信息系统 小组成员及分工 "组员 "分工 "分数 " " "编写代码及测试运行 " " " "概念设计 " " " "物理...

    权限管理及数据库设计

    权限管理及数据库设计 权限管理及数据库设计 最新设计的

    权限管理的数据库设计

    权限管理的数据库设计表,个人总结了下,特截图分享下,希望对你有所帮助

    图书销售管理系统数据库设计.docx

    图书销售管理系统数据库设计 数据库系统概论课程设计报告 2011年 05月 28 日 图书销售管理系统数据库设计全文共23页,当前为第1页。 目 录 图书销售管理系统数据库设计全文共23页,当前为第1页。 引 言 1 第一章 ...

    系统权限管理最新数据库设计建模

    最新版系统权限管理,数据库设计建模文件;此模式基本符合大众对系统权限管理的需求。

    基于RBAC权限管理数据库表设计

    基于RBAC权限管理数据库表设计

    数据库权限管理设计图

    数据库设计权限管理图 数据库设计权限管理图 数据库设计权限管理图 数据库设计权限管理图 数据库设计权限管理图 数据库设计权限管理图 数据库设计权限管理图

    java权限管理系统数据库设计.pdf

    java权限管理系统数据库设计.pdf

    权限管理数据库设计文档

    权限管理数据库设计文档,提供全面的数据库设计详情,请下载!

    java权限管理系统数据库设计

    java权限管理系统数据库设计 java权限管理系统数据库设计

    基于角色的权限管理数据库设计

    基于角色的权限管理数据库设计。内有建表语句及测试语句。

    权限管理系统数据库设计

    SQL Server2005数据库,权限管理系统数据库设计。

    数据库课程设计.教务管理系统

    基于SQL的教务管理系统开发。 目录 任务书 () 1. 需求调查、分析 () 1.1. 企业介绍 () 1.2. 需求调查及分析 () 2. 面向对象分析和设计 () 2.1. 用例分析 () ...8. 权限设计 () 9. 总结 () 参考资料 ()

    教室管理系统数据库系统设计

    安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过分配权限、设置权限级别来区别对待不同操作者对数据库的操作来提高数据库的安全性;系统平台的安全性体现在...

    图书销售管理系统数据库设计.pptx

    图书销售管理系统数据库设计 1.1项目描述 图书销售管理系统是实现图书销售信息化的重要手段,它能够保证图书销售信息的准确性、减少相关环节工作量,提高工作效率。图书销售管理系统包括图书查询、购买、评价等前台...

    超市管理数据库课程设计大作业.doc

    《数据库原理与设计》课程设计 (含完整设计资料) 一、超市管理数据库 超市需建立一个管理数据库存储以下信息: *超市信息包括超市代号,超市名,经理名及超市运营开销。 *一个超市内有多个部门,每个部门有部门号...

    库存物资管理系统数据库设计.doc

    库存物资管理系统数据库设计过程 1. 数据库需求分析 1.1 需求分析 1、需求调查 21世纪以来,人类经济高速发展,人们发生了日新月异的变化,特别是计算机的应用 及普及到经济和社会生活的各个领域。使原本的旧的管理...

    数据库课程设计图书馆管理系统.doc

    《数据库系统原理》课程设计—图书馆管理系统 一、课程设计的目的及意义 本课程设计是在学习《数据库原理》课程后,进行的一次全面的综合训练,其目的在于 加深对数据库原理的理解,掌握运用数据库应用系统开发软件...

    仓库管理系统设计数据库课程设计

    这个系统设计出来以后能够在实际当中发挥作用,并能够在实际当中给仓库管理员带来方便,也能够在以后有需要的时候能够很方便的进行扩展,很方便的对这个数据库进行维护,而且用较小的资源消耗就能够实现这些基本功能...

    医药销售管理系统数据库课程设计.docx

    10 3.1.2 视图的建立 12 3.1.3 触发器建立 12 3.1.4 建立存储过程 13 3.2 数据库的数据管理(插入、删除、修改等) 13 3.3 数据库的用户与权限管理 18 参考文献: 20 医药销售管理系统数据库课程设计全文共22页,当前...

Global site tag (gtag.js) - Google Analytics