权限设计-数据库案例(转载)

--用户管理模块数据库设计

drop database UsersDBTest
--------------创建数据库----------------------------
create database UsersDBTest  --sqlserver这一句话就可以创建数据库,其它默认值。

on  primary  -- 默认就属于primary文件组,可省略
(
/*--数据文件的具体描述--*/
    name=‘UsersDBTest_data‘,  -- 主数据文件的逻辑名称
    filename=‘E:\DB\UsersDBTest_data.mdf‘, -- 主数据文件的物理名称和地址
    size=5mb, --主数据文件的初始大小
    maxsize=100mb, -- 主数据文件增长的最大值
    filegrowth=15%--主数据文件的增长率
)
log on
(
/*--日志文件的具体描述,各参数含义同上--*/
    name=‘UsersDBTest_log‘,
    filename=‘E:\DB\UsersDBTest_log.ldf‘,
    size=2mb,
    filegrowth=1mb
  )

  use  UsersDBTest -- 使用数据库

 -------------创建用户、角色、权限表------------------
  create table UserInfo
  (
      ID int identity(1,1) not null,
      Uname nvarchar(max) not null,
      Pwd nvarchar(max) not null,
      ShowName nvarchar(max) null,

  );

  create table RoleInfo
  (
      ID int identity(1,1) not null,
      RoleName nvarchar(max) not null,
  );

  create table ActionInfo
  (
      ID int identity(1,1)  not null,
      ActionName nvarchar(max) not null
  );

  --------------创建关系表----------------

  create table UserInfoRoleInfo
  (
      UserInfo_ID int not null,
      RoleInfo_ID int not null

  );

  create table RoleInfoActionInfo
  (
      RoleInfo_ID int not null,
      ActionInfo_ID int not null
  );

  --如何让不拥有A角色的人拥有A角色的某个权限,让拥有A角色所有权限的人失去某个权限

--A在程序判断时设置优先级;B在程序判断时设置且、或关系。
  --跨角色授权或削权
  create table R_UserInfo_ActionInfo
  (
      ID int identity(1,1) not null,
      HasPermisson smallint not null,
      UserInfo_ID int not null,
      ActionInfo_ID int not null
  );

 ---------------创建所有主键约束-----------

 Alter table UserInfo
    add constraint PK_UserInfo  --给主键约束取别名,寓意:UserInfo表的主键约束。取别名的好处是1删除方便2为多个列定义同时约束,即主键组。
        Primary Key Clustered(ID Asc); --主键约束 ,对ID列聚集索引,根据ID升序排序

 Alter table RoleInfo
    add constraint PK_RoleInfo
        Primary Key Clustered(ID Asc);

 Alter table ActionInfo
    add constraint PK_ActionInfo
        Primary Key Clustered(ID Asc);

 Alter table UserInfoRoleInfo
    add constraint PK_UserInfoRoleInfo
        Primary Key Clustered(UserInfo_ID,RoleInfo_ID Asc);

 Alter table RoleInfoActionInfo
    add constraint PK_RoleInfoActionInfo
        Primary Key Clustered(RoleInfo_ID,ActionInfo_ID Asc);

 Alter table R_UserInfo_ActionInfo
    add constraint PK_R_UserInfo_ActionInfo
        Primary Key Clustered(ID Asc);

--主键的简单创建方式:
  --create table ActionInfo
  --(
     -- ID int identity(1,1) primary key not null,  --方式1
     -- ActionName nvarchar(max) not null,
     -- --primary key(ID)  --方式2

  --);

--添加主键
 -- alter table UserInfo add constraint PK_UserInfo primary key(ID,Uname) --主键组
--删除主键:
--Alter table UserInfo drop constraint PK_UserInfo
--必须先删除相关外键约束

------------创建所有外键--------------------

 Alter table UserInfoRoleInfo
    add constraint FK_UserInfoRoleInfo_UserInfo --给外键取别名
        Foreign Key(UserInfo_ID) References UserInfo(ID) --让外键表UserInfoRoleInfo的 UserInfo_ID列引用UserInfo表的ID列
        On Delete no Action On Update no Action; --注意此处的Action不是ActionInfo表!!!

 Alter table UserInfoRoleInfo
    add constraint FK_UserInfoRoleInfo_RoleInfo --注意名称不同
        Foreign Key(RoleInfo_ID) References RoleInfo(ID)
        On Delete no Action On Update no Action;

 Alter table RoleInfoActionInfo
    add constraint FK_RoleInfoActionInfo_RoleInfo
    Foreign Key(RoleInfo_ID) References RoleInfo(ID)
    On Delete no Action On Update no Action;

 Alter table RoleInfoActionInfo
    add constraint FK_RoleInfoActionInfo_ActionInfo
    Foreign Key(ActionInfo_ID) References ActionInfo(ID)
    On Delete no Action On Update no Action;

 Alter table R_UserInfo_ActionInfo
    add constraint FK_UserInfoR_UserInfo_ActionInfo
    Foreign Key(UserInfo_ID) References UserInfo(ID)
    On Delete no Action On Update No Action;

  Alter table R_UserInfo_ActionInfo
    add constraint FK_ActionInfoR_UserInfo_ActionInfo
    Foreign Key(ActionInfo_ID) References ActionInfo(ID)
    On Delete no Action On Update No Action;

--ON DELETE NO ACTION 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE 语句。
--ON UPDATE NO ACTION 指定如果试图更新某一行中的键值,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 UPDATE 语句。 

