《數據資產管理核心技術與應用》讀書筆記- 第七章- 數據權限與安全(一)
《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,全書共分10章,第1章主要讓讀者認識數據資產,了解數據資產相關的基礎概念,以及數據資產的發展情況。第2~8章主要介紹大數據時代數據資產管理所涉及的核心技術,內容包括元數據的采集與存儲、數據血緣、數據質量、數據監控與告警、數據服務、數據權限與安全、數據資產管理架構等。第9~10章主要從實戰的角度介紹數據資產管理技術的應用實踐,包括如何對元數據進行管理以發揮出數據資產的更大潛力,以及如何對數據進行建模以挖掘出數據中更大的價值。
關注清哥聊技術公眾號,了解更多技術文章
圖書介紹:數據資產管理核心技術與應用
今天主要是給大家分享一下第七章的的內容:
第七章的標題為數據權限與安全 -> 關注清哥聊技術公眾號,了解更多技術文章
在數據資產的應用中,數據安全、權限以及隱私保護是數據資產管理中絕對不能忽視的核心要素,在數據資產中,需要建立完善的權限管理和安全保障機制,以確保在數據的整個生命周期中,不會出現數據在未經授權的情況下被濫用,從而保護數據的安全和隱私不受侵犯。
1、常見的權限設計模式
在軟件工程的發展過程中,隨著軟件技術和各類軟件產品的不斷發展,人們從實踐中總結出了很多常用的權限設計模式,每一種權限設計模式都有其自身的特點,如下表所示。
|
權限設計模式 |
優點 |
缺點 |
|
基于角色的訪問控制(RBAC):給每個訪問的用戶定義角色,通過角色來控制權限。 |
對于頁面、菜單、按鈕等的訪問權限能夠很好的去控制,便于職責分離等 |
沒有提供操作順序等的復雜又靈活的權限控制機制,對于一些復雜的權限場景無法實現 |
|
基于屬性的訪問控制(ABAC):通過動態的計算一組或者多組屬性來判斷是否滿足某種權限的機制,比如某個操作是否有權限通常是通過對象、資源、操作和環境信息等多組屬性來共同完成判斷的。 |
權限模型非常靈活,可以實現不同粒度的權限控制,可擴展性很強 |
規則過于復雜,權限模型在技術實現時通常非常難,并且不易于維護 |
|
基于對象的訪問控制(OBAC):給每個訪問的用戶分配不同的受控對象, 將訪問權限直接與受控對象相關聯 |
通過定義了受控對象的訪問控制權限,當受控對象的屬性發生變化,或者出現繼承、衍生等操作時,不用去更新訪問主體的權限,而只需要修改受控對象的相應訪問控制權限即可,可以減少訪問主體的權限管理和降低授權管理的復雜度 |
在軟件產品中實際應用較少,缺乏實際的軟件產品的實踐經驗 |
從表中可以看到,每一種權限模式都會有其自身的優點和缺點,在實際使用時,需要根據對應的數據產品的特點來選擇哪種權限設計模式是最合適的。
1.1、基于角色的訪問控制
基于角色的訪問控制又叫RBAC權限控制模式,是Role-Based Access Control的簡寫,是一種最常見的權限控制模式,廣泛的應用于軟件工程或者網絡安全都很多領域中。
RBAC的核心機制就是將權限分配給角色,再將角色分配給需要授權的用戶,來實現對軟件系統的訪問控制,如下圖所示

《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,作者為張永清等著
在RBAC權限模型中,通常會先有一個管理員的角色,管理員擁有最高的所有軟件系統資源的訪問權限,然后將管理員的角色賦予給管理員用戶,然后管理員用戶就可以通過分配和調整角色來管理其他的訪問用戶的權限了。
在RBAC中雖然引用了角色的概念,因為當訪問的用戶的數量非常大時,就要給每個訪問的用戶逐一進行賦權,在系統運維時會是一件很繁瑣的事情,所以在RBAC中權限控制中,建議
- 引入用戶組的概念,每個用戶組中可以批量關聯多個用戶,除了可以給用戶授權外,還可以給用戶組授權,用戶的訪問權限就可以由用戶自己的角色和用戶組的角色兩部分組成,如果是通用的權限,只需要批量將用戶添加到用戶組中即可,如下圖所示。

