在互聯(lián)網(wǎng)項目中,權(quán)限設(shè)計是一個非常重要且基礎(chǔ)的安全能力。
一個合理、清晰、可擴展的權(quán)限體系可以幫助企業(yè)或團隊有效地進行用戶、資源以及操作的管控。
當(dāng)前主流的權(quán)限設(shè)計模型主要包括 RBAC(基于角色的訪問控制) 和 ACL(訪問控制列表)
一、RBAC(Role-Based Access Control,基于角色的訪問控制)
1. 核心概念
RBAC 模型主要將權(quán)限與角色綁定,而不是直接將權(quán)限分配給用戶。核心概念包括:
- 用戶(User):需要被授權(quán)操作系統(tǒng)資源的主體,一般是業(yè)務(wù)中的個人賬號或系統(tǒng)賬號。
- 角色(Role):用戶所扮演的身份,每種角色代表一組權(quán)限的集合。例如:管理員、運營人員、普通用戶等。
- 權(quán)限(Permission):可以執(zhí)行的操作或可以訪問的資源。例如:查看用戶列表、編輯用戶信息、刪除用戶數(shù)據(jù)等。
- 會話(Session):用戶與系統(tǒng)之間的一次交互會話,用戶在會話過程中通過所具有的角色來訪問資源。
在 RBAC 模型中,用戶通過“被分配角色”來間接獲得權(quán)限,這樣就將權(quán)限管理和角色管理分離,提高了系統(tǒng)靈活性和可維護性。
2. 模型變體
RBAC 根據(jù)具體的業(yè)務(wù)復(fù)雜程度和安全需求,可進一步衍生出以下幾種典型變體:
-
RBAC0(核心 RBAC)
只包含最基本的用戶—角色—權(quán)限映射關(guān)系,適合簡單的權(quán)限體系場景。 -
RBAC1(基于層次關(guān)系的 RBAC)
在 RBAC0 基礎(chǔ)上增加了角色繼承/層次結(jié)構(gòu)(Role Hierarchies)。上級角色可以擁有下級角色的全部權(quán)限,方便管理者在角色需求多級化時快速復(fù)用權(quán)限。 -
RBAC2(基于約束的 RBAC)
增加了一些約束機制(Separation of Duties,Least Privilege 等),提高安全性。例如一個用戶不能同時擁有關(guān)鍵操作的兩個角色(如財務(wù)審批和財務(wù)審核角色)。 -
RBAC3(綜合模型)
結(jié)合了 RBAC1 和 RBAC2 的特性,同時包含角色繼承和更嚴(yán)格的訪問約束,適用于對安全合規(guī)性要求較高、角色關(guān)系復(fù)雜的大型企業(yè)系統(tǒng)。
3. 優(yōu)點與缺點
優(yōu)點
- 易于管理:只需在角色上進行權(quán)限分配,然后將用戶與角色關(guān)聯(lián)即可,方便對角色進行統(tǒng)一授權(quán)和回收。
- 可擴展性強:新增需求時,可以只新增或修改角色和權(quán)限的映射關(guān)系,而不需頻繁地更新對每個用戶的權(quán)限。
- 適合組織化場景:尤其是公司內(nèi)部或管理后臺,有明顯的崗位角色區(qū)分,RBAC 能更好地映射業(yè)務(wù)邏輯。
缺點
- 細粒度受限:對于精細化權(quán)限控制(例如,對同一資源的某些字段可以訪問、某些字段不可以訪問),RBAC 需要進一步結(jié)合其他方法或更細分的角色才能實現(xiàn)。
- 角色膨脹:當(dāng)業(yè)務(wù)中需要細分的權(quán)限非常多,角色可能會被不斷拆分,導(dǎo)致數(shù)量不斷上升,運維成本加大。
二、ACL(Access Control List,訪問控制列表)
1. 核心概念
ACL 模型是一種更細粒度的訪問控制方法,用于定義對特定資源或?qū)ο蟮臋?quán)限列表。在許多文件系統(tǒng)及網(wǎng)絡(luò)層安全策略中常見到 ACL 的應(yīng)用。在互聯(lián)網(wǎng)項目中可用來做資源級或?qū)ο蠹?/strong>的權(quán)限判定。
- 主體(Subject):可發(fā)起訪問請求的實體,比如用戶、用戶組或其他進程。
- 客體(Object / Resource):被訪問的資源,如文件、數(shù)據(jù)表、接口等。
- 權(quán)限(Permission):可對資源執(zhí)行的操作,如讀取(Read)、寫入(Write)、修改(Modify)、刪除(Delete)等。
- 訪問控制條目(ACE):每個資源上都維護一份列表,記錄了哪些主體擁有哪些具體的權(quán)限。
在 ACL 模型下,每個對象(資源)都有一個訪問控制列表,列舉了可以訪問該對象的主體及其對應(yīng)操作。如果某個用戶不在列表中,則沒有權(quán)限訪問或執(zhí)行對應(yīng)操作。
2. 常見實現(xiàn)方式
文件系統(tǒng)中的 ACL
常見的如 UNIX 系統(tǒng)中的chmod、chown、chgrp等命令背后就是最基本的 ACL 實現(xiàn),同時在現(xiàn)代操作系統(tǒng)中也支持更豐富的 ACL 機制以指定更細粒度的訪問規(guī)則。數(shù)據(jù)庫級或表級 ACL
數(shù)據(jù)庫經(jīng)常需要為不同用戶或應(yīng)用設(shè)置不同訪問級別,比如某個數(shù)據(jù)表僅允許業(yè)務(wù) A 讀寫,業(yè)務(wù) B 只讀,其他無權(quán)限等。微服務(wù) API ACL
通過 API 網(wǎng)關(guān)或服務(wù)的配置來限制哪些客戶端或 Token 可以訪問哪些 API,以及對應(yīng)的操作權(quán)限等。
3. 優(yōu)點與缺點
優(yōu)點
- 細粒度控制:能夠做到對單一資源、單個操作的精確控制,滿足更高的安全需求。
- 靈活性:可以針對不同對象設(shè)置單獨的訪問策略,多主體、多權(quán)限維度下依然可以靈活實現(xiàn)各種業(yè)務(wù)需求。
缺點
- 管理復(fù)雜度較高:在規(guī)模較大的系統(tǒng)中,每個資源都可能需要維護自己的權(quán)限列表,一旦資源或主體增多,維護難度會明顯上升。
- 適用范圍:ACL 更適合資源分散且要求逐一配置的場景,不太適合管理后臺等對角色有較強需求的場合。
三、RBAC 與 ACL 的對比及應(yīng)用場景
| 對比維度 | RBAC(基于角色) | ACL(訪問控制列表) |
|---|---|---|
| 授權(quán)顆粒度 | 粗粒度,基于角色來分配權(quán)限 | 細粒度,可針對單一資源逐一授權(quán) |
| 適用場景 | 組織化程度高、角色分明的業(yè)務(wù)后臺、企業(yè)內(nèi)部系統(tǒng)等 | 需要靈活定義不同資源權(quán)限,特別是文件、數(shù)據(jù)庫或特定的微服務(wù)接口 |
| 維護成本 | 角色設(shè)計得當(dāng)時整體管理成本較低 | 對資源和主體的數(shù)量敏感,資源/主體越多,ACL 配置管理越復(fù)雜 |
| 擴展性 | 新增角色、調(diào)整角色繼承相對簡單 | 新增或變更資源需要逐一修改 ACL 列表 |
| 安全性 | 通過角色繼承、權(quán)限分離等方式滿足安全需求 | 可以做更精細的權(quán)限設(shè)置,但要求更嚴(yán)格的維護和監(jiān)控 |
在互聯(lián)網(wǎng)項目中,RBAC 與 ACL 并非完全對立,在真實業(yè)務(wù)中經(jīng)常會結(jié)合兩者的優(yōu)點來使用,比如:
- 基礎(chǔ)采用 RBAC:先給用戶分配合適的角色,確保大部分通用操作適配角色權(quán)限。
- 局部結(jié)合 ACL:針對少數(shù)需要更細粒度管控的核心資源(如文件、配置項、部分 API 端點等),用 ACL 做到更加精準(zhǔn)的權(quán)限授予或限制。
四、實踐建議
角色體系與組織結(jié)構(gòu)保持一致
在設(shè)計 RBAC 時,可以先梳理組織架構(gòu)或常見崗位,按業(yè)務(wù)需求將權(quán)限進行歸納分組,避免角色過度細分帶來的管理復(fù)雜度。公共權(quán)限與差異化權(quán)限分離
對于多數(shù)用戶都需要的通用權(quán)限,可放在公共角色;少部分特定人群需要的額外權(quán)限,可單獨定義角色或使用 ACL 進行精細管控。分層管理
對大型系統(tǒng)可采用多層次或多級 RBAC 設(shè)計,在上層對大的角色進行定義,在下層再用細分權(quán)限或 ACL 針對特定資源或?qū)ο筮M行進一步控制。完善的審計和變更機制
不論是 RBAC 還是 ACL,在權(quán)限變更時都要做好審計、審批流程,留存操作記錄,避免誤操作或被惡意修改。安全與性能平衡
要同時關(guān)注系統(tǒng)性能與安全性,過度細粒度的權(quán)限檢查會增加數(shù)據(jù)庫或認證中心的查詢壓力;而過于粗放的權(quán)限則可能帶來安全風(fēng)險。可以借助緩存或智能權(quán)限引擎(如基于策略的 ABAC)來優(yōu)化性能和靈活性。
總結(jié)
在互聯(lián)網(wǎng)項目中,RBAC(基于角色的訪問控制)和ACL(訪問控制列表)是兩種常見且主流的權(quán)限設(shè)計模型。
- RBAC:更關(guān)注組織化的角色定義和分配,適合大多數(shù)企業(yè)后臺或內(nèi)部管理系統(tǒng),通常與組織架構(gòu)緊密結(jié)合,易于維護和擴展。
- ACL:更關(guān)注資源的細粒度權(quán)限控制,適合對敏感或特定資源進行逐一配置、靈活度更高,但對規(guī)模和管理提出更高要求。
實際業(yè)務(wù)中常常將 RBAC 與 ACL 結(jié)合:用 RBAC 管理大部分通用權(quán)限,用 ACL 處理特定資源的精細化權(quán)限管控。通過合理的模型搭建和運維策略,可以在確保安全合規(guī)的同時,提升系統(tǒng)的管理效率和靈活性。