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
版權聲明:本文為博客園博主 韓宗澤 原創,作者保留署名權!歡迎通過轉載、演繹或其它傳播方式來使用本文,但必須在明顯位置給出作者署名和本文鏈接!個人博客,能力有限,若有不當之處,敬請批評指正,謝謝!