- 除了用戶可以綁定角色外,還可以在系統中支持角色批量綁定用戶,這樣當存在大量的訪問用戶時,可以在操作角色時,通過批量勾選的方式讓一個角色可以同時綁定多個訪問的用戶,這樣就減輕了管理員逐一給每個訪問用戶分配權限帶來的大量工作量了。
RBAC通常適用于以下的場景:
- 通過組織架構來管理用戶和訪問的軟件系統,不同組織下的員工可以分別授予不同的角色,以便根據其工作崗位限制對應的用戶對軟件系統資源的訪問。
- 還適用于多租戶的軟件系統,在多租戶的軟件系統中,RBAC的權限控制模型剛好可以完成不同租戶之間的訪問的隔離和管理,每個租戶可以分配不同的角色,每個角色定義相應的系統權限。
1.2、 基于屬性的訪問控制
基于屬性的訪問控制又叫ABAC權限控制模式,是Attribute-Based Access Control的簡寫,是一種比較復雜的權限控制模式,是通過多種屬性相結合的方式來實現的權限訪問控制。ABAC的權限控制模式可以解決RBAC權限控制模式中一些不足或者無法實現的權限控制,如下圖所示。
《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,作者為張永清等著
ABAC與RBAC之間的主要區別在于授權的方式不一樣,RBAC按照角色授予訪問權限,ABAC可以根據用戶屬性、環境屬性、資源屬性等多種屬性綜合計算來確定訪問權限。而且ABAC 可以更加細粒度控制權限和能根據上下文動態執行權限判斷,而RBAC通常只能基于靜態的參數進行權限的判斷。在開源社區中,Apache Ranger就是ABAC權限控制模式的典型項目,其底層的相關實現可以參考網址https://ranger.apache.org/blogs/adventures_in_abac_1.html和https://ranger.apache.org/blogs/adventures_in_abac_2.html中的相關介紹。
1.3、 基于對象的訪問控制
基于對象的訪問控制又叫OBAC權限控制模式,是Object-based Access Control的簡寫,OBAC權限控制會從受控對象的角度出發,將訪問主體(比如待訪問的系統)的訪問權限直接與受控對象相關聯,如下圖所示。

策略和規則是OBAC權限訪問控制的核心,同時允許用戶對策略和規則進行重用、繼承和派生操作,減少訪問主體的權限管理,降低授權數據管理的復雜性。
2、數據權限
數據權限通常指的是對待訪問的數據倉庫或者數據湖中的數據表的權限的控制,數據權限的控制通常包含數據表操作權限的控制以及數據表查詢權限的控制,如下圖所示。《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,作者為張永清等著

從圖中可以看到,數據權限的類型通常包括表結構的權限控制、表中數據的變更以及表中數據的查詢等這幾種。
- 表結構的修改:通常指的是表的創建,表結構變更(比如增加字段或者修改字段等),這塊的權限通常由管理員這個角色來負責管理。
- 數據變更:通常指的是數據寫入、修改、刪除等,這些操作由于涉及到數據的處理,通常由數據開發工程師來負責維護。
- 數據查詢:數據查詢一般是直接把數據開放給相關的業務需求直接做查詢或者給數據服務使用,所以這塊主要是針對數據查詢權限的控制,而數據查詢權限的控制又主要包括列(字段)權限控制和數據行的權限控制,如下圖所示。

列的權限控制主要是有些列不能給對應的業務做查詢,比如一些包含用戶敏感信息(比如密碼)的列。行的權限主要是不同的用戶或者不同的業務可能只能看到部分行中的數據,比如一個組織架構下有很多部門,每個部門只能看到每個部門下的數據,那這時候就需要對數據行做權限控制了。
從對數據權限的分析來看,基于角色的RBAC權限控制模式比較適合數據權限的控制,因為數據的管理通常也是基于角色來完成的,不同的角色完成不同的操作,這樣在數據管理是,職責和權責都相對比較分明。
2.1、列權限控制
列權限控制通常是對數據湖或者數據倉庫中的表的列的訪問進行權限控制。訪問數據的方式通常包含如下兩種:
- SQL直接查詢訪問:顧名思義就是直接連接到數據湖或者數據倉庫中,直接通過SQL語句查詢的方式來讀取數據。
- 通過數據服務訪問:雖然是通過數據服務的方式來獲取數據,但是數據服務的底層通常還是連接到數據湖或者數據倉庫中,通過SQL查詢的方式獲取數據。
所以數據權限中列權限的控制,其實會直接體現到對SQL查詢語句的權限控制,如下圖7-2-3所示為列權限控制的技術實現設計圖。
從圖中可以看到,列權限控制核心技術在于SQL語句的解析,需要解析出SQL語句中涉及到了哪些表以及對應的哪些字段,然后再去和權限數據表進行比對,看是否訪問的表以及字段都擁有了對應的權限。
解析一條SQL語句中涉及到了哪些表以及對應的哪些字段,通常還可以借助第三方的工具包,在開源社區中有很多這樣的工具包,通常數據倉庫或者數據湖的底層實現中也有對應的SQL語句語法分析器,通過官方的代碼,通??梢愿鼫蚀_的分析出一條SQL語句中涉及到的表以及對應的字段有哪些。比如Apache Hive 在底層解析SQL語句時就是用的Apache Calcite來實現的,Apache Calcite是一個開源的SQL解析工具,在解析SQL語句時會將各種語法的SQL語句解析成AST(Abstract Syntax Tree),然后再通過AST來獲取SQL語句中涉及到表和字段。Apache Calcite除了可以用于SQL解析外,還可以用于SQL校驗、查詢優化等,除了Hive外,Apache Flink底層也使用了Apache Calcite 來作為SQL的解析工具。Apache Calcite的Github 地址為https://github.com/apache/calcite/,相關的更多介紹可以參考官方文檔網址:https://calcite.apache.org/docs/。

