基于角色的访问控制'的权限管理的数据库的设计实现

RBAC基于角色的访问控制的权限管理系统数据库设计与实现

use [master]
go

-- 检查数据库 [RBAC]是否存在,如果存在则删除(只测试用,不然会丢数据.)
-- Search from the sysdatabase to see that if the [RBAC] database exist.
-- If exists then drop it else create it.

if exists(select * from sysdatabases where name = 'RBAC')
   drop database [RBAC]
go

-- 创建数据库 [RBAC]
-- Create the database named by '[RBAC]'.
create database [RBAC]
go

-- 使用数据库 [RBAC]
-- Use the database of '[RBAC]'.
use [RBAC]
go

-- 创建 "用户" 数据表 [RBAC_User]
-- Create the datatable named by '[RBAC_User]' to save users.
create table [RBAC_User]
(
 --用户编号
 [User_ID] int primary key not null,
 --用户名称
 [User_Name] varchar(20) not null,
 --用户密码
 [User_PassWord] varchar(20) not null,
 --用户状态
 [User_Lock] bit not null
)
go

-- 添加测试数据
-- Add data for test
insert into [RBAC_User] values(1,'FightingYang','PassWord',0);
go
insert into [RBAC_User] values(2,'Supper3000','Teacher',0);
go
insert into [RBAC_User] values(3,'JianzhongLi','Teacher',1);
go

select * from [RBAC_User]
go


-- 创建 "组" 数据表 [RBAC_Group]
-- Create the datatable named by '[RBAC_Group]' to save groups.
create table [RBAC_Group]
(
 --组编号
 [Group_ID] int primary key not null,
 --组名称
 [Group_Name] varchar(20) not null
)
go

-- 添加测试数据
-- Add data for test
insert into [RBAC_Group] values(1,'编程爱好者');
go
insert into [RBAC_Group] values(2,'MSDN老师');
go

select * from [RBAC_Group]
go

  

-- 创建 "角色" 数据表 [RBAC_Role]
-- Create the datatable named by '[RBAC_Role]' to save roles.
create table [RBAC_Role]
(
 --角色编号
 [Role_ID] int primary key not null,
 --角色名称
 [Role_Name] varchar(20) not null
)
go

-- 添加测试数据
-- Add data for test
insert into [RBAC_Role] values(1,'admin');
go
insert into [RBAC_Role] values(2,'user');
go

select * from [RBAC_Role]
go

 

-- 创建 "资源" 数据表 [RBAC_Resource]
-- Create the datatable named by '[RBAC_Resource]' to save Resources.
create table [RBAC_Resource]
(
 --资源编号
 [Resource_ID] int primary key not null,
 --资源名称
 [Resource_Name] varchar(20) not null
)
go

-- 添加测试数据
-- Add data for test
insert into [RBAC_Resource] values(1,'音频');
go
insert into [RBAC_Resource] values(2,'视频');
go

select * from [RBAC_Resource]
go

 

-- 创建 "操作" 数据表 [RBAC_Operate]
-- Create the datatable named by '[RBAC_Operate]' to save Operates.
create table [RBAC_Operate]
(
 --操作编号
 [Operate_ID] int primary key not null,
 --操作名称
 [Operate_Name] varchar(10) not null
)
go

-- 添加测试数据
-- Add data for test
insert into [RBAC_Operate] values(1,'添加');
go
insert into [RBAC_Operate] values(2,'读取');
go
insert into [RBAC_Operate] values(3,'编写');
go
insert into [RBAC_Operate] values(4,'删除');
go

select * from [RBAC_Operate]
go

 

-- 创建 "权限" 数据表 [RBAC_Privilege]
-- Create the datatable named by [RBAC_Privilege] to save privileges.
create table [RBAC_Privilege]
(
 --权限编号
 [Privilege_ID] int primary key not null,
 --资源编号
 [Resource_ID] int foreign key references [RBAC_Resource]([Resource_ID]) not null,
 --操作编号
 [Operate_ID] int foreign key references [RBAC_Operate]([Operate_ID]) not null
)
go

-- 添加测试数据
-- Add data for test

-- 第一条权限是对"音频"的"添加"权限
insert into [RBAC_Privilege] values(1,1,1);
go
-- 第二条权限是对"音频"的"读取"权限
insert into [RBAC_Privilege] values(2,1,2);
go
-- 第三条权限是对"音频"的"编写"权限
insert into [RBAC_Privilege] values(3,1,3);
go
-- 第四条权限是对"音频"的"删除"权限
insert into [RBAC_Privilege] values(4,1,4);
go
-- 第五条权限是对"视频"的"读取"权限
insert into [RBAC_Privilege] values(5,2,1);
go
-- 第六条权限是对"视频"的"读取"权限
insert into [RBAC_Privilege] values(6,2,2);
go
-- 第七条权限是对"视频"的"编写"权限
insert into [RBAC_Privilege] values(7,2,3);
go
-- 第八条权限是对"视频"的"删除"权限
insert into [RBAC_Privilege] values(8,2,4);
go

