关于用户权限的数据库设计
数据库权限管理中的角色与用户设计
数据库权限管理中的角色与用户设计在数据库权限管理中,角色与用户设计起着至关重要的作用。
合理的角色与用户设计能够提高数据的安全性和管理效率,保护敏感信息的机密性和完整性。
本文将为您介绍数据库权限管理中的角色与用户设计,以帮助您更好地理解和应用这一方面的知识。
首先,让我们来了解什么是角色与用户设计。
在数据库中,角色是一组共享相同权限和访问权限的用户集合。
通过将一些公共权限分配给角色,可以简化用户权限管理,提高维护效率。
而用户则是具体的个体实体,可以通过被分配到特定的角色来获得相应的权限。
在角色与用户设计中,有三个关键的方面需要考虑:角色的划分、角色的权限设置和用户的分配。
首先,角色的划分。
在设计数据库角色时,应该基于业务需求和权限层次进行划分。
一般而言,可以将角色分为超级管理员、管理员和普通用户等不同级别的角色。
超级管理员拥有数据库的最高权限,可以对数据库进行全部操作,例如创建和删除数据库等。
管理员则可以负责数据库的管理和维护,包括备份和恢复数据库、用户和角色管理等。
而普通用户则是系统的最终用户,只能进行数据的查询和操作。
接下来,是角色的权限设置。
数据库的权限通常包括数据表的查看、修改、删除和增加等操作。
不同角色应该根据业务需求来确定相应的权限。
比如,在某个角色中,只允许查看数据表的内容,而不允许进行修改和删除操作。
这样,可以避免数据的误操作和不必要的风险。
此外,需要确保权限的细分粒度,以便更好地控制数据的访问和管理。
最后,是用户的分配。
用户的分配应该根据其职责和工作需要来确定。
每个用户可以被分配到一个或多个角色中,从而获得相应的权限。
一个用户可以同时属于多个角色,这样可以根据具体的业务需求来灵活分配权限。
对于某些特殊的操作,可以通过临时提升用户的权限来满足特定的任务需求。
除了以上三个关键方面,还有一些其他的注意事项需要考虑。
首先,应该定期审查和更新角色和权限的分配。
随着业务的发展和变化,角色和权限的设计也需要随之调整。
SqlServer设置用户只能查看并访问特定数据库
SqlServer设置用户只能查看并访问特定数据库
现需要限定特定的用户只能查看并访问特定的数据库,防止多个用户对数据库操作时一些误操作。
参考i6first的如何让用户只能访问特定的数据库(MSSQL)博文
1.新建登录用户
以管理员身份登陆数据库(权限最高的身份如sa),点击安全性->登录名,右键新建登录名,输入登录名和密码,取消强制实施密码策略。
2.将服务器角色设置为public
3.将public服务器角色的属性->取消查看所有数据库的权限
点击安全性->服务器角色->public,右键属性。
点击服务器后如下图取消查看任意数据库的权限
或者执行如下SQL:
REVOKE VIEW ANY DATABASE TO [public]
4.将待授权的数据库的db_owner指派给刚注册的新用户
在数据库中新建查询,输入下列sql语句。
完成对用户权限的设定,做到了新建用户只能查看和操作特定数据库(除系统数据库外)Use [WH_R]//WH_R为数据库名称
go
EXEC dbo.sp_changedbowner N'user'//user为刚新建的用户
•1
•2
•3。
基于Python-Flask的权限管理1:框架选择和数据库设计
基于Python-Flask的权限管理1:框架选择和数据库设计⼀、前⾔我们在做任何⼀款产品的时候,或多或少都会涉及到⽤户和权限的问题。
譬如,做企业类软件,不同部门、不同职位的⼈的权限是不同的;最近想⾃⼰写⼀个⽹站,⾸先就要解决最基础的权限和菜单问题这块,在⽹上也查找了相关知识,找了⼀些开源框架模板,发现"RBAC"式的权限管理不错,于是准备以此模型为基础,完成权限管理功能。
⼆、什么是RBAC模型RBAC(Role-Based Access Control)即:基于⾓⾊的权限控制。
通过⾓⾊关联⽤户,⾓⾊关联权限的⽅式间接赋予⽤户权限。
具体可以查看三、技术选择前端:基于VUE的开源后台管理模板,我⽤的是在此基础上的另⼀个开源项⽬,已经帮我们完成了基础的前端权限管理,在此基础上改就⾏。
ps:毕竟不是前端,有现成的就⽤现成的后端:python的flask框架数据库: mysql,redis四、数据库设计1.菜单信息表:存放菜单信息CREATE TABLE `t_menu` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',`menu_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单名称',`parent_id` int(11) NULL DEFAULT0 COMMENT '⽗菜单ID',`order_num` int(4) NULL DEFAULT0 COMMENT '显⽰顺序',`url` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT'#' COMMENT '请求地址',`menu_type` tinyint(4) NULL DEFAULT NULL COMMENT '菜单类型(1,⽬录 2,菜单 3,按钮)',`visible` int(1) NULL DEFAULT1 COMMENT '菜单状态(1显⽰ 2隐藏)',`perms` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限标识',`icon` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT'#' COMMENT '菜单图标',`is_frame` int(1) NULL DEFAULT2 COMMENT '是否外链',`create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT'' COMMENT '创建者',`created_at` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',`update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT'' COMMENT '更新者',`updated_at` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT'' COMMENT '备注',`route_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT'',`route_path` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT'',`route_cache` int(11) NULL DEFAULT0,`route_component` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT'',PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT =72CHARACTER SET= utf8 COLLATE = utf8_general_ci COMMENT ='菜单权限表' ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS =1;2.⾓⾊信息表:存放⾓⾊信息CREATE TABLE `t_role` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '⾓⾊ID',`role_name` VARCHAR(30) NOT NULL COMMENT '⾓⾊名称',`role_key` VARCHAR(100) NOT NULL COMMENT '⾓⾊权限字符串',`role_sort` INT(4) NOT NULL COMMENT '显⽰顺序',`data_scope` INT(1) NULL DEFAULT'1' COMMENT '数据范围(1:全部数据权限 2:⾃定数据权限)',`status` INT(1) NULL DEFAULT NULL COMMENT '⾓⾊状态(1正常 2停⽤)',`create_by` VARCHAR(64) NULL DEFAULT'' COMMENT '创建者',`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` VARCHAR(64) NULL DEFAULT'' COMMENT '更新者',`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`remark` VARCHAR(500) NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE)COMMENT='⾓⾊信息表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=17;3.⾓⾊和菜单关联表:存放⾓⾊和菜单关联信息CREATE TABLE `t_role_menu` (`role_id` INT(11) NOT NULL COMMENT '⾓⾊ID',`menu_id` INT(11) NOT NULL COMMENT '菜单ID',`id` INT(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`))COMMENT='⾓⾊和菜单关联表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=370;4.岗位信息表:存放岗位信息CREATE TABLE `t_post` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '岗位ID',`post_code` VARCHAR(64) NOT NULL COMMENT '岗位编码',`post_name` VARCHAR(50) NOT NULL COMMENT '岗位名称',`post_sort` INT(4) NOT NULL COMMENT '显⽰顺序',`status` INT(1) NOT NULL DEFAULT'1' COMMENT '状态(1正常 2停⽤)',`create_by` VARCHAR(64) NULL DEFAULT'' COMMENT '创建者',`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` VARCHAR(64) NULL DEFAULT'' COMMENT '更新者',`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`remark` VARCHAR(500) NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE)COMMENT='岗位信息表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=9;5.部门信息表:存放部门信息CREATE TABLE `t_dept` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '部门id',`parent_id` INT(11) NULL DEFAULT'0' COMMENT '⽗部门id',`dept_name` VARCHAR(30) NULL DEFAULT'' COMMENT '部门名称',`order_num` INT(4) NULL DEFAULT'0' COMMENT '显⽰顺序',`leader` VARCHAR(20) NULL DEFAULT NULL COMMENT '负责⼈',`phone` VARCHAR(11) NULL DEFAULT NULL COMMENT '联系电话',`email` VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',`status` INT(1) NULL DEFAULT'0' COMMENT '部门状态(1正常2停⽤)',`create_by` VARCHAR(64) NULL DEFAULT'' COMMENT '创建者',`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` VARCHAR(64) NULL DEFAULT'' COMMENT '更新者',`updated_at` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`remark` VARCHAR(500) NULL DEFAULT'' COMMENT '备注',PRIMARY KEY (`id`) USING BTREE)COMMENT='部门表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=12;6.⾓⾊和部门关联表:存放⾓⾊和部门关联信息CREATE TABLE `t_role_dept` (`role_id` INT(11) NOT NULL COMMENT '⾓⾊ID',`dept_id` INT(11) NOT NULL COMMENT '部门ID',`id` INT(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`))COMMENT='⾓⾊和部门关联表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=25;7.⽤户信息表:存放⽤户信息CREATE TABLE `t_user` (`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '⽤户ID',`nickname` VARCHAR(30) NULL DEFAULT NULL COMMENT '登录账号' COLLATE 'latin1_swedish_ci',`user_name` VARCHAR(30) NULL DEFAULT NULL COMMENT '⽤户昵称' COLLATE 'latin1_swedish_ci',`user_type` INT(1) NULL DEFAULT NULL COMMENT '⽤户类型(1系统⽤户',`email` VARCHAR(50) NULL DEFAULT NULL COMMENT '⽤户邮箱' COLLATE 'latin1_swedish_ci',`phone` VARCHAR(20) NULL DEFAULT NULL COMMENT '⼿机号' COLLATE 'latin1_swedish_ci',`phonenumber` VARCHAR(11) NULL DEFAULT NULL COMMENT '⼿机号码' COLLATE 'latin1_swedish_ci',`sex` INT(1) NULL DEFAULT NULL COMMENT '⽤户性别(1男 2⼥ 3未知)',`avatar` VARCHAR(100) NULL DEFAULT NULL COMMENT '头像路径' COLLATE 'latin1_swedish_ci',`password` VARCHAR(50) NULL DEFAULT NULL COMMENT '密码' COLLATE 'latin1_swedish_ci',`salt` VARCHAR(20) NULL DEFAULT NULL COMMENT '盐加密' COLLATE 'latin1_swedish_ci',`status` INT(1) NULL DEFAULT'1' COMMENT '帐号状态(1正常 2禁⽤',`dept_id` INT(11) NULL DEFAULT NULL,`del_flag` INT(1) NULL DEFAULT'1' COMMENT '删除标志(1代表存在 2代表删除)',`login_ip` VARCHAR(50) NULL DEFAULT NULL COMMENT '最后登陆IP' COLLATE 'latin1_swedish_ci',`login_date` TIMESTAMP NULL DEFAULT NULL COMMENT '最后登陆时间',`create_by` VARCHAR(64) NULL DEFAULT NULL COMMENT '创建者' COLLATE 'latin1_swedish_ci',`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` VARCHAR(64) NULL DEFAULT NULL COMMENT '更新者' COLLATE 'latin1_swedish_ci',`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted_at` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',`remark` VARCHAR(500) NULL DEFAULT NULL COMMENT '备注' COLLATE 'latin1_swedish_ci',PRIMARY KEY (`id`))COMMENT='⽤户信息表'COLLATE='utf32_general_ci'ENGINE=InnoDBAUTO_INCREMENT=11;8.⽤户与岗位关联表:存放⽤户与岗位关联信息CREATE TABLE `t_user_post` (`user_id` INT(11) NOT NULL COMMENT '⽤户ID',`post_id` INT(11) NOT NULL COMMENT '岗位ID',`id` INT(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`))COMMENT='⽤户与岗位关联表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=5;9.⽤户和⾓⾊关联表:存放⽤户和⾓⾊关联信息CREATE TABLE `t_user_role` (`user_id` INT(11) NOT NULL COMMENT '⽤户ID',`role_id` INT(11) NOT NULL COMMENT '⾓⾊ID',`id` INT(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`))COMMENT='⽤户和⾓⾊关联表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=18;10.字典类型表:存放字典类型CREATE TABLE `t_dict_type` (`id` INT(11) NOT NULL AUTO_INCREMENT,`dict_name` VARCHAR(100) NULL DEFAULT'' COMMENT '字典名称',`dict_type` VARCHAR(100) NULL DEFAULT'' COMMENT '字典类型',`dict_value_type` INT(11) NULL DEFAULT'0' COMMENT '标识',`status` INT(1) NULL DEFAULT'1' COMMENT '状态(1正常 2停⽤)',`create_by` VARCHAR(64) NULL DEFAULT'' COMMENT '创建者',`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` VARCHAR(64) NULL DEFAULT'' COMMENT '更新者',`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`remark` VARCHAR(500) NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`),UNIQUE INDEX `dict_type` (`dict_type`))COMMENT='字典类型表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=27;11.字典数据表:存放字典数据CREATE TABLE `t_dict_data` (`dict_id` INT(11) NOT NULL COMMENT 'ID',`id` INT(11) NOT NULL AUTO_INCREMENT,`dict_sort` INT(4) NULL DEFAULT'0' COMMENT '字典排序',`dict_label` VARCHAR(100) NULL DEFAULT'' COMMENT '字典标签',`dict_value` VARCHAR(100) NULL DEFAULT'' COMMENT '字典键值',`dict_number` INT(11) NULL DEFAULT'0' COMMENT '字典值',`dict_type` VARCHAR(100) NULL DEFAULT'' COMMENT '字典类型',`dict_value_type` INT(11) NULL DEFAULT'1' COMMENT 'dict_value_type',`css_class` VARCHAR(100) NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)',`list_class` VARCHAR(100) NULL DEFAULT NULL COMMENT '表格回显样式',`is_default` INT(1) NULL DEFAULT'1' COMMENT '是否默认(1是 0否)',`status` INT(1) NULL DEFAULT'1' COMMENT '状态(1正常 2停⽤)',`create_by` VARCHAR(64) NULL DEFAULT'' COMMENT '创建者',`created_at` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',`update_by` VARCHAR(64) NULL DEFAULT'' COMMENT '更新者',`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`remark` VARCHAR(500) NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE)COMMENT='字典数据表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=29;12.参数配置表:存放可变参数CREATE TABLE `t_configs` (`id` INT(5) NOT NULL AUTO_INCREMENT COMMENT '参数主键',`config_name` VARCHAR(100) NULL DEFAULT'' COMMENT '参数名称',`config_key` VARCHAR(100) NULL DEFAULT'' COMMENT '参数键名',`config_value` VARCHAR(100) NULL DEFAULT'' COMMENT '参数键值',`config_type` INT(1) NULL DEFAULT'1' COMMENT '系统内置(1是 2否)',`create_by` VARCHAR(11) NULL DEFAULT NULL COMMENT '创建者',`update_by` VARCHAR(11) NULL DEFAULT NULL COMMENT '更新着',`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`remark` VARCHAR(500) NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE)COMMENT='参数配置表'COLLATE='utf8_general_ci'ENGINE=InnoDBAUTO_INCREMENT=8;五、基础数据-- ------------------------------ Records of t_configs-- ----------------------------INSERT INTO `t_configs` VALUES ('1', '⽤户管理 - 账号初始密码', 'er.initPassword', '123456', '1', null, 'admin', '2020-03-22 14:01:59', '2020-03-22 14:38:28', null);-- ------------------------------ Records of t_dept-- ----------------------------INSERT INTO `t_dept` VALUES ('1', '0', '公司', '1', '狄云', '138********', 'gs@', '1', '', null, 'admin', '2020-03-18 23:10:41', '3333');INSERT INTO `t_dept` VALUES ('2', '1', '研发', '0', null, null, null, '1', '', null, '', '2020-03-18 22:29:17', '');INSERT INTO `t_dept` VALUES ('3', '2', '研发组1', '0', null, null, null, '1', '', null, '', '2020-03-18 22:29:16', '');INSERT INTO `t_dept` VALUES ('7', '0', '外包', '1', 'wb', '', '', '2', 'admin', '2020-03-19 21:10:05', 'admin', '2020-03-22 17:42:13', '');INSERT INTO `t_dept` VALUES ('8', '1', '运维', '1', '', '', '', '1', 'admin', '2020-03-22 18:58:57', null, null, '');INSERT INTO `t_dept` VALUES ('9', '8', '运维⼀组', '1', '', '', '', '1', 'admin', '2020-03-22 18:59:08', null, null, '');INSERT INTO `t_dept` VALUES ('10', '7', '外包⼀部', '1', '', '', '', '1', 'admin', '2020-03-22 18:59:17', null, null, '');INSERT INTO `t_dept` VALUES ('11', '7', '外包⼆部', '1', '', '', '', '1', 'admin', '2020-03-22 18:59:23', null, null, '');-- ------------------------------ Records of t_dict_data-- ----------------------------INSERT INTO `t_dict_data` VALUES ('1', '1', '1', '字符', '', '2', 'dict_value_type', '1', null, null, '1', '1', '', null, '', '2020-03-17 23:13:37', null);INSERT INTO `t_dict_data` VALUES ('1', '2', '2', '数字', '', '1', 'dict_value_type', '1', null, null, '1', '1', '', null, '', null, null);INSERT INTO `t_dict_data` VALUES ('3', '3', '1', '按钮', '', '2', 'menu_type', '1', null, null, '1', '1', '', null, '', null, null);INSERT INTO `t_dict_data` VALUES ('3', '4', '2', '菜单', '', '1', 'menu_type', '1', null, null, '1', '1', '', null, '', null, null);INSERT INTO `t_dict_data` VALUES ('5', '5', '1', '隐藏', '', '2', 'visible', '1', null, null, '1', '1', '', null, '', null, null);INSERT INTO `t_dict_data` VALUES ('5', '6', '2', '显⽰', '', '1', 'visible', '1', null, null, '1', '1', '', null, '', '2020-03-16 21:50:01', null);INSERT INTO `t_dict_data` VALUES ('4', '7', '1', '否', '', '2', 'is', '1', null, null, '1', '1', '', null, '', '2020-03-16 21:50:02', null);INSERT INTO `t_dict_data` VALUES ('4', '8', '2', '是', '', '1', 'is', '1', null, null, '1', '1', '', null, '', '2020-03-16 21:50:03', null);INSERT INTO `t_dict_data` VALUES ('7', '9', '1', '禁⽤', '', '2', 'status', '1', null, null, '1', '1', '', null, '', '2020-03-16 21:50:53', null);INSERT INTO `t_dict_data` VALUES ('7', '10', '2', '激活', '', '1', 'status', '1', null, null, '1', '1', '', null, '', '2020-03-16 21:51:21', null);INSERT INTO `t_dict_data` VALUES ('6', '17', '1', '男', '', '1', 'sex', '1', '', '', '1', '1', null, null, null, '2020-03-20 12:15:10', '');INSERT INTO `t_dict_data` VALUES ('6', '18', '1', '⼥', '', '2', 'sex', '1', '', '', '1', '1', null, null, null, '2020-03-20 12:15:12', '');INSERT INTO `t_dict_data` VALUES ('25', '23', '1', '全部', '', '1', 'data_scope', null, '', '', '1', '1', 'admin', null, null, '2020-03-20 12:14:42', '');INSERT INTO `t_dict_data` VALUES ('25', '24', '1', '⾃定义', '', '2', 'data_scope', null, '', '', '1', '1', 'admin', null, null, '2020-03-20 12:36:21', '');-- ------------------------------ Records of t_dict_type-- ----------------------------INSERT INTO `t_dict_type` VALUES ('1', '字典值类型', 'dict_value_type', '1', '1', '', null, '', null, null);INSERT INTO `t_dict_type` VALUES ('3', '菜单类型', 'menu_type', '1', '1', '', null, '', null, null);INSERT INTO `t_dict_type` VALUES ('4', '是否', 'is', '1', '1', '', null, '', null, null);INSERT INTO `t_dict_type` VALUES ('5', '显⽰状态', 'visible', '1', '1', '', null, '', null, null);INSERT INTO `t_dict_type` VALUES ('6', '性别', 'sex', '1', '1', '', null, '', null, null);INSERT INTO `t_dict_type` VALUES ('7', '状态', 'status', '1', '2', '', null, '', '2020-03-17 18:54:00', null);INSERT INTO `t_dict_type` VALUES ('25', '数据权限', 'data_scope', '1', '1', 'admin', '2020-03-20 01:03:55', null, '2020-03-20 01:03:55', '');-- ------------------------------ Records of t_menu-- ----------------------------INSERT INTO `t_menu` VALUES ('1', '系统管理', '0', '1', '#', '1', '1', null, 'cog', '2', '', null, '', null, '', '', '', '0', '');INSERT INTO `t_menu` VALUES ('2', '菜单管理', '1', '1', '/management/menu', '1', '1', '', 'navicon', '2', '', null, '', '2020-03-16 21:34:11', '', 'management-menu', 'management/menu', '2', 'management/menu');INSERT INTO `t_menu` VALUES ('3', '菜单查询', '2', '0', '#', '2', '1', 'system:menu:query', '#', '0', '', null, '', null, '', '', '', '0', '');INSERT INTO `t_menu` VALUES ('4', '菜单删除', '2', '0', '#', '2', '1', 'system:menu:remove', '#', '0', '', null, '', null, '', '', '', '0', '');INSERT INTO `t_menu` VALUES ('5', '菜单新增', '2', '0', '#', '2', '1', 'system:menu:add', '#', '0', '', null, '', null, '', '', '', '0', '');INSERT INTO `t_menu` VALUES ('6', '菜单修改', '2', '0', '#', '2', '1', 'system:menu:edit', '#', '0', '', null, '', '2020-03-15 15:45:28', '', '', '', '0', '');INSERT INTO `t_menu` VALUES ('22', '⽤户管理', '1', '2', '/management/user', '1', '1', '', 'user-circle', '2', '1', '2020-03-16 20:48:06', null, '2020-03-16 21:34:31', '', 'management-user', 'management/user', '2', 'management/user');INSERT INTO `t_menu` VALUES ('23', '⽤户查询', '22', '1', null, '2', '1', 'system:user:query', null, null, '1', '2020-03-16 20:49:26', null, '2020-03-16 20:55:31', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('24', '⽤户新增', '22', '1', null, '2', null, 'system:user:add', null, null, '1', '2020-03-16 21:03:36', null, '2020-03-16 21:03:36', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('25', '⽤户修改', '22', '1', null, '2', null, 'system:user:edit', null, null, '1', '2020-03-16 21:08:26', null, '2020-03-16 21:08:26', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('26', '⽤户删除', '22', '1', null, '2', null, 'system:user:remove', null, null, '1', '2020-03-16 21:08:39', null, '2020-03-16 21:08:39', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('27', '⾓⾊管理', '1', '3', '/management/role', '1', '1', '', 'users', '2', '1', '2020-03-16 21:10:32', null, '2020-03-16 21:34:42', '', 'management-role', 'management/role', '2', 'management/role');INSERT INTO `t_menu` VALUES ('28', '⾓⾊查询', '27', '1', null, '2', null, 'system:role:query', null, null, '1', '2020-03-16 21:10:58', null, '2020-03-16 21:10:58', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('29', '⾓⾊添加', '27', '1', null, '2', null, 'system:role:add', null, null, '1', '2020-03-16 21:11:27', null, '2020-03-16 21:11:27', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('30', '⾓⾊修改', '27', '1', null, '2', null, 'system:role:edit', null, null, '1', '2020-03-16 21:11:38', null, '2020-03-16 21:11:38', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('31', '⾓⾊删除', '27', '1', null, '2', null, 'system:role:remove', null, null, '1', '2020-03-16 21:11:51', null, '2020-03-16 21:11:51', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('32', '⾓⾊修改-数据权限', '27', '1', null, '2', null, 'system:role:editData', null, null, '1', '2020-03-16 21:13:04', null, '2020-03-16 21:13:04', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('33', '部门管理', '1', '4', '/management/dept', '1', '1', '', 'bank', '2', '1', '2020-03-16 21:14:52', null, '2020-03-16 21:33:49', '', 'management-dept', 'management/dept', '2', 'management/dept');INSERT INTO `t_menu` VALUES ('34', '部门查询', '33', '1', null, '2', null, 'system:dept:query', null, null, '1', '2020-03-16 21:15:21', null, '2020-03-16 21:15:21', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('35', '部门新增', '33', '1', null, '2', null, 'system:dept:add', null, null, '1', '2020-03-16 21:16:10', null, '2020-03-16 21:16:10', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('36', '部门修改', '33', '1', null, '2', null, 'system:dept:edit', null, null, '1', '2020-03-16 21:16:21', null, '2020-03-16 21:16:21', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('37', '部门删除', '33', '1', null, '2', null, 'system:dept:remove', null, null, '1', '2020-03-16 21:16:35', null, '2020-03-16 21:16:35', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('38', '岗位管理', '1', '5', '/management/post', '1', '1', '', 'briefcase', '2', '1', '2020-03-16 21:18:27', null, '2020-03-16 21:34:58', '', 'management-post', 'management/post', '2', 'management/post');INSERT INTO `t_menu` VALUES ('39', '岗位查询', '38', '1', null, '2', null, 'system:post:query', null, null, '1', '2020-03-16 21:18:50', null, '2020-03-16 21:18:50', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('40', '岗位增加', '38', '1', null, '2', null, 'system:post:add', null, null, '1', '2020-03-16 21:19:06', null, '2020-03-16 21:19:06', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('41', '岗位修改', '38', '1', null, '2', null, 'system:post:edit', null, null, '1', '2020-03-16 21:19:26', null, '2020-03-16 21:19:26', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('42', '岗位删除', '38', '1', null, '2', null, 'system:post:remove', null, null, '1', '2020-03-16 21:19:41', null, '2020-03-16 21:19:41', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('43', '字典管理', '1', '6', '/management/dict', '1', '1', '', 'book', '2', '1', '2020-03-16 21:20:33', null, '2020-03-16 21:35:11', '', 'management-dict', 'management/dict', '2', 'management/dict');INSERT INTO `t_menu` VALUES ('44', '字典查询', '43', '1', null, '2', null, 'system:dict:query', null, null, '1', '2020-03-16 21:21:20', null, '2020-03-16 21:21:20', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('45', '字典新增', '43', '1', null, '2', null, 'system:dict:add', null, null, '1', '2020-03-16 21:21:40', null, '2020-03-16 21:21:40', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('46', '字典修改', '43', '1', null, '2', null, 'system:dict:edit', null, null, '1', '2020-03-16 21:21:59', null, '2020-03-16 21:21:59', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('47', '字典删除', '43', '1', null, '2', null, 'system:dict:remove', null, null, '1', '2020-03-16 21:22:22', null, '2020-03-16 21:22:22', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('48', '字典详情', '43', '1', null, '2', null, 'system:dict:detail', null, null, '1', '2020-03-16 21:23:00', null, '2020-03-16 21:23:00', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('49', '字典数据', '1', '7', '/management/dict-data', '1', '2', '', '', null, '1', '2020-03-16 21:25:19', null, '2020-03-16 23:30:52', '', 'management-dict-data', 'management/dict-data', '2', 'management/dict-data'); INSERT INTO `t_menu` VALUES ('50', '字典数据查询', '49', '1', null, '2', null, 'system:dict-data:query', null, null, '1', '2020-03-16 21:25:45', null, '2020-03-16 21:25:45', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('51', '字典数据新增', '49', '1', null, '2', null, 'system:dict-data:add', null, null, '1', '2020-03-16 21:26:01', null, '2020-03-16 21:26:01', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('52', '字典数据修改', '49', '1', null, '2', null, 'system:dict-data:edit', null, null, '1', '2020-03-16 21:26:15', null, '2020-03-16 21:26:15', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('53', '字典数据删除', '49', '1', null, '2', null, 'system:dict-data:remove', null, null, '1', '2020-03-16 21:26:27', null, '2020-03-16 21:26:27', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('54', '参数设置', '1', '8', '/management/config', '1', '1', '', 'cubes', '2', '1', '2020-03-16 21:28:00', null, '2020-03-16 21:35:26', '', 'management-config', 'management/config', '1', 'management/config'); INSERT INTO `t_menu` VALUES ('55', '参数查询', '54', '1', null, '2', null, 'system:config:query', null, null, '1', '2020-03-16 21:28:23', null, '2020-03-16 21:28:23', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('56', '参数添加', '54', '1', null, '2', null, 'system:config:add', null, null, '1', '2020-03-16 21:28:33', null, '2020-03-16 21:28:33', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('57', '参数修改', '54', '1', null, '2', null, 'system:config:edit', null, null, '1', '2020-03-16 21:28:57', null, '2020-03-16 21:28:57', '', null, null, null, null);INSERT INTO `t_menu` VALUES ('58', '参数删除', '54', '1', null, '2', null, 'system:config:remove', null, null, '1', '2020-03-16 21:29:09', null, '2020-03-16 21:29:09', '', null, null, null, null);-- ------------------------------ Records of t_post-- ----------------------------INSERT INTO `t_post` VALUES ('5', 'dev-server', '后端开发⼯程师', '2', '1', 'admin', '2020-03-18 21:55:28', 'admin', '2020-03-18 22:02:06', '');INSERT INTO `t_post` VALUES ('6', 'dev-web', '前端开发⼯程师', '3', '1', 'admin', '2020-03-18 21:55:42', 'admin', '2020-03-18 22:02:12', '');INSERT INTO `t_post` VALUES ('7', 'pm', '产品经理', '4', '1', 'admin', '2020-03-18 21:55:56', 'admin', '2020-03-18 22:02:22', '');INSERT INTO `t_post` VALUES ('8', 'ui', 'UI 设计', '1', '1', 'admin', '2020-03-18 21:56:15', null, '2020-03-18 21:56:15', '');-- ------------------------------ Records of t_role-- ----------------------------INSERT INTO `t_role` VALUES ('1', '管理员', 'admin', '1', '1', '1', '', '2020-03-19 21:42:11', 'admin', '2020-03-21 19:20:44', null);INSERT INTO `t_role` VALUES ('16', '游客', 'guide', '1', '1', '1', 'admin', '2020-03-21 19:31:41', null, '2020-03-21 19:31:41', '');-- ------------------------------ Records of t_role_dept-- ----------------------------INSERT INTO `t_role_dept` VALUES ('1', '1', '1');-- ------------------------------ Records of t_role_menu-- ----------------------------INSERT INTO `t_role_menu` VALUES ('1', '1', '1');-- ------------------------------ Records of t_user-- ----------------------------INSERT INTO `t_user` VALUES ('1', 'admin', 'admin', null, 'admin@', '188********', null, '1', null, 'eb7c670dbd05eafe15b8fa94059b3069', null, '1', '1', '1', '127.0.0.1', '2020-03-21 17:25:27', null, null, 'admin', '2020-03-21 17:25:27 -- ------------------------------ Records of t_user_post-- ----------------------------INSERT INTO `t_user_post` VALUES ('1', '1', '1');-- ------------------------------ Records of t_user_role-- ----------------------------INSERT INTO `t_user_role` VALUES ('1', '1', '1');View Code。
基于C_RBAC模型的SAPISP系统权限管理数据库设计
基于C_RBAC模型的SAPISP系统权限管理数据库设计作者:郑建华朱蓉邱振国来源:《电脑知识与技术》2014年第34期摘要:为了实现罗定市特色农产品信息服务平台(SAPISP: Special Agriculture Product Information Service Platform)的权限管理,分析了RBAC96模型应用的局限性,随后提出C_RBAC模型,该模型通过建立权限的约束以及权限与用户的弱关联,实现了权限的精细化和动态化管理。
并针对SAPISP系统特点,该文设计了基于C_RBAC模型的权限管理数据库,该设计较好的满足了SAPISP权限管理需求。
关键词:权限管理;RBAC;C_RBAC;角色中图分类号:TP309.2 文献标识码:A 文章编号:1009-3044(2014)34-8101-03当今各行各业已经进入全面信息时代,农业信息化成为中国的重大国策[1]。
罗定市特色农产品信息服务平台(SAPISP: Special Agriculture Product Information Service Platform)是一个面向培训企业或者科研单位、农业技术专家、农产品生产企业、农户等多用户的集农产品生产、加工、流通、生产技术培训等多功能一体的综合性信息服务平台。
该平台的建设对于发展现代农业,优化农业产业结构,提升农业整体素质,创新农业经营模式,具有重大而积极的意义。
信息服务平台的关键要素之一是信息安全,而访问控制技术是实现信息安全的重要基础,即只有经过授权的用户才能对特定数据进行访问和使用,这样才能有效的实现数据的保密性、完整性和可用性[2]。
SAPISP实现4个服务子系统,包括科技培训服务子系统、特色农产品生产服务子系统、特色农产品流通服务子系统、特色农产品行业资讯子系统,其参与成员众多,不同人员的功能不一样,因此设计合理的权限控制模型,保证信息安全是实现该平台的重要前提。
基于角色的访问控制[3](RBAC:Role-Based Access Control)在上个世纪后期提出后得到广泛应用[4-6],其中最为经典的是RBAC96[3]模型。
权限系统设计五张表
权限系统设计五张表在进行权限系统设计时,一项十分重要的任务是设计适当的数据库表结构。
数据库表的设计决定了系统的灵活性、效率和数据的完整性。
本文将介绍一个权限系统的设计,包括五张表的设计和结构。
表一:用户表(User)该表用于存储系统中的用户信息。
它包含以下字段:1. 用户ID(UserID):用于唯一标识每个用户的ID。
2. 用户名(Username):用户的登录名。
3. 密码(Password):用户的密码,需要进行加密存储。
4. 姓名(Name):用户的真实姓名。
5. 邮箱(Email):用户的电子邮箱地址。
6. 手机号码(PhoneNumber):用户的手机号码。
表二:角色表(Role)角色表用于存储系统中的角色信息,该表包含以下字段:1. 角色ID(RoleID):用于唯一标识每个角色的ID。
2. 角色名称(RoleName):角色的名称,如管理员、普通用户等。
3. 角色描述(RoleDescription):对角色进行详细描述。
表三:权限表(Permission)权限表用于存储系统中的权限信息,该表包含以下字段:1. 权限ID(PermissionID):用于唯一标识每个权限的ID。
2. 权限名称(PermissionName):权限的名称,如查看、编辑等。
3. 权限描述(PermissionDescription):对权限进行详细描述。
表四:角色-权限关联表(RolePermission)角色-权限关联表用于记录角色和权限之间的关系,该表包含以下字段:1. 关联ID(ID):用于唯一标识每个角色-权限关联的ID。
2. 角色ID(RoleID):与角色表中的角色ID关联。
3. 权限ID(PermissionID):与权限表中的权限ID关联。
表五:用户-角色关联表(UserRole)用户-角色关联表用于记录用户和角色之间的关系,该表包含以下字段:1. 关联ID(ID):用于唯一标识每个用户-角色关联的ID。
如何设计数据库表实现完整的RBAC(基于角色权限控制)
如何设计数据库表实现完整的RBAC(基于角色权限控制)[转]2007-11-04 14:15RBAC(基于角色的权限控制)是一个老话题了,但是这两天我试图设计一套表结构实现完整的RBAC时,发现存在很多困难。
我说的完整的RBAC,是指支持角色树形结构和角色分组。
具体来说,应当包含如下权限控制需求:父级角色可以访问甚至是修改其子级的数据,包含直接子级直到最终子级。
角色可以访问其所在组的数据。
父级角色可以访问其所有子级(从直接子级到最终子级)所在组的数据。
而具体到我的系统中,还应当有如下需求。
兼容多种数据库产品。
只能用简单的表,视图,存储过程和函数等实现。
同时兼容单条数据处理和批量数据处理的需求。
且不论这些具体需求,RBAC的基本表应当如下四个:roleList表,记录所有的角色和角色组。
roleId: PK, 角色/组的ID,全局唯一,不区分角色和组。
roleName:角色/组的名称。
roleType: R - 角色,G - 组rolePermission表,记录每一个角色/组对每一个对象的权限。
permissionID: PK, 无特定意义。
role: 角色/组的ID。
object: 对象的ID。
permission: 权限标识,如读,写,删等。
roleRelationship表,记录角色/组之间的关系。
relationId: PK, 无特定意义。
superiorRole: 父角色/组的ID。
role:子角色,子组,成员角色,成员组的ID。
relationship: 关系标识,可在如下设置集中选取一个。
PG标识:P - 父子关系,G - 组/成员关系。
PPGG标识:在PG集上,再加三种:PP - 间接父级关系,GG - 组内组关系,CG - parentRole 是组,childRole的子角色或间接子角色是其成员,或其子组(含间接子组)的成员objectList表,记录所有的对象。
objectId: PK,对象ID,全局唯一。
用户权限管理数据库设计(RBAC)
⽤户权限管理数据库设计(RBAC) RBAC(Role-Based Access Control,基于⾓⾊的访问控制),就是⽤户通过⾓⾊与权限进⾏关联。
简单地说,⼀个⽤户拥有若⼲⾓⾊,每⼀个⾓⾊拥有若⼲权限。
这样,就构造成“⽤户-⾓⾊-权限”的授权模型。
在这种模型中,⽤户与⾓⾊之间,⾓⾊与权限之间,⼀般者是多对多的关系。
(如下图) ⾓⾊是什么?可以理解为⼀定数量的权限的集合,权限的载体。
例如:⼀个论坛系统,“超级管理员”、“版主”都是⾓⾊。
版主可管理版内的帖⼦、可管理版内的⽤户等,这些是权限。
要给某个⽤户授予这些权限,不需要直接将权限授予⽤户,可将“版主”这个⾓⾊赋予该⽤户。
当⽤户的数量⾮常⼤时,要给系统每个⽤户逐⼀授权(授⾓⾊),是件⾮常烦琐的事情。
这时,就需要给⽤户分组,每个⽤户组内有多个⽤户。
除了可给⽤户授权外,还可以给⽤户组授权。
这样⼀来,⽤户拥有的所有权限,就是⽤户个⼈拥有的权限与该⽤户所在⽤户组拥有的权限之和。
(下图为⽤户组、⽤户与⾓⾊三者的关联关系) 在应⽤系统中,权限表现成什么?对功能模块的操作,对上传⽂件的删改,菜单的访问,甚⾄页⾯上某个按钮、某个图⽚的可见性控制,都可属于权限的范畴。
有些权限设计,会把功能操作作为⼀类,⽽把⽂件、菜单、页⾯元素等作为另⼀类,这样构成“⽤户-⾓⾊-权限-资源”的授权模型。
⽽在做数据表建模时,可把功能操作和资源统⼀管理,也就是都直接与权限表进⾏关联,这样可能更具便捷性和易扩展性。
(见下图) 请留意权限表中有⼀列“权限类型”,我们根据它的取值来区分是哪⼀类权限,如“MENU”表⽰菜单的访问权限、“OPERATION”表⽰功能模块的操作权限、“FILE”表⽰⽂件的修改权限、“ELEMENT”表⽰页⾯元素的可见性控制等。
这样设计的好处有⼆。
其⼀,不需要区分哪些是权限操作,哪些是资源,(实际上,有时候也不好区分,如菜单,把它理解为资源呢还是功能模块权限呢?)。
数据库设计文档
数据库设计文档应用系统: ___________________ 供应商: _____________________.引言 (3)1.l编写目的 (3)1.2术语表 (3)1.3参考资料 (3)2.数据库环境说明 (3)3.数据库命名规范 (4)4.数据模型设计 (5)5.物理设计 (5)5.2表汇总 (5)5.3表XXX:XXX表(例如表S_USER:系统用户表) (5)6.视图设计 (6)6.2视图汇总 (6)6.3视图XXX:XXX信息(例如视图PROJEcT.MEMBER:项目成员关联信息) (6)7.存储过程设计 (6)8.触发器设计 (6)9.安全性设计 (7)9.2防止用户直接操作数据库 (7)9.3用户帐号密码加密 (7)9.4用户与权限 (7)9.5备份与容灾 (7)10.性能优化 (8)11.数据库管理与维护 (8)1.引言1.1编写目的本文档是XX系统实现的组成部分,编写数据库设计文档的目的是:明确数据库的表名、字段名等数据信息,用来指导后期的数据库脚本的开发,本文档遵循信息系统建设相关规范。
本文档的读者对象是需求人员、系统设计人员、开发人员、测试人员。
1.2术语表本系统涉及的重要术语说明如下:1.3参考资料在本系统数据库设计实现过程中涉及的参考资料明细如下:2.数据库环境说明本系统数据库环境信息如下:3.数据库命名规范本系统数据库命名规范约定如下。
A.数据库、表、字段等所有名称的可用字符范围为:A-乙a-z,0・9和一下划线,除此外不允许使用其它字符作为名称。
数据库及表名均不允许出现数字,字段名除非特殊情况不允许出现数字。
B.数据库、表、字段等所有名称使用英文单词或英文短语或相应缩写,禁止使用汉语拼音,且均使用单数名,例如:对存储客户信息的表命名为CUStOmer而不是CustomerSo名称应该清晰明了,能够准确表达事物的含义,遵循见名知意的原则。
建议:OraCIe表、字段等名称统一使用大写,单词间用_下划线分隔;SQLSerVer数据库、表等名称采用Pascal命名法,字段名称采用骆驼式命名法,大小写字母混排;MySQL数据库、表、字段等名称统一使用小写,单词间用一下划线分隔。
数据库数据权限控制的设计与实现方法
数据库数据权限控制的设计与实现方法数据库在现代信息系统中扮演着至关重要的角色,广泛应用于各个行业。
然而,随着数据量的不断增加和用户访问需求的复杂化,数据库数据权限控制变得尤为重要。
数据权限控制旨在保护数据库中敏感数据,限制用户的访问权限,确保数据安全性和保密性。
本文将探讨数据库数据权限控制的设计与实现方法。
首先,数据库数据权限控制的设计应该基于安全考虑。
在设计权限控制模型时,需要从角色角度出发,定义不同用户角色在数据库中的权限范围。
一个常见的方法是使用基于角色的访问控制(Role-Based Access Control, RBAC)模型。
该模型将用户和用户权限抽象为角色,并根据角色与权限的关系进行用户访问的控制。
在数据库设计阶段,应考虑到每个角色需要的访问权限,并为其分配合适的操作权限。
例如,可为管理员角色分配最高权限,允许其进行所有操作,而一般用户角色只能进行数据查询和部分编辑操作。
通过根据用户的角色来控制其对数据库中数据的访问权限,可以实现细粒度的权限控制。
其次,数据库数据权限控制的实现方法包括物理和逻辑两个层面。
在物理层面,可以通过数据库的用户管理功能来实现权限控制。
数据库提供了对用户和角色的管理接口,管理员可以通过创建、修改和删除用户及角色的权限来实现对数据库中数据的控制。
例如,在Oracle数据库中,可以使用GRANT和REVOKE语句来授权或撤销用户的访问权限。
在逻辑层面,可以通过编写触发器、存储过程或函数来实现数据权限控制。
这种方法可以在用户执行特定操作时触发,然后根据预先定义的规则来控制其对数据的访问。
例如,在一个银行系统中,可以通过触发器来限制某个角色只能访问自己名下的账户,而不能访问其他用户的账户信息。
此外,数据库数据权限控制还可以结合其他安全策略进行增强。
例如,可以使用加密技术对敏感数据进行加密存储,只有相应权限的用户才能解密和访问数据。
此外,可以使用审计功能追踪用户的操作,并定期进行安全审计和漏洞扫描,及时发现和修复安全问题。
数据库用户权限设计方案
数据库用户权限设计方案数据库用户权限设计是企业信息技术安全管理中的重要组成部分。
它的目的是保证数据库系统的正常运行和数据的有效保护。
本文将介绍数据库用户权限设计方案。
1. 根据角色划分权限针对不同岗位的用户,应给予不同的数据和操作权限。
例如,管理员可以进行所有数据库操作,而一般员工只能进行查询和部分操作。
这样可以控制用户操作的范围,避免误操作和数据泄露。
2. 分层授权分层授权原则是将权限分层次地赋予给不同层次的用户。
这种方式可以有效地控制用户访问、操作和使用数据库的层次,以保证数据安全。
3. 限制访问IP范围为保证数据库的安全性,可以将数据库访问IP限制在公司内部局域网中,可以通过设置防火墙等安全设备来实现IP访问限制。
4. 审计和监控数据库操作监控数据库操作是保护数据库安全的一项有效措施。
数据库管理员可以利用数据库审计系统,监测用户的操作行为,如查看、修改和删除数据。
想法比较好的数据库系统还提供了报警机制,如在操作某个表格时发送邮件给管理员。
5. 定期备份数据库定期备份数据库是保障数据库信息安全的重要手段,可防止数据因突发情况而造成的丢失,也便于数据的迁移和恢复。
为保证数据安全,可以建议定期进行完整备份和增量备份。
6. 密码的安全性数据库用户密码是保护数据库安全的一环。
用户在设定密码时,应注意复杂度要高,不能出现重复密码,也不能泄露密码。
总之,数据库用户权限设计的方式多种多样,但都是为了保障数据库信息安全而制定的。
企业在设计数据库用户权限时,应根据实际情况,合理配置用户权限和角色,并加强对数据库的监控和管理,确保数据库的安全和可靠。
管理信息系统的权限设计和C#.NET实现
管理信息系统的权限设计和C#.NET实现作者:李晓征来源:《中国教育信息化·高教职教》2009年第10期摘要:基于角色的访问控制是一种通常用于指派用户适当角色的模型,它针对企业或组织的策略,授权用户在管理信息系统(MIS)的使用权限。
本文描述用户(User)-角色(Role)-权限(Permission)在管理信息系统权限管理的要素,讲解关于基于角色的访问控制(RBAC)模型,并以C#.NET代码为实例,提出实现模型的方法。
关键词:RBAC 角色权限 C#.NET中图分类号:G203 文献标识码:B 文章编号:1673-8454(2009)19-0042-02一、RBAC基本概念和模型基于角色的访问控制(Role-Based Access Control,简称RBAC)已经成为解决管理信息系统的统一资源访问控制的有效方法,它替代了传统的自主型访问控制和强制访问控制方法。
在RBAC中,权限与角色,角色与用户之间通过联结的关系,从而产生用户的权限。
这极大地简化了系统的管理权限。
RBAC两大特征是:减小授权管理的复杂性,降低管理开销;灵活地支持企业或组织的安全策略,并对系统的变化有很大的伸缩性。
信息系统中的用户、角色、权限及系统资源的基本概念如下:(1)用户(User):与角色相关,用户要拥有对某种资源的权限,必须通过角色去关联。
(2)角色(Role):可以操作某些资源的权限集合。
通过给用户赋予不同的角色,对成员的多职能进行表达,提供约束用户不同权限范围的依据。
角色作为用户与权限的代理层,定义权限和用户的关系,所有的授权应该给予角色而不是直接给用户。
(3)权限(Permission):是指与资源相联系的权限。
权限是绑定在特定的资源实例上的,比如在内容管理系统(CMS),有“文章的发布权限”,这就表明,该权限是一个发布权限,而且是针对文章这种资源的一种发布权限。
权限包括系统定义权限和用户自定义权限。
数据权限的设计与实现
数据权限的设计与实现
# 一、数据权限概述
数据权限是指用户可以根据系统设定的授权、角色等权限访问到的数据的范围。
它的实现常见的有以下几种:
1) 前端控制:该种方式指在页面上根据用户的权限,控制用户所能访问到的范围,用户只能查看到访问的的内容。
2) 后台控制:该种方式需要在从数据库中查询出的数据上根据当前用户的权限作出进一步的限制,例如:在查询出来的数据表中根据当前用户拥有的权限作出过滤,只显示拥有权限的数据,其它数据被过滤掉,不显示给用户。
# 二、数据权限的具体实现
1)在系统中定义统一的权限控制机制:系统首先将用户的权限进行统一的定义,比如对每个权限可以创建一个唯一的编号,将用户和需要使用的权限进行绑定,然后拥有权限的用户可以使用相应的功能。
2)设计数据库存储用户权限:系统需要建立一个表存放用户权限,用户权限可以分为两部分,一部分是用户id,这个表不需要存放用户信息,另一部分则存
放用户拥有的权限,这样就可以根据用户id得到用户的权限情况了。
3)在前端界面控制:系统可以根据用户的权限,在前台界面上进行控制,利用条件判断的方法,显示或者不显示、启用或者禁用控件,从而限定用户只能访问、使用拥有权限的范围。
4)在后台数据库中进行控制:当用户进行数据操作时,系统会根据当前用户的权限,自动添加条件进行筛选,从而只能查询到拥有权限的数据,这也是为了保证数据安全性,避免用户查询未授权拥有的私有数据。
# 三、总结
数据权限是系统为了保证数据安全,防止未授权用户访问私有数据,而实施的一种设计。
实现数据访问权限的方法众多,比如前端界面控制、后端数据库控制等等。
只要能够有效的控制用户访问数据的权限,防止未授权用户访问私有数据,就可以了。
java用户角色权限数据库设计
实现业务系统中的用户权限管理B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。
因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。
下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。
需求陈述∙不同职责的人员,对于系统操作的权限应该是不同的。
优秀的业务系统,这是最基本的功能。
∙可以对“组”进行权限分配。
对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。
所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。
∙权限管理系统应该是可扩展的。
它应该可以加入到任何带有权限管理功能的系统中。
就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。
∙满足业务系统中的功能权限。
传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。
关于设计借助NoahWeb的动作编程理念,在设计阶段,系统设计人员无须考虑程序结构的设计,而是从程序流程以及数据库结构开始入手。
为了实现需求,数据库的设计可谓及其重要,无论是“组”操作的概念,还是整套权限管理系统的重用性,都在于数据库的设计。
我们先来分析一下数据库结构:首先,action表(以下简称为“权限表”),gorupmanager表(以下简称为“管理组表”),以及master表(以下简称为“人员表”),是三张实体表,它们依次记录着“权限”的信息,“管理组”的信息和“人员”的信息。
数据库设计用户权限管理
数据库设计用户权限管理用户权限管理是指系统管理员通过对用户的权限进行管理和控制,确保用户只能在其所拥有的权限范围内进行操作。
数据库作为数据存储和管理的核心,对用户权限的管理尤为重要。
下面将详细介绍数据库设计用户权限管理的方法和步骤。
1.用户表设计首先,需要设计一个用户表,用于存储用户的基本信息。
用户表的字段包括用户ID、用户名、密码、角色ID等。
其中,角色ID是指用户所属的角色ID,通过角色来确定用户的权限范围。
2.角色表设计角色表用于存储系统中的角色信息。
角色是对用户权限进行细分和管理的方式,通过给用户分配不同的角色来确定其权限范围。
角色表的字段包括角色ID、角色名称、角色描述等。
3.权限表设计权限表用于存储系统中的权限信息。
权限是指用户可以进行的操作或者访问的资源。
权限表的字段包括权限ID、权限名称、权限描述等。
4.用户角色表设计用户角色表用于存储用户和角色之间的关联关系。
用户角色表的字段包括用户ID和角色ID。
5.角色权限表设计角色权限表用于存储角色和权限之间的关联关系。
角色权限表的字段包括角色ID和权限ID。
通过以上几步的设计,可以实现用户权限管理的基本功能。
下面介绍一些常见的操作和控制方式。
1.用户登录验证当用户登录系统时,需要验证用户输入的用户名和密码是否匹配。
可以通过查询用户表来进行验证,如果匹配成功,则表示用户身份验证通过,可以继续进行后续操作。
如果验证失败,则表示用户名或密码错误。
2.用户角色分配管理员可以通过用户角色表来为用户分配角色。
当用户被分配一个角色后,其权限范围将被限制在该角色所具备的权限范围内。
3.角色权限分配管理员可以通过角色权限表来为角色分配权限。
角色所具备的权限将在角色权限表中进行配置。
当一个角色被分配多个权限时,用户拥有该角色的权限将是这些权限的并集。
4.权限控制在系统运行时,需要根据用户的权限对其进行权限控制。
这可以通过查询用户角色表和角色权限表来实现。
当用户尝试进行一个操作或访问一个资源时,系统会先查询用户所具备的角色,再查询角色所具备的权限,最后判断用户是否具备进行该操作的权限。
关于C#的权限管理设计方案
……
l 角色(Role):
RoleID RoleName RoleNote
01 系统管理员 监控系统维护管理员
02 监控人员 在线监控人员
第三步用户(User)使用Administrator分配给的权限去使用各个系统模块。利用存储过程GetUserRole(@UserID, @UserRoleID output),GetRolePermission(@RoleID,@Role-
-PermissinID output)获得用户对模块的使用权限。
1 1 01 用户“张三”被分配到角色“系统管理员”
2 2 02 用户“李四”被分配到角色“监控人员”
RoleName
角色名称
varchar(20)
RoleNote
角色信息描述
varchar(20)
2.2.3 用户-角色表(Static_User_Role)
Static_User_Role
Static_User字段名
0004 察看监控信息 允许察看监控对象
……
l 角色权限(Role_Permission):
RolePermissionID RoleID PermissionID RolePermissionNote
1 01 0001 角色“系统管理员”具有权限“增加监控”
权限管理设计方案
--董帅
1 设计思路
为了设计一套具有较强可扩展性的权限管理,需要建立用户、角色和权限等数据库表,并且建立之间的关系,具体实现如下。
1.1 用户
用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名、密码等,权限是被分离出去了的。用户(User)要拥有对某种资源的权限,必须通过角色(Role)去关联。
数据库访问权限管理策略的设计与实现
数据库访问权限管理策略的设计与实现随着数据的快速增长和各种类型的数据库被广泛使用,确保数据库的安全性成为一项重要的任务。
数据库访问权限管理策略的设计与实现是一项关键任务,它可以保护数据库免受未经授权的访问和滥用。
本文将介绍数据库访问权限管理策略的设计原则和实施步骤,并探讨其在现实世界中的应用。
设计数据库访问权限管理策略的原则是需要根据实际需求制定一个全面的访问控制机制。
以下是一些设计原则可以供参考:1. 最小权限原则:为了减少数据库被恶意使用的风险,每个用户应该只被分配必要的权限。
这意味着每个用户或者角色在访问数据库时应只能执行其工作职责所需的操作,并且不应拥有超出其职责范围的权限。
2. 分层次权限:根据用户的职位和级别,划分权限层次结构。
高级别用户应该拥有更多的权限,而低级别用户仅允许访问他们需要的数据和功能。
这样可以保持数据的机密性,防止敏感信息被未经授权的用户访问。
3. 审计追溯:建立完善的审计系统,对数据库的所有访问进行记录和审查。
这将有助于追踪潜在的安全漏洞,并对数据库的配置和权限作出调整。
4. 定期审查:定期审查数据库的访问权限,并与实际需要进行比较。
随着员工变动和组织结构的调整,权限也需要相应地更新和调整。
定期审查可以及时发现并纠正权限问题,避免潜在的安全风险。
基于上述设计原则,下面是实施数据库访问权限管理策略的步骤:1. 确定用户需求:与数据库相关的用户,如管理员、开发人员和普通用户,都有不同的需求和角色。
仔细了解每个用户的职责和数据库使用情况,制定适当的权限策略。
2. 创建角色和权限:基于用户需求,创建角色和权限,并为每个角色分配相应的权限。
角色可以根据不同的职位和级别进行设计,以确保最小权限原则的实施。
3. 用户认证和授权:建立用户认证的机制,确保用户只有在成功认证后才能访问数据库。
此外,进行用户授权,分配角色和相应的权限。
4. 实施审计系统:建立数据库审计系统,记录和审计所有的数据库访问活动。
关于用户权限的数据库设计
关于用户权限的数据库设计用户权限是指在计算机系统中,用户被授予的特定操作和访问资源的能力。
通过用户权限的控制,可以保护系统的安全性,确保用户只能进行其所需的操作,并限制对重要资源的访问。
在数据库设计中,用户权限的管理是非常重要的一部分,它涉及到用户身份验证、数据的访问控制以及账户的管理等方面。
下面将详细介绍用户权限的数据库设计,包括用户角色、权限表和访问控制机制等内容。
1.用户角色设计在设计数据库时,通常会为不同的用户分配不同的角色,每个角色都具有一组特定的权限。
用户角色可以根据不同的需求和组织架构来进行设计,如管理员、普通用户、数据管理员等。
用户角色的设计应该考虑到以下几个方面:1.1角色继承关系:数据库中可以设计角色之间的继承关系,即一个角色可以继承另一个角色的权限。
这样可以减少权限管理的复杂性,提高权限的分配效率。
1.2角色的权限分配:每个角色应该具有一组明确的权限。
这些权限可以在权限表中进行定义,并通过角色-权限的映射表来进行分配。
角色的权限可以包括以下几个方面:读取、写入、更新和删除数据的权限;创建和修改表结构的权限;执行特定的存储过程或函数的权限等。
1.3角色的管理:管理角色应该具有足够的权限来创建、删除和修改角色。
这样可以保证角色的合理管理和有效运行。
2.权限表设计权限表是用来存储系统中的所有权限信息的表结构。
它可以包括以下几个字段:2.1权限ID:唯一标识权限的ID。
2.2权限名称:对权限进行描述的名称。
2.3权限描述:对权限进行详细描述的字段。
2.4创建时间:记录权限创建的时间。
2.6是否可用:记录权限是否可用的标志。
权限表的设计应该考虑到权限的具体需求和可扩展性。
可以根据实际情况对权限进行分类,设计不同的权限类型。
3.访问控制机制设计在数据库中,访问控制是通过访问控制列表(Access Control List,ACL)来实现的。
ACL是一个用于存储访问权限信息的数据结构,它将用户和他们对资源的访问权限进行映射。
用户权限管理设计方案
用户权限管理设计方案用户认证管理设计方案1 设计思路为了设计一套具有较强可扩展性的用户认证管理,需要建立用户、角色和权限等数据库表,并且建立之间的关系,具体实现如下。
1.1 用户用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名、密码等,权限是被分离出去了的。
用户(User)要拥有对某种资源的权限,必须通过角色(Role)去关联。
用户通常具有以下属性:编号,在系统中唯一。
名称,在系统中唯一。
用户口令。
注释,描述用户或角色的信息。
1.2 角色角色是使用权限的基本单位,拥有一定数量的权限,通过角色赋予用户权限,通常具有以下属性:编号,在系统中唯一。
名称,在系统中唯一。
注释,描述角色信息1.3 权限权限指用户根据角色获得对程序某些功能的操作,例如对文件的读、写、修改和删除功能,通常具有以下属性:编号,在系统中唯一。
名称,在系统中唯一。
注释,描述权限信息1.4 用户与角色的关系一个用户(User)可以隶属于多个角色(Role),一个角色组也可拥有多个用户,用户角色就是用来描述他们之间隶属关系的对象。
用户(User)通过角色(Role)关联所拥有对某种资源的权限,例如用户(User):UserID UserName UserPwd1 张三xxxxxx2 李四xxxxxx……角色(Role):RoleID RoleName RoleNote01 系统管理员监控系统维护管理员02 监控人员在线监控人员03 调度人员调度工作人员04 一般工作人员工作人员……用户角色(User_Role):UserRoleID UserID RoleID UserRoleNote1 1 01 用户“张三”被分配到角色“系统管理员”2 2 02 用户“李四”被分配到角色“监控人员”3 2 03 用户“李四”被分配到角色“调度人员”……从该关系表可以看出,用户所拥有的特定资源可以通过用户角色来关联。
1.5 权限与角色的关系一个角色(Role)可以拥有多个权限(Permission),同样一个权限可分配给多个角色。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1设计思路为了设计一套具有较强可扩展性的用户认证管理,需要建立用户、角色和权限等数据库表,并且建立之间的关系,具体实现如下。
1.1用户用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名、密码等,权限是被分离出去了的。
用户(User)要拥有对某种资源的权限,必须通过角色(Role)去关联。
用户通常具有以下属性:编号,在系统中唯一。
ü名称,在系统中唯一。
ü用户口令。
ü注释,描述用户或角色的信息。
1.2角色角色是使用权限的基本单位,拥有一定数量的权限,通过角色赋予用户权限,通常具有以下属性:ü编号,在系统中唯一。
ü名称,在系统中唯一。
ü注释,描述角色信息1.3权限权限指用户根据角色获得对程序某些功能的操作,例如对文件的读、写、修改和删除功能,通常具有以下属性:ü编号,在系统中唯一。
ü名称,在系统中唯一。
ü注释,描述权限信息1.4用户与角色的关系一个用户(User)可以隶属于多个角色(Role),一个角色组也可拥有多个用户,用户角色就是用来描述他们之间隶属关系的对象。
用户(User)通过角色(Role)关联所拥有对某种资源的权限,例如l用户(User):UserID UserName UserPwd1张三xxxxxx2李四xxxxxx……l角色(Role):RoleID RoleName RoleNote01系统管理员监控系统维护管理员02监控人员在线监控人员03调度人员调度工作人员04一般工作人员工作人员……从该关系表可以看出,用户所拥有的特定资源可以通过用户角色来关联。
1.5权限与角色的关系一个角色(Role)可以拥有多个权限(Permission),同样一个权限可分配给多个角色。
例如:l角色(Role):RoleID RoleName RoleNote01系统管理员监控系统维护管理员02监控人员在线监控人员03调度人员调度工作人员04一般工作人员工作人员……l权限(Permission):PermissionID PermissionName PermissionNote0001增加监控允许增加监控对象0002修改监控允许修改监控对象0003删除监控允许删除监控对象0004察看监控信息允许察看监控对象……l角色权限(Role_Permission):RolePermissionID RoleID PermissionID RolePermissionNote1010001角色“系统管理员”具有权限“增加监控”2010002角色“系统管理员”具有权限“修改监控”3010003角色“系统管理员”具有权限“删除监控”4010004角色“系统管理员”具有权限“察看监控”5020001角色“监控人员”具有权限“增加监控”6020004角色“监控人员”具有权限“察看监控”……由以上例子中的角色权限关系可以看出,角色权限可以建立角色和权限之间的对应关系。
1.6建立用户权限用户权限系统的核心由以下三部分构成:创造权限、分配权限和使用权限。
第一步由Creator创造权限(Permission),Creator在设计和实现系统时会划分。
利用存储过程CreatePermissionInfo(@PermissionName,@PermissionNote)创建权限信息,指定系统模块具有哪些权限。
第二步由系统管理员(Administrator)创建用户和角色,并且指定用户角色(User-Role)和角色权限(Role-Permission)的关联关系。
1)具有创建用户、修改用户和删除用户的功能:Administratorl存储过程CreateUserInfo(@UserName,@UserPwd)创建用户信息;l存储过程ModifyUserInfo(@UserName,@UserPwd)修改用户信息;l存储过程DeleteUserInfo(@UserID)删除用户信息;2)具有创建角色和删除角色的功能:Administratorl存储过程CreateRoleInfo(@RoleName,@RoleNote)创建角色信息;l存储过程DeleteRoleInfo(@RoleID)删除角色信息;3)Administrator具有建立用户和角色、角色和权限的关联关系功能:l存储过程GrantUserRole(@UserID,@RoleID,@UserRoleNote)建立用户和角色的关联关系;l存储过程DeleteUserRole(@UserRoleID)删除用户和角色的关联关系;l存储过程GrantRolePermission(@RoleID,@PermissionID,@RolePermissionNote)建立角色和权限的关联关系;l存储过程DeleteRolePermission(@RolePermissionID)删除角色和权限的关联关系;第三步用户(User)使用Administrator分配给的权限去使用各个系统模块。
利用存储过程GetUserRole(@UserID,@UserRoleID output),GetRolePermission(@RoleID,@Role- -PermissinID output)获得用户对模块的使用权限。
1.7用户认证实现当用户通过验证后,由系统自动生成一个128位的TicketID保存到用户数据库表中,建立存储过程Login(@UserID,@UserPwd,@TicketID output)进行用户认证,认证通过得到一个TicketID,否则TicketID为null。
其流程图如下:图1Login流程图得到TicketID后,客户端在调用服务端方法时传递TicketID,通过存储过程JudgeTicketPermission(@TicketID,@PermissionID)判断TicketID对应的用户所具有的权限,并根据其权限进行方法调用。
当用户退出系统时,建立存储过程Logout(@UserID)来退出系统。
当用户异常退出系统时,根据最后的登陆时间(LastSignTime)确定用户的TickeID,建立存储过程ExceptionLogout (@UserID,@LastSignTime)处理用户的异常退出。
图2Logout流程图WebService可以采用SoapHeader中写入TicketID来使得TicketID从客户端传递给服务端。
.Net Remoting可以采用CallContext类来实现TicketID从客户端传递给服务端。
2数据库设计2.1数据库表图3数据库关系图2.2数据库表说明2.2.1用户表(Static_User)Static_User Static_User字段名详细解释类型备注UserID路线编号varchar(20) PKUserName用户名称varchar(20)UserPwd用户密码varchar(20)LastSignTime最后登陆时间datatimeSignState用户登陆状态标记intTickeID验证票记录编号varchar(128)2.2.2角色表(Static_Role)Static_Role Static_User字段名详细解释类型备注RoleID角色编号varchar(20)PKRoleName角色名称varchar(20)RoleNote角色信息描述varchar(20)2.2.3用户-角色表(Static_User_Role)Static_User_Role Static_User字段名详细解释类型备注UserRoleID用户角色编号varchar(20)PKUserID用户编号varchar(20)FKRoleID角色编号varchar(20)FKUserRoleNote用户角色信息描述varchar(20)2.2.4权限表(Static_Permission)Static_Permission Static_User字段名详细解释类型备注PermissionID编号varchar(20)PKPermissionName权限名称varchar(20)PermissionNote全息信息描述varchar(20)2.2.5角色-权限表(Static_Role_Permission)Static_Role_Permission Static_User字段名详细解释类型备注RolePermissionID角色权限编号varchar(20)PKRoleID角色编号varchar(20)FKPermissionID权限编号varchar(20)FKRolePermissionNote角色权限信息描述varchar(20)用“位”来存储、修改用户权限的方法以前我用记录方式,如A用户有3个模块权限,则A有三条记录看到别人的程序里有这种方法,感觉不错,给大家看看有没有优点可取。
用户权限用一个int字段表示,可以放32位,如果有第1,3,4模块的权限则,值为148=13____________________userId_____userQx___A|13_________|___________增加权限具体实现如增加第四个模块的权限,4的二进制值8update qxUser set userQx=userQx|8where userId='A'删除第四个模块的权限update qxUser set userQx=userQx&~8where userId='A'如果删除第四个模块,则不加条件就可以了update qxUser set userQx=userQx&~8以上在SqlServer2000企业版通过。
欢迎大家讨论,有更好的方法大家共享呀~~~在Java里34&2!=0就行了。
通过二,三两步的理解,相信这篇文章就不会生涩了!~首先上文权限设计拙见(1)中只是想记录下自己权限设计上的一点看法,以及将自己日常最常用的权限解决方案记录下来以供日后回顾,没想到有朋友关注此类的设计,那就只能先把代码拿出来献丑了,抛砖引玉,大家共同探讨学习接着上文来说,上文所讨论的权限设计是一条思路,但既然是web应用,少不了数据库的支持,本文我们来讨论一下数据库的设计。
(以下想法及思路仅仅代表本人拙见)说到权限的数据库设计,必先理清权限中几种实体及其关系,此部分想必有过设计权限经验的同仁都知道怎么设计了,网上摆渡一下也是一裤衩子一裤衩子的,我们就在最平凡直观的数据库关系的基础上来建立权限。
下面是我的几个表(所有的表都带有一个pk_id,作为表的自动生成的唯一主键):用户表(T_UserInfo):1/*==============================================================*/2/*Table:T_UserInfo*/3/*==============================================================*/4create table T_UserInfo5(6pk_id NUMBER not null,7name VARCHAR2(20),8sex BOOLEAN,9age int,10emp_num NUMBER,11polity int,12unit VARCHAR2(50),13department VARCHAR2(20),14specialty int,15position VARCHAR2(10),16offtel VARCHAR2(20),17famtel VARCHAR2(20),18post_state VARCHAR2(10),19remark VARCHAR2(100),20constraint PK_T_USERINFO primary key(pk_id)21);实战经验:用户表就不多说了,都是一些常用字段,年龄、电话、职位等,建议大家建立一个通用一些,字段多一些的一个用户表,便于以后扩展,以后如果有特殊需求,不用扩这个基本表,可以通过主外键关系来新建一个表,用于扩充字段角色表(T_RoleInfo):1/*==============================================================*/2/*Table:T_RoleInfo*/3/*==============================================================*/4create table T_RoleInfo5(6pk_id number not null,7role_name VARCHAR2(20),8role_desc VARCHAR2(100),9parent_role_id NUMBER,10constraint PK_T_ROLEINFO primary key(pk_id)11);角色表中需要说明的就一个parent_role_id父角色id,此字段用来扩展角色的继承关系。