如何設計應用系統的資料許可權管理

大龄码农有梦想發表於2024-07-15

一、前言

在開發應用系統時,都離不開許可權的設計,許可權設計 = 功能許可權 + 資料許可權。而功能許可權,在業界常常是基於RBAC(Role-Based Access Control)的一套方案。而資料許可權,則根據不同的業務場景,則許可權設計不盡相同,可以有不同的技術解決方案。按照應用系統許可權型別劃分,可進一步細分為選單許可權、按鈕許可權、欄位許可權、介面許可權、資料行許可權、資料列許可權、登入許可權等。本文重點講資料許可權管理,尤其是資料行級許可權的控制與管理。

二、什麼是資料許可權

資料許可權是一種重要的資料安全措施,它可以幫助組織機構保護敏感資料並確保不同使用者只能訪問他們被授權的資料。資料許可權分資料行許可權和資料列許可權兩種。

資料行許可權是一種資料許可權型別,它控制使用者能夠訪問和操作的資料行的級別。行級許可權通常是指對特定資料行的訪問和操作許可權。例如,在一個銷售訂單管理系統中,銷售人員可能只能檢視或編輯自己的銷售訂單,而部門經理則可以檢視或編輯整個部門的銷售訂單。這種許可權控制確保了不同使用者只能訪問和操作他們被授權的資料行。

資料列許可權則是指對特定資料列的訪問許可權。例如,在一個包含客戶資訊的表中,某些使用者可能只能檢視客戶的姓名和聯絡方式,而其他使用者則可以檢視客戶的詳細地址和銀行賬戶資訊。這種許可權控制確保了不同使用者只能訪問他們被授權的列。

三、資料許可權有哪些技術方案

應用系統的資料行許可權實現通常依賴於以下方法之一或多種組合:

1. 資料庫級別的許可權控制

- 行級安全策略(RLS):使用資料庫管理系統提供的行級安全策略功能。例如,PostgreSQL 的 RLS 允許在表上定義訪問規則,控制使用者對特定行的訪問。

- 資料庫檢視:建立檢視,僅顯示符合使用者許可權的資料行。透過限制檢視中的資料內容,控制使用者能夠看到的資料。

2. 使用者角色和許可權管理

- 角色分配:將使用者分配到不同的角色,併為每個角色分配特定的行級許可權。這樣可以透過管理角色的許可權來控制使用者對資料行的訪問。

- 動態許可權分配:在應用程式中動態地分配和管理使用者許可權,根據使用者的身份或其他屬性,決定其對資料行的訪問許可權。

3. 自定義應用邏輯

- 業務邏輯控制:在應用程式中編寫自定義邏輯來控制資料行的訪問。這可能涉及特定的許可權檢查、過濾器或攔截器來確保使用者只能訪問其有許可權的資料行。

4. 標籤/標記級別的安全策略

- 資料標籤化和標記化:為資料行分配標籤或標記,並在應用程式中根據使用者的標籤或標記來控制其訪問許可權。只有匹配標籤的使用者才能訪問特定的資料行。

5. 資料加密和解密

- 資料加密技術: 對敏感資料行進行加密,並透過金鑰管理系統控制使用者對加密資料行的訪問許可權。

實施注意事項:

- 許可權設計與維護: 設計清晰的許可權結構,並定期審查和更新許可權設定,以確保安全性。

- 安全審計和監控:記錄和監控使用者對資料行的訪問情況,以便及時發現異常活動並採取措施。

- 效能最佳化:行級許可權控制可能會對系統效能產生一定影響。因此,在設計和實施時需考慮最佳化方法,以減少對系統效能的負面影響。

選擇合適的實現方法取決於應用系統的需求、資料庫技術、安全要求和效能考量。通常,結合不同的方法可以更好地滿足特定情況下的許可權需求。

四、資料許可權設計和應用效果

4.1. 資料許可權設計總體思路

採用上文中“三、資料許可權有哪些技術方案”的第2條和第3條組合實現,即“基於角色的動態許可權分配” +“自定義應用邏輯”實現資料行級許可權的控制。

這個方案最核心的地方就是資料許可權策略的設計了,抽象出來概念如下:

  • 資源:資料許可權的控制物件,業務系統中的各種資源。比如:訂單、客戶等。
  • 主體:使用者、部門、崗位、角色等,即給誰控制許可權。
  • 規則:用於資料許可權的規則定義,比如檢視合同額小於10萬的是資料。

