一个实现RBAC的SQL脚本(二)

原本我想实现用RBAC做一个通用的用户/角色/权限管理组件,在RBAC中可以实现权限的有无,但不能解决权限的范围,而在解决权限

范围的问题,我在RBAC中添加了一些参数字段,试图用这些东西来解决范围问题。在设想了几个应用场景之后,发现我的想法事错误

的,在对相同类型的资源实现不同的权限管理(如,论坛的版主等等)不是RBAC的长处,这是ACL的用武之地。补充一句用RBAC也可

以实现,你用一下JForum,看一下它的权限管理,对比一下,你就知道为什么大多数的论坛都没有采用RBAC了。

 

实现一个通用的RBAC组件或许是可行的,但可能会付出很大的代价(开发的难度和运行时的效率)。也许随着我对更多系统架构和权

限的研究,我会改变我的看法。

 

作为一个使用主义的程序员,我重新修改了RBAC的数据库脚本,该脚本仅仅实现了用户管理和角色管理。这样在系统中,可以根据需

要组合使用RBACACL了。(RBAC还是很好用的哦)。该脚本也没有把permission加入在内。这样主系统有更大的权利来决定权限的

形式了。这个脚本事MSMemberShip的简化。也是在参考了MSAsp.net Forums论坛系统后,才决定简化到如此的地步。

 

本脚本也没有把权限的继承和互斥纳入其中。最为使用主义的程序员,我现在还没有足够的理由来说服我应该是以何种形式把他们加

