关于数据库权限管理的通用实现

数据库用户权限管理,是我们进行数据库编程时会遇到的又一个比较普遍的问题。比如:

A1A2A3用户,我们希望它只拥有所有表(T1T2T3T4)的查询权限;

B1B2用户,我们希望它拥有所有表的查询权限,但是只能对T1T3进行修改;

C1C2用户,我们希望它拥有所有表的查询权限,但是只能对T2T4进行修改;

D1用户,我们希望它拥有对所有表的查询和修改的权限。 

一般地,系统的用户很多,如果单独对每一个用户的权限进行维护,工作量是很大的。这时可以通过创建角色来解决问题。我们对系统所有可能的用户进行分类,比如上面的例子我们可以发现有4种类型的用户。然后根据这4种用户来创建角色:

P1:拥有对T1T2T3T4的查询权限;

P2:拥有对T1T3的修改权限;

P3:拥有对T2T4的修改权限。

然后,将角色赋给相关的用户,即可达到上面的要求:

 P1赋给A1A2A3

P1P2赋给B1B2

P1P3赋给C1C2

P1P2P3赋给D1

而且最重要的,如果某一类用户的权限发生变化,只需要变更相应角色的权限即可。

类似上面的问题,其实可以抽离出来形成一种通用的解决办法。据我所知,解决的办法可以有如下两种,不知道还有没有其他更好的办法:

1、创建可以独立于某系统的用户权限数据表,然后在具体的项目中需要时将这些表附加到项目数据库中。这种办法类似于VS2005中,可以通过“ASP.NET配置”对所有Web应用程序设置和编辑用户、角色和对站点的访问权限(VS2005会在SQL Server 数据库中添加aspnet打头的一些表)。

在创建的用户权限数据表中,设计权限、角色、用户3种实体,以及实体间的关系(如下图所示),然后编程实现权限、角色可以叠加的功能。这样所有权限管理的问题转化成对这几个表的操作。

关于数据库权限管理的通用实现

 

2、对于MS SQL ServerOracle等企业数据库,我们还可利用软件本身支持的角色、用户管理功能。这样不用像第一种办法那样需要向数据库中添加数据表,就可以直接实现用户权限管理。

Ø         将系统用户直接对应到系统数据库用户,将系统角色对应到系统数据库角色。通过数据库的权限管理来实现系统本身的权限管理。好处之一是我们不需要自己去编程实现角色权限可以相叠加的效果。

Ø         当某个用户登录到系统,意味着系统用该用户连接上了系统数据库,那么当该用户申请某操作时,也不需要去查询数据库来判断该用户是否合法。如果权限不够即会出现异常,指示该操作是不合法的。

Ø         系统在运行过程中,如果某些角色的权限发生了变更,其维护工作可交由DBA来完成。

你可能感兴趣的:(权限管理)