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

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

阅读更多
但凡涉及多用户不同权限的网络或者单机程序,都会有权限管理的问题,比较突出的是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

    工资管理系统数据库设计报告是信息技术学院信息管理与信息系统专业的一份课程设计报告,旨在通过实际操作来学习和理解数据库系统的设计与实现。这份报告涵盖了多个关键阶段,包括需求分析、概念设计、逻辑设计以及...

    权限管理及数据库设计

    在IT行业中,权限管理和数据库...权限管理确保了只有经过授权的用户才能访问和操作相应资源,而数据库设计则保证了数据的有效组织和快速访问。理解并熟练掌握这两者,对于开发出安全、稳定、高性能的IT系统至关重要。

    学生宿舍管理系统数据库设计案例

    学生宿舍管理系统数据库设计案例是一个全面展示数据库设计流程的实例,涵盖了从需求分析到逻辑设计等多个关键步骤。在设计这样的系统时,首要目的是提高学生宿舍管理的效率和准确性,确保信息的及时更新和有效利用。...

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

    Java 权限管理系统数据库设计 Java 权限管理系统数据库设计是指在 Java 平台下设计和实现的权限管理系统的数据库结构和设计思路。本文档将详细介绍权限管理系统数据库的设计,包括数据库表的设计、字段的设计、权限...

    教务管理系统 数据库设计

    ### 教务管理系统数据库设计详解 #### 一、引言 随着信息技术的发展,教育领域的信息化建设也变得日益重要。教务管理系统作为学校信息化建设的重要组成部分,对于提高学校的管理水平和服务质量具有重要意义。本篇...

    仓库管理系统数据库设计.rar

    《仓库管理系统数据库设计》 仓库管理系统是企业运营中不可或缺的一部分,它涉及到商品的入库、出库、库存管理等核心业务流程。数据库设计是系统开发的关键环节,为整个系统的高效运行提供数据存储和处理的基础。本...

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

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

    超市管理系统 数据库设计

    以下将详细介绍超市管理系统数据库设计的相关知识点。 首先,数据库设计通常包括需求分析、概念设计、逻辑设计和物理设计四个阶段。 1. 需求分析:在这一阶段,我们需要明确超市管理系统的需求,例如商品管理...

    基于MYSQL的图书管理系统数据库设计.doc

    "基于MYSQL的图书管理系统数据库设计" 本文档旨在设计一个基于MYSQL的图书管理系统数据库,旨在解决传统的手工操作方式的弊端,提高图书管理和借阅效率。该系统主要包括图书管理、读者管理、借阅管理、综合查询和...

    数据库权限管理设计图

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

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

    总结来说,基于RBAC的权限管理数据库表设计涵盖了角色、权限、用户、角色-权限关联、用户-角色关联等多个核心组件,通过这些组件的组合,可以构建出一个强大且易于维护的权限管理体系。在实际应用中,还可以根据业务...

    网吧管理系统数据库课程设计.pdf

    8. 权限设计是确保数据安全的重要环节,通过设定不同用户的访问权限,防止未授权的访问和操作。 通过这个课程设计,学生不仅能深入理解数据库理论,还能实际操作,增强SQL语言的应用能力,包括插入、删除、修改和...

    人事管理系统数据库设计

    5. 安全性与权限控制:数据库设计应考虑数据的安全性,设置用户权限,防止未授权访问。例如,不同角色(如管理员、普通员工)可能有不同的数据查看和操作权限。 6. 性能与扩展性:随着学院规模的扩大,数据库需要...

    旅游系统管理数据库设计报告

    《旅游系统管理数据库设计报告》是一份详尽的实践教程,专为正在学习数据库管理和设计的建桥学院学生提供指导。这份报告包含了丰富的资源,包括图表、实际的数据库文件以及详细的文档,旨在帮助读者深入理解数据库在...

    物流快递公司管理系统 数据库课程设计.pdf

    【物流快递公司管理系统数据库课程设计】是一份详细阐述如何构建此类系统的文档,旨在利用网络技术和数据库管理系统提升物流行业的效率和信息共享。以下是该系统的主要设计要点: 1. **编写目的**: 本设计说明书...

    通讯录管理系统数据库设计

    用户角色和权限管理也是数据库设计的一部分,确保只有授权的用户才能进行特定操作。 8. **用户界面与交互**:尽管本问题主要关注数据库设计,但实际的通讯录管理系统还需要一个友好的用户界面,用户可以通过这个...

    医院管理系统 数据库课程设计

    综上所述,"医院管理系统 数据库课程设计"涵盖了数据库设计的基本原理和实践操作,通过这个项目,学生可以深入学习数据库的规划、设计、实现和维护,同时了解业务流程与数据管理的关系,为今后从事信息系统开发积累...

    工人信息管理系统的数据库设计报告

    《工人信息管理系统的数据库设计报告》是一份详细阐述如何为工人信息管理系统构建高效、稳定、易维护数据库的设计文档。在数据库设计中,我们首先要明确系统的需求,然后进行概念模型设计,接着是逻辑结构设计,最后...

    资产管理数据库设计

    ### 资产管理数据库设计:武汉理工课程设计解析 #### 设计背景与目标 武汉理工大学计算机学院的《资产管理数据库设计》课程设计项目,旨在通过实际操作,使学生掌握数据库设计的基本理论与方法,理解资产管理在...

Global site tag (gtag.js) - Google Analytics