入其中(本脚本的前一版本包含他们: http://blog.csdn.net/enjoyo/archive/ 2007/07/17 /1694580.aspx)。

 

 

/**********************************************************************/

/* Membership SQL For Mysql                                           */

/*                                                                    */

/* Installs the tables and initialize the membership data             */

/* supporting the Java Project and Hibernate                          */

/*                                                                    */

/* AuthorKevin Yin                                                      */

/* http://blog.csdn.net/enjoyo/                                       */

/* 欢迎对此脚本提出建议,也欢迎使用本脚本构建您的系统,               */

/* 但本人不对你的系统进行任何明示的或暗示的担保                       */

/* 转载请保留此声名                                                   */

/**********************************************************************/

 

/*角色表*/

CREATE TABLE `mbs_roles_t` (

       `nRoleID`              INT NOT NULL

                            AUTO_INCREMENT PRIMARY KEY ,       /*角色ID*/

       `szRoleName`               VARCHAR( 128 ) NOT NULL ,    /*角色名*/

       `szLoRoleName`           VARCHAR( 128 ) NOT NULL ,    /*角色名(小写)*/

       `bIsSysDef`          INT NOT NULL DEFAULT '0',    /*是系统角色(1)

                                                        还是用户添加的角色(0)*/   

       `bIsLockedOut`            int not null,                   /*是否被锁定 0 1锁定*/

       `szDescription`      VARCHAR( 255 ) NOT NULL ,    /*角色描述*/

       UNIQUE ( `szLoRoleName` )

) ENGINE = MYISAM ;

 

/*用户表*/

CREATE TABLE `mbs_users_t` (

       `nUserID`             INT NOT NULL

                            AUTO_INCREMENT PRIMARY KEY ,       /*用户ID*/

       `szUserName`               VARCHAR( 128 ) NOT NULL ,    /*用户名*/

       `szLoUserName`           VARCHAR( 128 ) NOT NULL ,    /*用户名(小写)*/

       `szNickName`              VARCHAR( 128 ) NOT NULL ,    /*用户昵称*/

       `bIsAnonymous`           int not null,                   /*是否是匿名用户 0 不是 1 */

       `szPassword`               varchar(128) not null,           /*Password ,plaintext, hashed,

                                                        or encrypted; base-64-encoded

                                                        if hashed or encrypted*/

       `szPasswordFormat`     int not null,                  /*密码的加密方式

                                                        0=Plaintext, 1=Hashed, 2=Encrypted*/

       `szPasswordSalt`   varchar(128) not null,          /*Randomly generated 128-bit value

                                                        used to salt password hashes; stored in

                                                        base-64-encoded form*/

       `szEMail`              varchar(128) not null,           /*用户EMail*/

       `szLoEMail`           varchar(128) not null,           /*用户EMail(小写)*/

       `szMobilePIN`              varchar(16) null,           /*用户手机号*/

       `bIsApproved`              int not null,                   /*审核 0 未审核通过,1审核通过*/

       `bIsLockedOut`            int not null,                   /*是否被锁定 0 1锁定*/

       `dtCreate`              datetime not null,           /*帐户创建时间*/

       `dtLastLogin`         datetime not null,           /*最后一次登录的时间*/

       `nFailedPwdCount`       int not null default 0,             /*输入密码错误的次数*/

       `nFailedPQACount` int not null default 0,             /*密码问题错误次数*/

       `nLoginTimes`              int not null default 0,             /*登录次数*/               

       UNIQUE ( `szLoUserName`, `szLoEMail` )

) ENGINE = MYISAM ;

 

/*用户配置表*/

CREATE TABLE `mbs_userprofile_t` (

       `nUserID`             INT NOT NULL,                 /*用户ID*/

       `szProfileKey`        VARCHAR( 128 ) NOT NULL ,    /*用户配置项键值*/

       `szProfileValue`      VARCHAR( 255 ) NOT NULL ,    /*用户配置项属性值*/

       PRIMARY key(`nUserID`,`szProfileKey`)    

) ENGINE = MYISAM ;

 

 

/*角色与权限对应表*/

CREATE TABLE `mbs_user2role_t` (

       `nRoleID`              INT NOT NULL ,                /*角色ID*/

       `nUserID`             INT NOT NULL ,                /*权限值*/    

       PRIMARY KEY ( `nRoleID` , `nUserID` )

) ENGINE = MYISAM ;

 

/*插入系统预定义用户角色*/

INSERT INTO `mbs_roles_t` (`nRoleID`, `szRoleName`, `szLoRoleName`, `bIsSysDef`, `bIsLockedOut`,

        `szDescription`) VALUES

(1, 'Administrators', 'administrators', 1, 0, '管理员用户组,管理员对系统有不受限制的完全访问权'),

(2, 'Registered Users', 'registered users', 1, 0, '注册用户组,可以执行系统中属于会员的权限'),

(3, 'Guests', 'guests', 1, 1, '来宾用户组,按默认值,来宾跟用户组的成员有同等访问权,但来宾帐户的限制更多'),

(4, 'Anonymous', 'anonymous', 1, 0, '匿名用户组,比来宾用户的限制更多'),

(5, 'Denial Users', 'denial users', 1, 0, '黑名单用户组,系统将拒绝此用户组中的用户的任何操作,此用户组的优先级最高');

 

/*插入超级用户*/

INSERT INTO `mbs_users_t` ( `nUserID`, `szUserName`, `szLoUserName`, `szNickName`, `bIsAnonymous`,

 `szPassword`, `szPasswordFormat`, `szPasswordSalt`, `szEMail`, `szLoEMail`, `szMobilePIN`,

 `bIsApproved`, `bIsLockedOut`,  `dtCreate`, `dtLastLogin`, `nFailedPwdCount`, `nFailedPQACount`,

 `nLoginTimes` ) VALUES(1, 'Admin', 'admin', 'admin', 0, '123456', 0, '', 'admin@localhost.com',

 'admin@localhost.com', '',1,0,now(),now(),0,0,0);

 

INSERT INTO `mbs_userprofile_t` (`nUserID`, `szProfileKey`, `szProfileValue`) VALUES

(1,'real name', 'admin'),

(1,'msn', 'admin@localhost.com'),

(1,'password question', 'admin'),

(1,'password answer', 'admin'),

(1,'last password change date', now()),

(1,'last lock out date', now()),

(1,'comment', '');

 

INSERT INTO `mbs_user2role_t` (`nRoleID`, `nUserID`) VALUES(1,1);

 

该脚本在Mysql 5.0上调试通过。欢迎大家讨论,也欢迎有建设型意见的板砖。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值