select * from [RBAC_Operate]
go

 

-- 创建 "授权" 数据表 [RBAC_Impower]
-- Create the datatable named by [RBAC_Impower] to save Impower.
create table [RBAC_Impower]
(
 --授权编号
 [Impower_ID] int primary key not null,
 --角色编号
 [Role_ID] int foreign key references [RBAC_Role]([Role_ID]) not null,
 --权限编号
 [Privilege_ID] int foreign key references [RBAC_Privilege]([Privilege_ID]) not null
)
go

-- 添加测试数据
-- Add data for test

-- 第一条授权内容"admin"具有'对"音频"的"添加"权限'
insert into [RBAC_Impower] values(1,1);
go
-- 第二条授权内容"admin"具有'对"音频"的"读取"权限'
insert into [RBAC_Impower] values(2,2);
go
-- 第三条授权内容"admin"具有'对"音频"的"编写"权限'
insert into [RBAC_Impower] values(3,3);
go
-- 第四条授权内容"admin"具有'对"音频"的"删除"权限'
insert into [RBAC_Impower] values(4,4);
go
-- 第五条授权内容"admin"具有'对"视频"的"添加"权限'
insert into [RBAC_Impower] values(5,5);
go
-- 第六条授权内容"admin"具有'对"视频"的"读取"权限'
insert into [RBAC_Impower] values(6,6);
go
-- 第七条授权内容"admin"具有'对"视频"的"编写"权限'
insert into [RBAC_Impower] values(7,7);
go
-- 第八条授权内容"admin"具有'对"视频"的"删除"权限'
insert into [RBAC_Impower] values(8,8);
go
-- 第九条授权内容"user"具有'对"音频"的"读取"权限'
insert into [RBAC_Impower] values(9,2);
go
-- 第十条授权内容"user"具有'对"视频"的"读取"权限'
insert into [RBAC_Impower] values(10,5);
go

select * from [RBAC_Impower]
go

 

-- 添加测试数据
-- Add data for test

-- 组所具备的角色的数据第一条的内容是"MSDN老师"具有"admin"的角色
insert into [RBAC_GroupRole] values(1,2,1);
go
-- 组所具备的角色的数据第二条的内容是"编程爱好者"具有"user"的角色
insert into [RBAC_GroupRole] values(2,1,2);
go

select * from [RBAC_GroupRole]
go

-- 创建 "用户组" 数据表 [RBAC_UserGroupRole]
-- Create the datatable named by '[RBAC_UserGroupRole]' to save userGroupRoles.
create table [RBAC_UserGroupRole]
(
 --用户组编号
 [UserGroup_ID] int primary key not null,
 --用户编号
 [User_ID] int foreign key references [RBAC_User]([User_ID]) not null,
 --组编号
 [Group_ID] int foreign key references [RBAC_Group]([Group_ID]) not null,
 --角色编号
 [Role_ID] int foreign key references [RBAC_Role]([Role_ID]) not null
)
go

-- 添加测试数据
-- Add data for test

-- 第一条用户组数据是"FightingYang"属于"编程爱好者"组,在组中的角色是"admin"
insert into [RBAC_UserGroup] values(1,1,1,1);
go
-- 第二条用户组数据是"Supper3000"属于"MSDN老师"组,在组中的角色是"admin"
insert into [RBAC_UserGroup] values(2,2,2,1);
go
-- 第三条用户组数据是"JianzhongLi"属于"MSDN老师"组,在组中的角色是"user"
insert into [RBAC_UserGroup] values(3,3,2,2);
go

select * from [RBAC_UserGroupRole]
go

转载于:https://www.cnblogs.com/lds85930/archive/2009/02/13/1389655.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Thymeleaf –片段和angularjs路由器局部视图

百里香叶许多很酷的功能之一就是能够渲染模板片段–我发现这是与AngularJs一起使用的特别有用的功能。 可以将AngularJS $ routeProvider或AngularUI路由器配置为返回不同“路径”的部分视图,使用百里香叶返回这些部分视图确实效果很好。 考虑一个简单的CRUD流&am…

web3.js_1.x.x--API(一)event/Constant/deploy/options