--外键(引用)
--作用:保持数据一致性,完整性,
--主要目的:控制存储在外键表中的数据。
--使两张表形成关联,外键只能引用外表中的列的值或使用空值。
--1如果不使用外键,成绩表的学号字段插入一个值(比如13341321),
--但是这个值在学生表中并没有,此时数据库允许插入,并不会对插入的数据做关系检查。
--问题是这样很可能出现学生表和成绩表不对应,在整合学生信息时出现遗漏或多余等问题。
--2在设置外键的情况下,你要插入成绩表学号字段的值必须要求在学生表的学号字段能找到。
--你要删除学生表的某个学号,必须保证成绩表中没有引用该值所在的列(外键),否则就没法删除。
--这就是所谓的保持数据的一致性和完整性。

------------创建索引------------------------    

 Create Index IX_FK_UserInfoRoleInfo_RoleInfo --给索引取名字
    on UserInfoRoleInfo(RoleInfo_ID); --需要建立索引的列

 Create Index IX_FK_RoleInfoActionInfo_ActionInfo
    on RoleInfoActionInfo(ActionInfo_ID);

 Create Index IX_FK_UserInfoR_UserInfo_ActionInfo
   on R_UserInfo_ActionInfo(UserInfo_ID);

 Create Index IX_FK_ActionInfoR_UserInfo_ActionInfo
    on R_UserInfo_ActionInfo(ActionInfo_ID);

--外键是怎么发挥作用的?把两张表放一些数据增删改看看.
 

来源:http://www.cnblogs.com/hao-1234-1234/p/6340778.html

以上内容为 应用程序权限设计(转载!)第4种设计的Sql语句实现,为了方便和减少失误,建议使用数据库设计工具PowerDesigner设计后自动生成Sql语句。

原文地址:https://www.cnblogs.com/hao-1234-1234/p/8976643.html

时间: 2024-11-13 09:37:21

权限设计-数据库案例(转载)的相关文章

如何使用php设计权限管理数据库

很多网站管理员都想获得php权限,admin,或者root.但如何使用php设置管理员数据库呢? 万事开头难,这里介绍一下. 首先在B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个"非法用户"很可能就能通过浏览器轻易访问到B/S系统中的所有功能.因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让

JavaWeb 角色权限控制——数据库设计

相信各位读者对于角色权限管理这个需求并不陌生.那么是怎么实现的呢?今天小编来说道说道! 1.首先我们来进行数据库的设计,如何设计数据库是实现权限控制的关键: 1)用户表: id:主键.自增.int name:用户名 .varchar account:帐号.varchar password:密码.varchar 2)角色表: id:角色表主键.自增.int roleName:角色昵称.varchar 3)菜单表: id:主键.自增.int menuName:菜单昵称.varchar menuUrl

权限设计(上) - 数据库表设计

web权限设计,做权限目前有三种主流实现方式 第一种:手动实现 配置2个拦截器,一个是拦截是否登陆,一个是拦截url的权限,通过角色权限表的配置,把权限url的路径与访问资源的url进行匹配 第二种:spring-security实现,比较重,不推荐 第三章:shiro,目前spring已经舍弃自己的spring-security而采用shiro 先放出数据库设计(普通版,会增加字段),后面会详细介绍

数据库设计原则(转载)

1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体.这里的实体可以理解为基本表.明确这种对应关系后,对我们设计录入界面大有好处. [例1]:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表.社会关系表.工作简历表.   这就是"一张原始单证对应多个实体"的典型例子. 2. 主键

【转载】API权限设计总结

本文内容转自:http://blog.csdn.net/initphp/article/details/8636669 API权限设计总结: 最近在做API的权限设计这一块,做一次权限设计的总结. 1. 假设我们需要访问的API接口是这样的:http://xxxx.com/openapi/v1/get/user/?key=xxxxx&sign=sadasdas&timestamp=2013-03-05 10:14:00&c=c&a=a&d=d 2. 接口调用的控制器

RBAC用户权限管理数据库设计

http://minjiechenjava.iteye.com/blog/1759482 RBAC用户权限管理数据库设计 博客分类: RBAC 权限设计 RBAC RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.(如下图) 角色是什么?可以理解为一定数

用户权限管理数据库表设计思想

用户权限管理数据库表设计思想 表:(1)用户表(user) (2)权限表(power) (3)部门表(group) (4)角色表(role) (5)用户部门角色表(user_group_role)存放用户id,部门id,角色id (6)权限部门角色表(power_group_role)存放权限id,部门id,角色id 设计理念: a用户可以(绑定)属于m部门n角色   z权限可以(绑定)属于m部门n角色 由此:a就拥有z权限 设计扩展:一个用户可以同时属于多个部门下的多个角色 每个部门下的每个角

关于权限的数据库设计

不管是在网站开发还是MIS系统开发中,涉及到多用户的软件系统都会遇到这个问题,如何比较优雅的解决这个问题也一直是大家经常探讨的热门话题,本文试着谈论一下自己的观点,希望和大家共同切磋. 方法一:    用户表:  T_UserInfo     id     name    对象表:  T_Object     id     name    权限表  T_Access     accessid     userid(外键,来自用户表)     objectid(外键,来自对象表)     acce

ASP.NET网站权限设计实现(一)——使用PowerDesigner进行数据库设计

这里用PowerDesigner做一个初步的设计,后面可能会有修改. 1.启动PowerDesigner新建物理数据模型 2.工具栏 3.新建表模型 4.添加第一张表,可以双击表或右键菜单打开下面窗口 别忘了把Owner选上dbo,然后切换到Columns选项卡 完成后,表的模样是下图这副德行的 按此步骤依次添加其他表 6.添加表关系,选中工具箱的关系工具,由从表拖向主表,双击关系出现右侧窗口 7.配置数据库连接 8.创建数据库并在数据库中生成表,这里我是先在SQL Server Managem