對于 關系型數據庫的SQL解析,通??梢允褂肁pache Jsqlparser來實現, Jsqlparser也是Apache 下的一個開源項目,其Github的訪問地址為:https://github.com/JSQLParser/JSqlParser,如下圖所示?!稊祿Y產管理核心技術與應用》是清華大學出版社出版的一本圖書,作者為張永清等著

Jsqlparser解析時支持的數據庫類型包括Oracle、MS SQL Server、Sybase、Postgres、MySQL 、MariaDB、DB2等。在使用時,可以通過如下Maven 的方式引入Jsqlparser 。
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
</dependency>
如下圖所示,為Jsqlparser 官網提供的一個解析Select查詢的SQL語句的示例代碼,下圖中是對“select 1 from dual where 1=1”這條SQL語句進行的表和字段的解析,從解析的結果可以看到,通過Jsqlparser 這個工具,可以獲取到查詢的表、字段以及查詢的條件等。除了支持Select 查詢語句的解析,Jsqlparser還可以支持:
- Insert 語句解析:比如Insert Into table_xxx(column1, column2, column3) Values('xx', 'xx', 'xx')以及同時帶有Insert和Select 的語句,比如Insert Into table_xxx(column1, column2, column3) Select column1, column2, column3 From table_xxxname。
- Update 語句解析:比如Update table_xxx Set column1 = 'xx' , column2='xx' Where column4='xx'。
- Delete 語句解析:比如Delete From table_xxx Where column4='xx'。
更多有關Jsqlparser對SQL語句的解析介紹,可以參考網址https://jsqlparser.github.io/JSqlParser/usage.html#。

2.2、行權限控制
行的權限控制和列的權限控制很類似,行權限控制通常是對數據湖或者數據倉庫中的表的數據行的訪問進行權限控制,也就是在一個表中,有些數據記錄是可以訪問的,有些數據記錄是不可以訪問的。不管是行還是列,數據表的訪問主要都是通過SQL語句來查詢的,所以數據行的權限控制也是直接體現到對SQL查詢語句的權限控制。另外數據行的權限控制本質上也是需要借助列來實現和完成。例如一個組織架構下有很多部門,在一張數據表中,每個部門只能看到每個部門下的數據,如下圖所示,在查詢圖中右側的數據表時,需要在SQL語句中通過部門ID這列來做數據的過濾以達到數據行的權限控制的效果?!稊祿Y產管理核心技術與應用》是清華大學出版社出版的一本圖書,作者為張永清等著

從圖中可以看到,行的權限控制是需要借助列來做過濾以達到行權限控制,也就是說如果要實現行的權限控制,那么數據表中需要有一些和權限控制相關的列作為過濾條件,比如用戶ID,部門ID,角色ID 等。
如下圖所示為行權限控制的技術實現設計圖,從圖中可以看到,行權限控制的關鍵在于SQL語句中Where 條件的拼接,需要把行控制的規則動態的拼接到Where條件做數據過濾以達到行權限的控制。

通常來說,行權限控制要比列權限控制更加復雜,所以行權限控制的配置通常會通過配置表達式的方式來實現,如下圖所示。

在做SQL查詢時,會先將表達式解析為可以拼接到SQL查詢的Where 條件后的列規則,比如"Where 字段xxx=xxxx" 或者"Where 字段xxx In (Select 字段xxx From Table_xxxx)"等。
未完待續 《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,作者為張永清等著
浙公網安備 33010602011771號