问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

权限管理的数据库该如何设计?

发布网友 发布时间:2022-04-29 19:16

我来回答

3个回答

懂视网 时间:2022-04-30 03:54

方法一:    用户表:  T_UserInfo     id     name    对象表:  T_Object     id     name    权限表  T_Access     accessid     userid(外键,来自用户表)     objectid(外键,来自对象表)     access(用代码记录用户的权限组合:         1000  浏览         1100  浏览、添加         1110  浏览、添加、编辑         1111  浏览、添加、编辑、删除         等)    方法二:    用户表:  T_UserInfo     id     name    对象表:  T_Object     id     name     access1(代表浏览,保存用户的id号,用逗号分隔)     access2(代表浏览、添加)     access3(代表浏览、添加、编辑)     access4(代表浏览、添加、编辑、删除)    孰优孰劣?  ---------------------------------------------------------------    我們用的是第一種  WINDOWS系統用的也是第一種      ---------------------------------------------------------------    方法2不可取,用户增加的时候非常麻烦,而且access1--access4的长度很难确定。   下面我要说的是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,即表示,该用户具有了对库存表录入+浏览+修改+删除权限。   当然,对权限列表我们使用上述方法的前提是权限列表记录条数不会太多并且关系不是十分复杂,否则,光是解析权限代码就要机器忽悠半宿:) 我希望以上的分析是正确且有效的(事实上,我也用这些的方法在不止一套系统中实现),但无论如何,我觉得如此实现权限管理,只是考虑了数据库设计和应用程序接口两部分内容,对于实现,还是显得很费劲。因此,我恳请有过类似设计、实现经验的同志们提出建设性的意见和修改建议。   http://zhoufoxcn.blog.51cto.com/792419/166431/

关于权限的数据库设计

标签:

热心网友 时间:2022-04-30 01:02

我想的是建五个表
表一 权限表
表二 角色表
表三 账户表
表四 权限角色的id关联表
表五 角色账户的id关联表
这五个表 可以实现
一个账户 对应多个角色
一个角色 对应多个权限

希望对楼主有帮助吧

热心网友 时间:2022-04-30 02:20

PHP会员权限控制

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
传奇世界退师和出师同样能得到声望吗 声望可以转让吗? 传奇世界 声望怎么弄,最快弄声望的方法? 传奇世界 声望问题徒弟问题 天龙八部2中的哪个门派最牛逼啊 天龙八部手游哪个门派厉害 天龙八部手游门派排名 天龙八部里,三大最强门派,第一实至名归! miui13怎么开启dc调光 小米14怎么样小米14有没有DC调光功能【详解】 小米14dc调光是什么意思 安全部与工程部谁管谁 虎舌红的花语 如何查看充电宝是不是真的,只有充电宝,没有盒子的话 财源茂盛家兴旺富贵平安福满堂是什么意思 福贵安康是什么意思 富贵平安万事和吉祥如意家业兴哪个是上联表示什么意思? 福虎登门富贵平安新春乐佳年顺景如愿来,意思是,什么 最近有人叫我办卡 说是移动不限量 39一个月100G不限速 移动真的有这个卡吗? 农行信用卡邮寄需要多长时间 闲钱放在钱包金融投资怎么样 迎新春平安富贵 贺佳节吉祥如意 的寓意是什么 农行信用卡邮寄网点需要多久啊,一个多星期了也没动静 钱包车贷是郑州银行的吗 富贵求平安 事常顺人意的意思 麻烦问下专业人士,有一个月100G流量不限速的手机套餐吗?有知道的么? 农行信用卡显示邮寄分行中,要多久才能拿到卡 对联财源茂盛家兴旺、富贵平安福满堂的寓意? 富贵平安这个词怎样解释呢,求指教? 富贵平安新春如意事事顺富贵吉祥步步高,是什么意思? 富贵安安什么意思? 什么字包含富贵平安吉利的含义 请教下,有一个月100G流量不限速的手机套餐吗?有知道的么? 充电宝充满电的标志是什么? Access设置用户权限 Asp.net跟sql数据库设计的网页后台权限管理 移动4g 每月100g套餐流量超出之后能续费流量加油包么? c# 对数据库的管理权限,怎么设计?比如管理员可以对数据进行添加修改... 在VB的数据库设计中,权限是什么意思? 请问Blog中 管理员 和 普通用户 的权限 在SQL 数据库中是如何设计... 神舟本显示屏暗下来后按键盘怎么不亮? 读安全工程专业的学生可以去哪些企事业单位或者是*的哪个部门呢? 纪梵希轻盈无痕明星四色散粉怎么样 我有个微信群,可是有人乱发信息。影响群里其他成员的情绪,我能把其_百... 纪梵希 轻盈无痕明星四色散粉 4*3g 怎么样 在微信群里有人乱发消息,是否可以向不良信息中心举报此人和微信群? 为什么有时间我看到微信群里的信息词语是乱的呢? 为别人,完了,我的东西而在微信群里乱发,信息? 开幕式解说词是什么? 谁帮我找些运动会的入场词?? 开运动会写的解说词