一套能体现 RBAC 的表结构设计
1、RBAC 概述
RBAC(Role-Based Access Control)即基于角色的访问控制,是一种权限设计思想。在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员来获得这些角色的权限。相较传统的访问控制(自主访问、强制访问)来说,RBAC 能更好的支持最小权限、责任分离和数据抽象等原则,极大地简化了权限的管理。
在一个组织中,角色是为了完成各种工作而创造,而用户则根据他的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。每个角色都拥有与之相匹配的权限,角色可依据新的需求而赋予新的权限,而权限也可根据需要而从某角色中回收。这样的权限设计,结构清晰、管理方便,也能囊括更广泛的客观情况。
RBAC 的优点主要在于易用和高效。给用户授权时只需要对角色授权,然后将相应的角色分配给用户即可;从技术角度讲,思路清晰且易于实现,且后期维护时只需要维护关系模型,显得简单而高效。
RBAC 的缺点主要有两个:一个是在进行较为复杂的权限校验时需要不断地遍历和递归,会造成一定的性能影响。另一个是缺少数据权限模型,基于 RBAC 来实现数据权限校验比较复杂和低效。
经过 20 多年的发展,RBAC 已被广泛应用到很多领域的系统或软件,同时也产生了许多应用模型。本文的理论部分到此结束,有兴趣了解更多的朋友可参考:
- Role-Based Access Controls
- AN INTRODUCTION TO ROLE-BASED ACCESS CONTROL
- ROLE BASED ACCESS CONTROL (RBAC) AND ROLE BASED SECURITY
- 了解基于角色的访问控制
2、表结构设计
2.1、用户表
CREATE TABLE t_user(
user_id NUMBER(10) PRIMARY KEY,
user_name VARCHAR2(30),
gender NUMBER(1),
birthday DATE,
create_time DATE DEFAULT SYSDATE
);
COMMENT ON TABLE t_user IS '用户表';
COMMENT ON COLUMN t_user.user_id IS '用户ID';
COMMENT ON COLUMN t_user.user_name IS '用户姓名';
COMMENT ON COLUMN t_user.gender IS '性别{1男/0女}';
COMMENT ON COLUMN t_user.birthday IS '出生日期';
COMMENT ON COLUMN t_user.create_time '创建时间';
2.2、角色表
CREATE TABLE t_role(
role_id NUMBER(10) PRIMARY KEY,
role_name VARCHAR2(30),
create_time DATE DEFAULT SYSDATE
);
COMMENT ON TABLE t_role IS '角色表';
COMMENT ON COLUMN t_role.role_id IS '角色ID';
COMMENT ON COLUMN t_role.role_name IS '角色名称';
COMMENT ON COLUMN t_role.create_time '创建时间';
2.3、权限表
CREATE TABLE t_power(
power_id NUMBER(10) PRIMARY KEY,
power_name VARCHAR2(30),
create_time DATE DEFAULT SYSDATE
);
COMMENT ON TABLE t_power IS '权限表';
COMMENT ON COLUMN t_power.power_id IS '权限ID';
COMMENT ON COLUMN t_power.power_name IS '权限名称';
COMMENT ON COLUMN t_power.create_time '创建时间';
2.4、用户角色(关系)表
CREATE TABLE t_user_role(
user_id NUMBER(10) NOT NULL,
role_id NUMBER(10) NOT NULL ,
create_time DATE DEFAULT SYSDATE
);
COMMENT ON TABLE t_user_role IS '用户角色(关系)表';
COMMENT ON COLUMN t_user_role.user_id IS '用户ID';
COMMENT ON COLUMN t_user_role.role_id IS '角色ID';
COMMENT ON COLUMN t_user_role.create_time '创建时间';
2.5、角色权限(关系)表
CREATE TABLE t_role_power(
role_id NUMBER(10) NOT NULL,
power_id NUMBER(10) NOT NULL
);
COMMENT ON TABLE t_role_power IS '角色权限(关系)表';
COMMENT ON COLUMN t_role_power.role_id IS '角色ID';
COMMENT ON COLUMN t_role_power.power_id IS '权限ID';
COMMENT ON COLUMN t_role_power.create_time '创建时间';
3、总结
与我而言,本篇小文也就相当于是一个功能模块表设计 SQL 语句的备份。以前做项目也经常按类似的思路来设计系统权限模块的表,但一直不知道 RBAC 的存在,本篇是结合 RBAC 思想把项目中的表设计抽取出来,将建表的 SQL 语句贴在这儿,省的每次都要重新来过。
本文链接:http://www.cnblogs.com/hanzongze/p/oracle-sql-rbac.html
版权声明:本文为博客园博主 韩宗泽 原创,作者保留署名权!欢迎通过转载、演绎或其它传播方式来使用本文,但必须在明显位置给出作者署名和本文链接!个人博客,能力有限,若有不当之处,敬请批评指正,谢谢!
一套能体现 RBAC 的表结构设计的更多相关文章
- 数据库表结构设计方法及原则(li)
数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满 ...
- mysql 用户表结构设计,第三方登录
说起用户表,大概是每个应用/网站立项动工(码农们)考虑的第一件事情.用户表结构的设计,算是整个后台架构的基石.如果基石不稳,待到后面需求跟进了发现不能应付,回过头来反复修改用户表,要大大小小作改动的地 ...
- MySQL基于左右值编码的树形数据库表结构设计
MySQL基于左右值编码的树形数据库表结构设计 在关系型数据库中设计树形的数据结构一直是一个十分考验开发者能力的,最常用的方案有主从表方案和继承关系(parent_id)方案.主从表方案的最大缺点 ...
- 通过Excel生成PowerDesigner表结构设计
说明:近期做部分表结构设计,在word里设计调整好了,需要整理到PowerDesigner中,但是手工录入太麻烦. 找了个工具(地址:http://www.cnblogs.com/hwaggLee/p ...
- CMDB资产管理系统开发【day25】:表结构设计2
表结构设计1详细注释代码 # _*_coding:utf-8_*_ __author__ = 'luoahong' from assets.myauth import UserProfile from ...
- python --商品规格--表结构设计
商品规格表结构设计 商品规格包括规格组合.规格项,规格项为规格组的成员. 规格组 |-规格项:规格值 |-规格项:规格值 规格组 |-规格项:规格值 |-规格项:规格值 同一类商品的规格相同. 方案一 ...
- 表结构设计器(EZDML)1.98版公布
表结构设计器(EZDML)是一个免费的数据库建表的小软件,可高速的进行数据库表结构设计.建立数据模型,能迅速生成代码模板.简单界面和字典文档,支持脚本编程. 新版本号大概有下面改进: 1.修复了部 ...
- 巨蟒django之CRM1 需求分析&&表结构设计&&注册登录验证
1.需求分析 .项目 ()业务 ()权限的管理 .CRM customer relationship management 客户关系管理系统 .谁来使用CRM? 销售&&班主任& ...
- ofbiz数据库表结构设计(3)- 订单ORDER
对于订单来说,主要的表就是ORDER_HEADER和ORDER_ITEM.ORDER_HEADER就是所谓的订单头,一条记录代表一条订单. ORDER_PAYMENT_PREFERENCE是订单的支付 ...
随机推荐
- 继承中的prototype与_proto_
继承的核心是原型链,它的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 例:SubType.prototype = new SuperType (); var instance = ...
- C++标准库第二版笔记 2.1
C++标准库第二版笔记 2.1 1 Range-Based for 循环 for ( decl : coll ) { statements; } // collaborate 类似C# foreach ...
- (转载)sqlmap用户手册详解
文章转载自 http://www.vuln.cn/2035 当给sqlmap这么一个url (http://www.target.com/sqlmap/mysql/get_int.php?id=1) ...
- Eclipse搭建SSH框架(Struts2+Spring+Hibernate)
见识少的我经过一天多的研究才知道,在MyEclipse中搭好的框架的配置文件和jar包是通用的.接下来——亮剑! 工具:Eclipse+Tomcat+Mysql 一.先在Eclipse中配置好Tomc ...
- linux下使用iptables统计ip/端口流量
1.添加ip/端口的流量统计 入网流量: iptables -A INPUT -d 出网流量: iptables -A OUTPUT -s 2.查看流量统计信息 iptables -L -v -n - ...
- HTML5开发和布局(待补充)
移动开发准则 1.尽量使用单页面开发(SPA) 2.慎选UI框架 3.动画.特效使用(60fps) **浏览器消耗最小的CSS属性** 位置:transform:translate(x,y,z) 大小 ...
- gii配置
下载完成后不要设置urlManager http://zjm.testyii.com/index.php?r=gii 即可进入gii页面 或者是 将'urlManager'=> [ 'enabl ...
- 解读IEEE 7417的软件体系架构描述的概念模型
本文将解读标准IEEE Std 1471-2000(密集型软件的体系结构描述推荐实施规程)的概念模型图部分,从中一窥作为软件架构师的进行架构设计的思考角度与策略.如果我们把世界当做一场游戏,现在要玩的 ...
- Maven4-仓库
坐标和构建是一个构件在Maven世界中的逻辑表示方式,而其物理表示方式是文件.Maven通过仓库来统一管理这些文件 什么是Maven仓库? 在Maven世界中,任何一个依赖,插件或者项目构建的输出,都 ...
- 使用Spring+MySql实现读写分离(二)spring整合多数据库
紧接着上一章,因为现在做的项目还是以spring为主要的容器管理框架,所以写以下spring如何整合多个数据源. 1. 背景 我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较 ...