`

数据库权限设计学习笔记

阅读更多

数据库权限设计


用户需求
用有用户/角色可以动态分配
所有系统菜单的权限
所有权限基于角色来进行划分
用户可拥有多个解色
系统菜单可以动态修改


uml建表,导出sql语句
/*==============================================================*/
/* DBMS name: MySQL 5.0 */
/* Created on: 2012-11-7 19:20:19 */
/*==============================================================*/




drop table if exists t_menu_privilege;


drop table if exists t_privilege;


drop table if exists t_role;


drop table if exists t_sys_menu;


drop table if exists t_user;


drop table if exists t_user_role;


/*==============================================================*/
/* Table: t_menu_privilege */
/*==============================================================*/
create table t_menu_privilege
(
pkid numeric not null,
roleid varchar(16),
menuid numeric(16),
userid varchar(16),
privliegeid char(3),
primary key (pkid)
);


/*==============================================================*/
/* Table: t_privilege */
/*==============================================================*/
create table t_privilege
(
privliegeid char(3) not null,
privilegetype varchar(8),
primary key (privliegeid)
);


/*==============================================================*/
/* Table: t_role */
/*==============================================================*/
create table t_role
(
roleid varchar(16) not null,
roledescr varchar(32),
primary key (roleid)
);


/*==============================================================*/
/* Table: t_sys_menu */
/*==============================================================*/
create table t_sys_menu
(
menuid numeric(16) not null,
menudescr varchar(32),
menuurl varchar(255),
menupid varchar(16),
primary key (menuid)
);


/*==============================================================*/
/* Table: t_user */
/*==============================================================*/
create table t_user
(
userid varchar(16) not null,
password char(8),
username varchar(12),
primary key (userid)
);


/*==============================================================*/
/* Table: t_user_role */
/*==============================================================*/
create table t_user_role
(
userid varchar(16) not null,
roleid varchar(16) not null,
primary key (userid, roleid)
);


alter table t_menu_privilege add constraint FK_fk_menu_to_priv foreign key


(menuid)
references t_sys_menu (menuid) on delete restrict on update


restrict;


alter table t_menu_privilege add constraint FK_fk_privilege_typ_to_priv


foreign key (privliegeid)
references t_privilege (privliegeid) on delete restrict on update


restrict;


alter table t_menu_privilege add constraint FK_fk_role_to_priv foreign key


(userid, roleid)
references t_user_role (userid, roleid) on delete restrict on update


restrict;


alter table t_user_role add constraint FK_fk_role_id foreign key (roleid)
references t_role (roleid) on delete restrict on update restrict;


alter table t_user_role add constraint FK_fk_user_id foreign key (userid)
references t_user (userid) on delete restrict on update restrict;




添加表数据


/*插入数据*/
INSERT INTO Privilege_sys.t_user (userid,PASSWORD,username) VALUES


(1,"123","yuezhenhua");
INSERT INTO Privilege_sys.t_user (userid,PASSWORD,username) VALUES


(2,"123","zhansan");
INSERT INTO Privilege_sys.t_user (userid,PASSWORD,username) VALUES


(3,"123","lisi");
INSERT INTO Privilege_sys.t_user (userid,PASSWORD,username) VALUES


(4,"123","wangwu");
INSERT INTO Privilege_sys.t_user (userid,PASSWORD,username) VALUES


(5,"123","zhaoliu");
INSERT INTO Privilege_sys.t_user (userid,PASSWORD,username) VALUES


(6,"123","qianqi");
INSERT INTO Privilege_sys.t_user (userid,PASSWORD,username) VALUES


(7,"123","sunba");
INSERT INTO Privilege_sys.t_user (userid,PASSWORD,username) VALUES


(8,"123","zhouba");


INSERT INTO Privilege_sys.t_role (roleid,roledescr) VALUES("user","


普通用户");
INSERT INTO Privilege_sys.t_role (roleid,roledescr) VALUES


("manager","部门老总");
INSERT INTO Privilege_sys.t_role (roleid,roledescr) VALUES


("gmanager","老总");
INSERT INTO Privilege_sys.t_role (roleid,roledescr) VALUES


("admin","it管理员");




INSERT INTO Privilege_sys.t_user_role (userid,roleid) VALUES


("1","admin");
INSERT INTO Privilege_sys.t_user_role (userid,roleid) VALUES


("2","gmanager");
INSERT INTO Privilege_sys.t_user_role (userid,roleid) VALUES


("3","manager");
INSERT INTO Privilege_sys.t_user_role (userid,roleid) VALUES


("4","user");
INSERT INTO Privilege_sys.t_user_role (userid,roleid) VALUES


("5","user");
INSERT INTO Privilege_sys.t_user_role (userid,roleid) VALUES


("6","user");
INSERT INTO Privilege_sys.t_user_role (userid,roleid) VALUES


("7","user");
INSERT INTO Privilege_sys.t_user_role (userid,roleid) VALUES


("8","user");


INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("101","报表查询","aaaa.do","0");




INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("101","报表查询","","0");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("102","月报","a1.do","101");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("103","季报","a2.do","101");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("104","年报","a3.do","101");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("105","系统管理","","0");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("106","用户管理","","105");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("107","新增用户","adduser.do","106");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("108","删除用户","deluser.do","106");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("109","角色管理","","105");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("110","新增角色","addrole.do","109");
INSERT INTO Privilege_sys.t_sys_menu (menuid,menudescr,menuurl,menupid)


VALUES ("111","删除角色","delrole.do","109");






INSERT INTO t_privilege (privliegeid,privilegetype) VALUES ('101',"增加");
INSERT INTO t_privilege (privliegeid,privilegetype) VALUES ('102',"删除");
INSERT INTO t_privilege (privliegeid,privilegetype) VALUES ('103',"修改");
INSERT INTO t_privilege (privliegeid,privilegetype) VALUES ('104',"查询");
INSERT INTO t_privilege (privliegeid,privilegetype) VALUES ('105',"打印");
INSERT INTO t_privilege (privliegeid,privilegetype) VALUES ('106',"报表");




INSERT INTO t_menu_privilege VALUES ('1','admin','105','1','101');
INSERT INTO t_menu_privilege VALUES ('2','admin','105','1','102');
INSERT INTO t_menu_privilege VALUES ('3','admin','105','1','103');
INSERT INTO t_menu_privilege VALUES ('4','admin','105','1','104');
INSERT INTO t_menu_privilege VALUES ('5','admin','105','1','105');
INSERT INTO t_menu_privilege VALUES ('6','admin','105','1','106');


INSERT INTO t_menu_privilege VALUES ('7','admin','106','1','101');
INSERT INTO t_menu_privilege VALUES ('8','admin','106','1','102');
INSERT INTO t_menu_privilege VALUES ('9','admin','106','1','103');
INSERT INTO t_menu_privilege VALUES ('10','admin','106','1','104');
INSERT INTO t_menu_privilege VALUES ('11','admin','106','1','105');
INSERT INTO t_menu_privilege VALUES ('12','admin','106','1','106');

INSERT INTO t_menu_privilege VALUES ('13','admin','107','1','101');
INSERT INTO t_menu_privilege VALUES ('14','admin','107','1','102');
INSERT INTO t_menu_privilege VALUES ('15','admin','107','1','103');
INSERT INTO t_menu_privilege VALUES ('16','admin','107','1','104');
INSERT INTO t_menu_privilege VALUES ('17','admin','107','1','105');
INSERT INTO t_menu_privilege VALUES ('18','admin','107','1','106');

INSERT INTO t_menu_privilege VALUES ('19','admin','108','1','101');
INSERT INTO t_menu_privilege VALUES ('20','admin','108','1','102');
INSERT INTO t_menu_privilege VALUES ('21','admin','108','1','103');
INSERT INTO t_menu_privilege VALUES ('22','admin','108','1','104');
INSERT INTO t_menu_privilege VALUES ('23','admin','108','1','105');
INSERT INTO t_menu_privilege VALUES ('24','admin','108','1','106');

INSERT INTO t_menu_privilege VALUES ('25','admin','109','1','101');
INSERT INTO t_menu_privilege VALUES ('26','admin','109','1','102');
INSERT INTO t_menu_privilege VALUES ('27','admin','109','1','103');
INSERT INTO t_menu_privilege VALUES ('28','admin','109','1','104');
INSERT INTO t_menu_privilege VALUES ('29','admin','109','1','105');
INSERT INTO t_menu_privilege VALUES ('30','admin','109','1','106');




INSERT INTO t_menu_privilege VALUES ('31','admin','110','1','101');
INSERT INTO t_menu_privilege VALUES ('32','admin','110','1','102');
INSERT INTO t_menu_privilege VALUES ('33','admin','110','1','103');
INSERT INTO t_menu_privilege VALUES ('34','admin','110','1','104');
INSERT INTO t_menu_privilege VALUES ('35','admin','110','1','105');
INSERT INTO t_menu_privilege VALUES ('36','admin','110','1','106');





INSERT INTO t_menu_privilege VALUES ('37','admin','111','1','101');
INSERT INTO t_menu_privilege VALUES ('38','admin','111','1','102');
INSERT INTO t_menu_privilege VALUES ('39','admin','111','1','103');
INSERT INTO t_menu_privilege VALUES ('40','admin','111','1','104');
INSERT INTO t_menu_privilege VALUES ('41','admin','111','1','105');
INSERT INTO t_menu_privilege VALUES ('42','admin','111','1','106');




一级菜单
SELECT b.menuid,b.menudescr,b.menupid FROM t_sys_menu AS a, t_sys_menu AS


b WHERE a.menuid=b.menupid AND(a.menuid='105' OR b.menupid='105');
二级菜单
SELECT * FROM t_sys_menu t WHERE NOT EXISTS(SELECT * FROM t_sys_menu


a,t_sys_menu b WHERE a.menuid=b.menupid AND a.menuid=t.menuid );


查看
角色admin对哪些菜单,哪些操作权限
SELECT DISTINCT
m.menuid,m.menudescr,m.menuurl,m.menupid,p.privliegeid,p.privilegetype
FROM
t_menu_privilege mp,
t_sys_menu m,
t_privilege p,
t_user_role r
WHERE
mp.privliegeid=p.privliegeid
AND
mp.roleid=r.roleid
AND
mp.menuid=m.menuid
AND
r.roleid='admin'
ORDER BY m.menuid;


用户yuezhenhua对哪些菜单,有哪些操作权限
SELECT DISTINCT
m.menuid,m.menudescr,m.menuurl,m.menupid,p.privliegeid,p.privilegetype
FROM
t_menu_privilege mp,
t_sys_menu m,
t_privilege p,
t_user_role r
WHERE
mp.privliegeid=p.privliegeid
AND
mp.roleid=r.roleid
AND
mp.menuid=m.menuid
AND
r.userid="1"
ORDER BY m.menuid;




需要制作的界面
用户的管理界面
角色的管理界面
用户角色的分配界面
系统菜单的管理界面
具体权限项的管理界面
系统菜单与角色间具体的权限分配界面




改进t_sys_menu表的设计
oracle 有递归
mysql没有


添加left和right两个字段


左右值无限分类实现(预排序遍历树算法)


毗邻目录模式 adjacencylist model
预排序遍历算法 modifiedfreorder tree traversal algorithm


1
2
3月报4 5季报6 7年报8
9
10
11
12增加用户13 14删除用户15
16
17
18增加角色19 20删除角色21
22
23
24




ALTER TABLE t_sys_menu ADD lef DECIMAL(16);
ALTER TABLE t_sys_menu ADD rig DECIMAL(16);




UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='2',`rig`='9' WHERE


`menuid`='101';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='3',`rig`='4' WHERE


`menuid`='102';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='5',`rig`='6' WHERE


`menuid`='103';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='7',`rig`='8' WHERE


`menuid`='104';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='10',`rig`='23' WHERE


`menuid`='105';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='11',`rig`='16' WHERE


`menuid`='106';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='12',`rig`='13' WHERE


`menuid`='107';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='14',`rig`='15' WHERE


`menuid`='108';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='17',`rig`='22' WHERE


`menuid`='109';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='18',`rig`='19' WHERE


`menuid`='110';
UPDATE `privilege_sys`.`t_sys_menu` SET `lef`='20',`rig`='21' WHERE


`menuid`='111';






在现有的节点中插入一个子节点


1 选取要被插入的节点的父节点的left的值
select lef from t_sys_menu where menuid='101';

2 原有节点的rig>left,那么全部加2
update t_sys_menu set rig=rig+2 where rig>2;


3 原有节点的lef>left,那么全部加2
update t_sys_menu set lef=lef+2 where lef>2;


4 新节点的lef和rig为left+1和left+2
INSERT INTO t_sys_menu VALUES('113','周报','a4.do','101',(2+1),(2+2));
INSERT INTO t_sys_menu VALUES('112','菜单','','-1',1,26);
查询结果
SELECT
node.menuid,
node.menudescr,
node.lef,
node.rig,
node.menuurl
FROM
t_sys_menu node,
t_sys_menu parent
WHERE
node.lef BETWEEN parent.lef AND parent.rig
AND
node.menudescr!='菜单'
GROUP BY


node.menuid,node.menudescr,node.lef,node.rig,node.menuurl,node.menupid
ORDER BY node.lef






插入一个新的节点
1 取得要插入新节点的左边节点的right的值
select rig from t_sys_menu where menuid='101';
2 原有节点的rig>right,那么全部加2
update t_sys_menu set rig=rig+2 where rig>11;
3 原有节点的lef>right,那么全部加2
update t_sys_menu set lef=lef+2 where lef>11;
4 插入新节点,lef和rig分别为right+1和right+2
insert into t_sys_menu values ('114','保单审核','','',(11+1),(11+2));

在新插入节点中插出子节点


1 选取要被插入的节点的父节点的left的值
select lef from t_sys_menu where menuid='114';

2 原有节点的rig>left,那么全部加2
update t_sys_menu set rig=rig+2 where rig>12;


3 原有节点的lef>left,那么全部加2
update t_sys_menu set lef=lef+2 where lef>12;


4 新节点的lef和rig为left+1和left+2
INSERT INTO t_sys_menu VALUES('115','手工审核','shougong.do','',(12+1),


(12+2));


删除一个节点
1 取删除菜单的left的值,right的值,和宽度(width=rigth-left+1)
select lef,rig,(rig-lef+1) width from t_sys_menu where menuid='114';
2 删除所有位于第一步中得到的left和rigth之间的节点
delete from t_sys_menu where lef between 12 and 15;
3 所有rig>right,rig-width
update t_sys_menu set rig=rig-4 where rig>15;
4 所有lef>left,lef-width

update t_sys_menu set lef=lef-4 where lef>15;

参考博客

http://blog.csdn.net/lifetragedy/article/details/7734864

分享到:
评论

相关推荐

    数据库系统原理学习笔记

    这份学习笔记涵盖了数据库系统的基础概念、设计原则以及SQL语言的应用。以下是笔记中的关键知识点: 1. **数据库概述**:数据库是一种有组织地存储和管理数据的系统,提供了数据的结构化存储、数据操作和数据控制等...

    2009数据库系统工程师学习笔记

    2009年的数据库系统工程师学习笔记可能涵盖了当时该领域的核心概念和技术。以下是对这些笔记可能包含的一些关键知识点的详细说明: 1. **数据库基础理论**: - 数据模型:包括关系模型(如SQL)、网络模型、层次...

    数据库的课程学习笔记

    这篇学习笔记将深入探讨数据库的基本概念、设计原则以及常见操作。 首先,我们要了解什么是数据库。数据库是一个有组织的数据集合,它提供了数据的存储、查询、更新和管理等功能。常见的数据库类型包括关系型数据库...

    SQL 数据库语言学习笔记

    本篇“SQL数据库语言学习笔记”将深入探讨SQL的基本概念、语法和常用操作,帮助你掌握这个强大的工具。 一、SQL简介 SQL起源于1970年代,由IBM的研究员开发,其设计目标是为了解决日益复杂的数据查询和管理问题。...

    Oracle数据库安装笔记+学习笔记

    这篇笔记集合将帮助我们深入理解Oracle数据库的安装过程以及后续的学习路径。 首先,"教你安装.txt"可能包含了Oracle数据库的基础安装步骤。安装Oracle数据库通常包括以下几个关键阶段:系统需求检查、下载适合操作...

    (学习笔记)软考-数据库系统工程师.zip

    【数据库系统工程师学习笔记概述】 本学习笔记是针对“软考-数据库系统工程师”这一资格认证的备考资料,作者在复习过程中对重要知识点进行了整理,特别标记了关键内容,帮助考生高效备考。通过作者的努力,他在...

    超详细数据库系统与概论笔记2019上——个人笔记.zip

    这份"超详细数据库系统与概论笔记2019上——个人笔记"的压缩包,包含了对《数据库系统与原理》一书的深度学习和理解。下面,我们将根据笔记内容,对数据库系统的基础知识进行深入探讨。 首先,数据库的绪论部分通常...

    数据库原理入门知识学习笔记

    数据库原理入门知识的学习是一个基础而关键的阶段,对于理解数据管理和信息系统的核心至关重要。本文将深入探讨数据库的基础概念,包括数据库、数据库管理系统、数据模型以及数据的抽象级别。 首先,数据库...

    郝宾数据库学习笔记

    郝宾的数据库学习笔记主要涵盖了数据库的基本概念、作用、安装与卸载,预备知识,以及数据库操作的基础。首先,数据库被定义为存储和管理数据的软件及其数据集合,包括表、关系和操作。数据库的存在是因为它能高效地...

    Oracle SQLServer数据库 学习笔记

    这篇学习笔记将深入探讨这两个系统的概念、特性和应用。 一、Oracle数据库系统 Oracle数据库是由甲骨文公司开发的一款强大、高性能的数据库解决方案。其主要特点包括: 1. **分布式数据库**:Oracle支持多节点的...

    Microsoft SQL 数据库学习笔记

    【Microsoft SQL 数据库学习笔记】 在数据库领域,Microsoft SQL Server 是一种广泛使用的、关系型数据库管理系统,由微软公司开发和维护。SQL(Structured Query Language)是用于管理关系数据库的标准编程语言,...

    oracel数据库学习笔记

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它在企业级数据存储、管理和处理方面具有强大的功能。...这份学习笔记将是你入门Oracle数据库的好助手,帮助你一步步提升在数据库领域的专业技能。

    oracle数据库学习笔记

    本学习笔记旨在提供全面、深入的Oracle知识体系,帮助读者从基础到高级掌握Oracle数据库的使用。 首先,Oracle数据库的核心概念包括数据模型、数据库架构和SQL语言。数据模型是数据库设计的基础,主要包括实体、...

    sql数据库学习全过程笔记

    在SQL数据库的学习过程...总的来说,SQL数据库学习是一个全面的过程,从基本操作到复杂的数据库设计和管理,都需要深入理解和实践。通过系统地学习和掌握这些知识点,你将成为一名能够高效管理和操作数据库的专业人士。

    笔记本选购管理系统(数据库课程设计)

    在课程设计中,学生可能学习了如何创建数据库、管理表、执行SQL查询、备份与恢复数据库,以及使用SQL Server Management Studio进行日常维护。SQL Server 2008还提供了T-SQL语言,用于编写复杂的数据库操作脚本。 ...

    关于数据库的学习笔记,mysql数据库教程.zip

    这份“关于数据库的学习笔记,mysql数据库教程”包含了丰富的知识内容,旨在帮助初学者和进阶者深入理解MySQL的各个方面。 首先,MySQL的基础知识是学习的重点。数据库是用于存储和管理数据的系统,而MySQL则是实现...

    数据库学习笔记1

    总的来说,数据库学习涉及广泛的概念,从基础架构到高级安全策略,再到特定数据库系统的实现细节。了解这些知识点对于任何希望深入理解数据库管理和安全性的IT专业人士都是必要的。无论是设计数据库、编写应用程序...

    Oracle数据库学习笔记

    Oracle数据库是一种广泛使用的对象关系数据库管理系统(ORDBMS),它结合了关系数据库...通过理解Oracle数据库的结构、组件、SQL命令和数据类型,开发者可以有效地设计、管理和操作数据库,实现高效的数据存储和检索。

    SQLServer2005数据库学习笔记

    笔记是本人学习SQLServer一段时间后重新整理出来的,适合有一些入门基础的人学习。 ├─01 安装及使用 │ SQLServer2005安装及使用.txt │ ├─02 常用函数 │ function.sql │ ├─03 建表、建库 │ create.sql ...

    《数据库原理与应用》部分笔记

    4. **数据库设计**:笔记可能会涉及数据库设计的几个阶段,如需求分析、概念设计(用ER图表示)、逻辑设计(转换为关系模式)和物理设计(考虑存储和性能优化)。 5. **关系代数和元组关系演算**:这是理解数据库...

Global site tag (gtag.js) - Google Analytics