1、RBAC 概述

RBAC(Role-Based Access Control)即基于角色的访问控制,是一种权限设计思想。在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员来获得这些角色的权限。相较传统的访问控制(自主访问、强制访问)来说,RBAC 能更好的支持最小权限、责任分离和数据抽象等原则,极大地简化了权限的管理。

在一个组织中,角色是为了完成各种工作而创造,而用户则根据他的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。每个角色都拥有与之相匹配的权限,角色可依据新的需求而赋予新的权限,而权限也可根据需要而从某角色中回收。这样的权限设计,结构清晰、管理方便,也能囊括更广泛的客观情况。

RBAC 的优点主要在于易用和高效。给用户授权时只需要对角色授权,然后将相应的角色分配给用户即可;从技术角度讲,思路清晰且易于实现,且后期维护时只需要维护关系模型,显得简单而高效。

RBAC 的缺点主要有两个:一个是在进行较为复杂的权限校验时需要不断地遍历和递归,会造成一定的性能影响。另一个是缺少数据权限模型,基于 RBAC 来实现数据权限校验比较复杂和低效。

经过 20 多年的发展,RBAC 已被广泛应用到很多领域的系统或软件,同时也产生了许多应用模型。本文的理论部分到此结束,有兴趣了解更多的朋友可参考:

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 的表结构设计的更多相关文章

  1. 数据库表结构设计方法及原则(li)

    数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满 ...

  2. mysql 用户表结构设计,第三方登录

    说起用户表,大概是每个应用/网站立项动工(码农们)考虑的第一件事情.用户表结构的设计,算是整个后台架构的基石.如果基石不稳,待到后面需求跟进了发现不能应付,回过头来反复修改用户表,要大大小小作改动的地 ...

  3. MySQL基于左右值编码的树形数据库表结构设计

    MySQL基于左右值编码的树形数据库表结构设计   在关系型数据库中设计树形的数据结构一直是一个十分考验开发者能力的,最常用的方案有主从表方案和继承关系(parent_id)方案.主从表方案的最大缺点 ...

  4. 通过Excel生成PowerDesigner表结构设计

    说明:近期做部分表结构设计,在word里设计调整好了,需要整理到PowerDesigner中,但是手工录入太麻烦. 找了个工具(地址:http://www.cnblogs.com/hwaggLee/p ...

  5. CMDB资产管理系统开发【day25】:表结构设计2

    表结构设计1详细注释代码 # _*_coding:utf-8_*_ __author__ = 'luoahong' from assets.myauth import UserProfile from ...

  6. python --商品规格--表结构设计

    商品规格表结构设计 商品规格包括规格组合.规格项,规格项为规格组的成员. 规格组 |-规格项:规格值 |-规格项:规格值 规格组 |-规格项:规格值 |-规格项:规格值 同一类商品的规格相同. 方案一 ...

  7. 表结构设计器(EZDML)1.98版公布

    表结构设计器(EZDML)是一个免费的数据库建表的小软件,可高速的进行数据库表结构设计.建立数据模型,能迅速生成代码模板.简单界面和字典文档,支持脚本编程. 新版本号大概有下面改进: 1.修复了部 ...

  8. 巨蟒django之CRM1 需求分析&&表结构设计&&注册登录验证

    1.需求分析 .项目 ()业务 ()权限的管理 .CRM customer relationship management 客户关系管理系统 .谁来使用CRM? 销售&&班主任& ...

  9. ofbiz数据库表结构设计(3)- 订单ORDER

    对于订单来说,主要的表就是ORDER_HEADER和ORDER_ITEM.ORDER_HEADER就是所谓的订单头,一条记录代表一条订单. ORDER_PAYMENT_PREFERENCE是订单的支付 ...

随机推荐

  1. C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速

    Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...

  2. 第七周助教工作总结——NWNU李泓毅

    本周应批改作业0,实批改作业0 因本周开始软工团队项目,故本周几位助教正在制定团队项目题目并且处理相关工作. 这一次的作业将于4月17日前进行提交,作业为软件研发团队的组建.

  3. Vscode调试C的多文件工程配置

    关于Vscode的C语言的单文件调试,可以参见VScode调试C语言的设置(win10,Linux),里面已经说明基本的配置和使用. 下面说明一下如何调试多个文件的工程,首先写一个简单的工程,其中工程 ...

  4. JavaScript深拷贝

    1,JSON.parse(JSON.stringify(obj)) 使用JSON实现深拷贝必须要求对象是符合JSON安全的,不了解JSON安全的自行百度. 2,lodash/underscore  _ ...

  5. 复习支持向量机(SVM)没空看书时,掌握下面的知识就够了

    支持向量机(support vector machines, SVM)是一种二类分类模型.它的基本模型是定义在特征空间上的间隔最大的线性分类器:支持向量机还包括核技巧,这使它成为实质上的非线性分类器. ...

  6. appium:运行脚本时,报404的解决办法

    对于报404的错,不要怀疑,在环境正常的情况下,一定是你的端口被占用了. 就用:查看端口:netstat -aon|findstr 5037 查看进程:tasklist /fi "PID e ...

  7. Node.js创建本地简易服务器

    创建简易的本地服务器 安装node.js 在项目下,通过npm init -y创建package.json文件 通过npm install mime --save加载mime插件 创建server.j ...

  8. 用python实现文件自动上传

    一.简介 用python实现文件自动上传,主要源于在测试项目中想实现自动化上传文件功能,无须手工输入.比如从windows到Linux,或从Linux到windows,或从Linux到Linux. 主 ...

  9. angular-指令

    ng-app 作用域 ng-init 声明 module 模块 ng-model 双向绑定 ng-bind 绑定 angular是一个MVC框架:即 M------------------module ...

  10. Android中RecyclerView出现java.lang.IndexOutOfBoundsException

    在RecyclerView更细数据时出现java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder ...