" 1、RBAC 概述 " " 2、表結構設計 " "2.1、用戶表" "2.2、角色表" "2.3、許可權表" "2.4、用戶角色(關係)表" "2.5、角色許可權(關係)表" " 3、總結 " 1、RBAC 概述 RBAC(Role Based Access Control)即基於角色的訪問控制,是 ...
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
版權聲明:本文為博客園博主 韓宗澤 原創,作者保留署名權!歡迎通過轉載、演繹或其它傳播方式來使用本文,但必須在明顯位置給出作者署名和本文鏈接!個人博客,能力有限,若有不當之處,敬請批評指正,謝謝!