以下是資料許可權的資料庫ER模型設計:

1-ER圖

在這個ER模型中,使用者表、角色表是主體,資源表存放的是資源(比如:選單、按鈕、介面等),資料許可權規則表存放是規則定義,而規則定義又跟資源有關係。主體、資源和規則如何發生關係呢,透過角色-資源-規則關係表進行統一管理,該表相當於是資料許可權生效的條件定義表了。

資料行級許可權技術方案核心如何配置行級許可權配置和資料查詢控制,基於角色的動態資料許可權控制實現邏輯如下:

(1)資料許可權規則定義:比如,檢視自己建立的資料;檢視本部門所有員工建立的資料;檢視訂單銷售金額大於10000的資料,等等。這些都是資料許可權規則的定義,有些規則具備通用性,可以提前抽取出來,有的規則跟業務有緊耦合關係,只能提供管理功能,讓客戶自己定義和管理。

(2)資料許可權角色分配:首先,需要對使用者和角色進行管理。每個使用者只能訪問其角色對應的行級資料。管理員可以根據業務需求設定不同的角色,併為每個角色分配相應的許可權。

(3)資料許可權執行控制:在使用者查詢資料時,系統會根據使用者的角色和許可權進行行級許可權控制。系統會根據使用者的角色和許可權,查詢資料規則定義表,動態生成相應的SQL查詢語句,從而只返回使用者有權訪問的資料行,簡單講就是動態拼接Select SQL語句,每個人查詢時執行的SQL都是動態生成的。

4.2. 資料許可權效能方面考慮

資料許可權定義後,業務模組每次訪問都會去請求驗證許可權,所以查詢資料許可權的規則需要高效,可以利用redis等快取服務把資料許可權規則快取起來,避免每次請求時查詢資料庫。

另外,資料查詢控制是透過SQL語句的where條件實現的,要儘量避免複雜的、多表關聯查詢,避免全表掃描的情況發生,合理的設定資料庫索引,來提升查詢效率。

4.3. 資料許可權應用實踐效果

雲程低程式碼開發平臺設計了嚴格的許可權控制策略,支援選單許可權、按鈕許可權、欄位許可權、介面許可權、資料行許可權、資料列許可權、登入許可權等多個維度的細粒度許可權控制,且提供了視覺化配置介面,系統管理員可進行靈活的許可權配置和控制。以下重點介紹資料行許可權的設計和應用效果。

(1)資料許可權定義

平臺提供了資料許可權配置功能,可線上配置和啟停資料許可權。在需要控制資料許可權的Java類的方法上增加@PermissionData註解,這裡錄入的資料許可權標識需要與@PermissionData註解的值保持一致,即“system:SysUser:list”。

3-資料許可權定義

(2)許可權規則定義

系統內建了一些常用資料規則,支援開箱即用,包括:

  • 檢視全部資料;
  • 僅本人建立的資料;
  • 僅本部門建立的資料;
  • 僅本部門及子部門建立的資料;

如果要自定義其他資料規則,可以在選單管理模組,找到新增的資料許可權節點,點選後面的資料規則按鈕,配置自定義的資料規則。

4-資料規則配置

比如:資料許可權規則配置(只看性別為男的使用者)。

4-自定義規則

【規則名稱】:寫有業務含義的描述

【規則欄位】:使用實體欄位名

【條件規則】:大於/大於等於/小於/小於等於/等於/包含/模糊/不等於/自定義SQL

【規則值】:指定值 ( 固定值/系統上下文變數 ),變數配置格式為#{變數名}。

(3)資料許可權分配

資料許可權規則定義完成後,把規則分配給相應的角色即可。進入角色授權選單,選中對應的角色,點選需要控制資料許可權的選單後方的標記,開啟資料許可權規則介面。在資料許可權規則介面裡,可以看到剛剛配置的資料規則,可以按照資料許可權控制需求,打勾對應的規則並保持資料許可權。

5-角色分配

  1. 資料許可權應用效果

直接查詢資料庫表的資料有15條,建立者為admin的資料有6條。

SELECT username,realname,sex,phone,email,create_by FROM `sys_user`

6-執行SQL

透過admin賬號登入後,檢視使用者管理模組,只能看到自己建立的資料了,說明資料許可權已經生效。

6-控制效果

線上免費體驗:http://www.yunchengxc.com

相關文章