在客戶環境中,有可能存在著一些表記載的信息需要被不同角色的用戶來訪問。應用需要控制表中的一些敏感信息只能被特定的用戶訪問。此前用戶一般只能通過創建多個視圖和開發應用增加邏輯等來做到這一點。
rcac 通過對表里面行和列的訪問權限控制,可以簡單的實現這種安全性需求。安全訪問得到控制,開發應用變的簡單。
DB2 Galileo,也就是 DB2 的 V10 版本是 IBM 在 2012 年推出的新產品。原先的 DB2 pureScale 可以說是 DB2 中的一個獨立分支,版本號為 9.8,現在也集成到了 DB2 Galileo 中。DB2 Galileo 不僅集成了 DB2 pureScale,在很多方面也都有大的改進,并且開發了許多新的功能。例如在原先杰出的壓縮技術基礎上引入了頁內進一步壓縮機制,獲得更好的壓縮效率;多溫度控制功能,幫助客戶解決如何優化利用不同的存儲設備,獲得更好的性能效果,與 DB2 的工作負載管理結合,最優系統資源利用;新的索引查詢技術,無需建立冗余的索引,使用現有綜合索引獲得更快的查詢速度;新的客戶端導入數據的技術可以幫助客戶能夠并行更高效率導入數據,數據幾乎實時可見等等。本文中將關注 DB2 中關于細粒度的權限控制 RCAC(Row and Column Access Control)特性。顧名思義,這個特性能夠讓用戶的權限控制細化到行和列的級別。
RCAC 的應用場景
細粒度的權限控制并不是一個新興的需求,這在長久的應用中一直會被提到。例如在客戶環境中,有可能存在著一些表記載的信息需要被不同角色的用戶來訪問。應用需要控制表中的一些敏感信息只能被特定的用戶訪問。這些敏感信息,可能是一些列的內容不應被特定用戶訪問到,也有可能是表中的一些條目(行)不應被展示。為了做到這一點,用戶一般需要通過創建視圖或者開發應用增加邏輯等來做到這一點。即便如此,因為僅僅在應用層做了限制,并沒有規避用戶能夠訪問表中敏感數據的風險。RCAC 通過對表里面行和列的訪問權限控制,可以簡單的實現這種安全性需求。不僅安全訪問得到控制,而且開發應用也變的簡單。
RCAC 的技術介紹
RCAC 是對表中行和列的訪問控制。對于行的控制,RCAC 使用的是創建 Permission(許可)的技術,能夠控制用戶對于表的訪問只能查詢到自己應該看到的信息,其他條目信息不應該被該用戶察覺。假如一張表有 100 個條目,某個特定的角色只應訪問 10 個條目,那么對于這個用戶來說,他能看得的僅僅是一張具有 10 個條目的完整的表。他的任何查詢,只會訪問到這十個條目。對于列的控制,RCAC 的展示技術和行不太一樣。RCAC 使用的是 Data Mask(面具)技術,也就是在敏感信息的列上可以創建面具,對于這些敏感的列,應該獲得該信息的用戶仍然可以正常查看,但是不應訪問到此信息的只能看到數據返回的是一張面具,而不是真實的值。所以無論任何用戶,都可以看到表的真實結構,不會給應用開發帶來麻煩,使用同樣的查詢語句,最后的結果會因人而異。下面通過一個例子來看如何應用 DB2 10RCAC 技術。在這個例子中,使用了 DB2 的 sample 數據庫。如果用戶拿到 DB2 10 的安裝介質,就可以來嘗試下面的實現步驟。
RCAC 技術實現案例
安裝 DB2 10 環境和 sample 數據庫
首先在操作系統上安裝 DB2 10 副本,然后為實例用戶創建實例,本文中使用的實例用戶是 db2inst1。查看 DB2 版本為 V10。然后創建 sample 示例數據庫。
清單 1. 查看 DB2 版本
db2inst1@idb1122a:~> db2level DB21085I Instance "db2inst1" uses "64" bits and DB2 code release "SQL10010" with level identifier "0201010E". Informational tokens are "DB2 v10.1.0.0", "s111206", "LINUXAMD64101", and Fix Pack "0". Product is installed at "/opt//db2/V10.1".
清單 2. 創建 sample 示例數據庫
db2inst1@idb1122a:~> db2inst1@idb1122a:~> db2sampl -dbpath /db2/sample -name sample Creating database "sample" on path "/db2/sample"... Connecting to database "sample"... Creating tables and data in schema "DB2INST1"... Creating tables with XML columns and XML data in schema "DB2INST1"... 'db2samp' processing complete.
定義相關用戶和角色
DB2 權限控制是針對訪問者的控制,也就是最終用戶。DB2 的用戶認證是由操作系統或者第三方用戶認證軟件來完成的。所以本案例中需要在操作系統創建連接數據庫的用戶。本案例在操作系統創建了兩個用戶 pernal 和 sanders 用以展示。
清單 3. 創建角色
db2inst1@idb1122a:~> db2 create role manager DB20000I The SQL command completed successfully.
清單 4. 關聯用戶和角色
db2inst1@idb1122a:~> db2 grant manager to sanders with admin option DB20000I The SQL command completed successfully.
到此可以看到 , 案例的連接用戶有兩個。Sanders 是一個 manager,而 pernal 就是一個普通職員。本文設計的情景中,這兩個用戶多會去訪問 staff 這張表。Sanders 可以看到 staff 里面自己和屬于自己員工的信息。而 pernal 只能看到自己的信息。在 staff 這張表中有一列 SALARY,記載的是每個人的薪水信息,這個信息是機密的,只有員工自己能看到。所以無論是 Sanders 還是 pernal,他們都只能看到自己的 salary 信息,而不能看到其他人的,即使 Sanders 是 manager,他也不能看到自己員工的財務信息。