/* 事件是使用EVM日志内置功能的方便工具,在DAPP的接口中,它可以反过来调用Javascript的监听事件的回调。事件在合约中可被继承。当被调用时,会触发参数存储到交易的日志中(一种区块链上的特殊数据结构)。 这些日志与合…

1022: 淘金(2017年中南大学研究生复试机试题 )

1022: 淘金 时间限制: 1 Sec 内存限制: 128 MB提交: 205 解决: 75[提交] [状态] [讨论版] [命题人:外部导入]题目描述 在一片n*m的土地上,每一块1*1的区域里都有一定数量的金子。这一天,你到这里来淘金,然而当地人告诉你,如果你…

CSS 定位 四种定位

absolute 生成绝对定位的元素,相对于static定位以外的第一个父元素进行定位。元素的位置通过“left”,“top”,“right”以及“bottom”属性进行定位。fixed 生成固定定位的元素,相对于浏览器窗口进行定位。元素的位置通过“left…

Apache CXF 3.0:CDI 1.1支持可替代Spring

在几周前刚刚发布Apache CXF 3.0时 ,该项目又迈出了满足JAX-RS 2.0规范要求的又一个重要步骤:与CDI 1.1集成。 在此博客文章中,我们将看几个有关Apache CXF 3.0和Apache CXF 3.0如何协同工作的示例。 从3.0版开始, Apache CXF包含…

用堆来求中位数

维护一个大根堆和一个小根堆。使得大根堆堆顶(最大的元素)比小根堆堆顶(最小的元素)小,且两个堆的元素个数的差小于等于1。这样元素多的那个堆的堆顶就是已读入数的中位数。如果读入偶数个数,则中位数为两个…

JPA 2.1类型转换器–保留枚举的更好方法

可以使用JPA 2.0保留枚举,但是没有很好的方法来实现。 使用Enumerated批注,可以使用EnumType.ORDINAL或EnumType.STRING将枚举值映射到其数据库表示形式。 但是这两种选择都有一些缺点,我们将在本文的第一部分中进行讨论。 在第二部分中&…

LOADRUNNER8.1中文版加10000客户端破解补订

http://www.17testing.com/download/LR_8.1.iso LOADRUNNER8.1 用迅雷下载http://www.17testing.com/download/LR_8.1ChinesePack.iso 中文包http://blog.chinaunix.net/upfile/070509151030.rar 10000客户端的破解补丁 LR 8.1的介质可以从这里下载:http://www.17t…

css布局笔记(二)Flex

flex Flex是“Flexible Box”的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性。 任何一个容器都可指定为Flex布局。 .box{display:flex;} 行内元素也可以使用flex布局。 .box{display:inline-flex;} webkit内核的浏览器,必须加上-w…

BZOJ3709 Bohater 贪心

传送门 思路很妙…… 有个前提条件:血量无限,这样话肯定先打会回血的怪,再打会掉血的怪 对于会回血的怪,按照受到伤害的顺序从小往大打 对于会掉血的怪似乎并不是很好搞,考虑:将每一时刻的血量函数画出来&a…

反射与二次加工标准类型

反射与二次加工标准类型一、反射 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。 有四个可以实现自省(反射)的函数,如下表所示: 函数名含义hasattr(object,name)判断object中有没有一个name字符串对应的方法或属性getattr(object,na…

Java 8 StampedLocks与ReadWriteLocks和同步

同步部分就像访问您的岳父母。 您希望尽可能少出现。 关于锁定,规则是相同的–您想花费最短的时间在关键区域内获取锁定,以防止形成瓶颈。 锁定的核心语言惯用法一直是用于方法和离散块的synced关键字。 这个关键字实际上已硬连接到HotSpot JVM中。 我们…

MSN on 2/16/2009

转载于:https://www.cnblogs.com/zxlin25/archive/2009/02/16/1391207.html

开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等

在上篇随笔《基于微信小程序的系统开发准备工作》介绍了开发微信小程序的一些前期的架构设计、技术路线 、工具准备等方面内容,本篇随笔继续这个步骤,逐步介绍我们实际开发过程中对SSL协议的申请及后期处理过程,包括证书的IIS端口绑定&#x…

POJ 3253 Fence Repair

POJ 3253 Fence Repair 题目链接:http://poj.org/problem?id3253 题目大意 农夫约翰想修理牧场周围的一小段篱笆。他测量了栅栏,发现他需要N(1≤N≤20,000)块木板,每块长度为整数Li(1≤Li≤50,000)。然后,他买了一块长木板&#…

【面向对象】对比JavaScript、Go、Ada、Python、C++、Java、PHP的访问限制。

在不同编程语言中,控制成员(变量、方法、类等)可见性的机制不尽相同。以下是对比JavaScript、Go、Ada、Python、C、Java、PHP所使用的访问限制关键字和约定: 一、JavaScript ### JavaScript访问限制 早期的JavaScript并没有类似…

C#各类访问权限,封装,修饰符

C#各类访问权限,封装,修饰符。 (1) Pubilc :任何公有成员可以被外部的类访问。(2) Private :只有同一个类中的函数可以访问它的私有成员。(3) Protected :该类内部和继承类中可以访问。(4) internal : 同一个程序集的对…

在Java 8中使用Stream API列出ZIP文件的内容

在Java 8 java.util.zip.ZipFile配备了stream方法,该方法可以非常轻松地浏览ZIP文件条目。 在此博客文章中,我将展示许多示例,这些示例显示了我们可以如何快速浏览ZIP文件条目。 注意:就本博客而言,我将一个GitHub存储…

tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法...

tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 【标 题】:tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法【关键字】:tomcat5,jsp,getOutpu…

Web API应用架构设计分析(1)

Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架, ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。本文主要以AS…