程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 用 IDS 中基於標簽的訪問控制支持保護數據

用 IDS 中基於標簽的訪問控制支持保護數據

編輯:DB2教程

簡介

身份失竊和數據洩露是美國增長最快的犯罪類型之一。罪犯竊取個人數據進行欺詐和獲取錢財,比如社會保險號和信用卡號。罪犯通過計算機網絡、電子郵件、郵件、廢紙簍和很多其他地方獲得這種數據。雖然公司盡最大努力阻止入侵者入侵網絡和敏感數據,但是超過 70% 的數據洩露是由雇員造成的。為了防范入侵者,大多數數據庫使用驗證來確認用戶與其提供的身份是否相符,並使用權限和特權來控制數據庫和及其中的對象和數據的訪問。然而,現有的訪問控制機制要麼是不夠好,要麼是開銷過大。IDS 11 通過基於標簽的訪問控制(Label-Based Access Control)為這些情況提供了良好的解決方案。通過使用 LBAC,可以根據雇員的工作職責、部門或其他條件,允許或限制對個別行和列的讀、寫訪問。

什麼是 LBAC?

基於標簽的訪問控制(Label-Based Access Control,LBAC)是一種允許數據庫系統控制數據庫對象訪問的機制,其根據是對象中包含的安全標簽和授給訪問對象的用戶的安全標簽。它是強制訪問控制的一種形式。

IDS 中的 LBAC 實現允許控制誰可以訪問一個表中個別行和列中的數據。LBAC 的功能是可配置的,因此可以對其進行定制,滿足用戶特定的安全環境。

數據庫安全管理員(被授予新的 DBSECADM 角色的用戶)執行所有 LBAC 配置。數據庫安全管理員通過創建安全策略來配置 LBAC 系統。安全策略描述一個標准,用於決定誰有權訪問特定的數據。創建安全策略之後,安全管理員將創建安全策略中的安全標簽。

安全標簽創建完成之後,可以將它與一個表中個別的列和行相關聯,從而保護存放在那裡的數據。數據庫安全管理員通過向用戶授予安全標簽來允許他們訪問受保護的數據。當一個用戶試圖訪問受保護的數據時,要將他的安全標簽與保護該數據的安全標簽進行比較。如果用戶的安全標簽強於數據的安全標簽,則訪問被允許;否則,訪問被拒絕。

數據庫安全管理員還可以為用戶授予豁免權。豁免權使原本安全標簽權限不足的用戶可以訪問受保護數據。安全標簽和豁免權統稱為 LBAC 憑證。

數據庫安全管理員(DBSECADM)

數據庫安全管理員(DBSECADM)是一個新的內置角色,用於執行所有與安全相關的管理,包括 LBAC 安全基礎設施的設置。它是一個服務器級的角色,只能由數據庫服務器管理員(DBSA)授予。

由 DBSECADM 執行的 LBAC 安全基礎設施設置包括:設置安全標簽組件、安全策略、安全標簽,向用戶授予安全標簽和豁免權,以及通過附加策略保護表。

DBSA 可以像下面這樣將 DBSECADM 角色授給用戶:

GRANT DBSECADM TO 'lynette', 'manoj';

安全標簽組件

安全標簽組件是用於安全策略和安全標簽的構建塊。有三種類型的安全標簽組件:數組、集合和樹。

數組安全標簽組件:數組是一組有序的元素,可用於表示簡單的層次結構。在數組中,元素出現的順序很重要。第 1 個元素比第 2 個元素的級別高,第 2 個元素比第 3 個元素的級別高。一個數組中最多可以有 64 個不同的元素。

數組安全組件的一個例子是企業中數據的敏感級別:

圖 1. 數組組件

用 IDS 中基於標簽的訪問控制支持保護數據

DBSECADM 可以像下面這樣創建數組安全組件:

CREATE SECURITY LABEL COMPONENT level ARRAY [
'Trade Secret', 'Secret', 'Confidential', 'Public'];

集合安全標簽組件:集合是一組無序的元素。在集合中,元素出現的順序不重要。一個集合中最多可以有 64 個不同的元素。

集合安全組件的一個例子是企業中的部門:

圖 2. 集合組件

用 IDS 中基於標簽的訪問控制支持保護數據

DBSECADM 可以像下面這樣創建集合安全組件:

清單 1. 創建集合安全組件

CREATE SECURITY LABEL COMPONENT department SET {
 'Product Development', 'Quality Assurance', 'Marketing', 'Sales', 'HR',
 'Finance'};

樹安全標簽組件:樹是一個元素集合,用於表示有多個節點和分支的復雜層次關系。一棵樹中最多可以有 64 個不同的元素。

樹安全組件的一個例子是企業的運營區域。

圖 3. 樹組件

用 IDS 中基於標簽的訪問控制支持保護數據

DBSECADM 可以像下面這樣創建樹安全組件:

清單 2. 創建樹安全組件

CREATE SECURITY LABEL COMPONENT region TREE (
 'Worldwide' ROOT,
 'Americas' UNDER 'Worldwide',
 'Europe' UNDER 'Worldwide',
 'Asia Pacific' UNDER 'Worldwide',
 'USA' UNDER 'Americas',
 'Canada' UNDER 'Americas',
 'UK' UNDER 'Europe',
 'Australia' UNDER 'Asia Pacific');

安全策略

安全策略定義安全標簽的組成,並指定控制敏感數據的訪問的規則。一個安全策略由一些安全標簽組件組成。一個安全策略中最多可以有 16 個不同的安全組件。

DBSECADM 可以像下面這樣創建安全策略:

清單 3. 創建安全策略

CREATE SECURITY POLICY MegaCorp
COMPONENTS level, department, region
WITH IDSLBACRULES;

安全標簽

安全標簽是應用到行和列上以保護數據的數據庫對象,將安全標簽授給用戶時他們才可以訪問受保護的數據。一個安全標簽歸屬於一個安全策略,並且為安全策略中的每個安全組件包含一個值。安全組件上下文中的一個值是一個列表,包含該組件所允許的 0 到多個元素。用於數組類型的組件的值可以包含 0 個或 1 個元素,用於集合和樹類型的組件的值可以包含 0 到多個元素。

DBSECADM 可以像下面這樣創建安全標簽:

清單 4. 創建安全標簽

CREATE SECURITY LABEL MegaCorp.director
COMPONENT level 'Secret',
COMPONENT department 'Product Development', 'Quality Assurance',
COMPONENT region 'USA';

安全標簽被應用到數據上,以保護該數據。可以將安全標簽授給用戶,允許他們訪問受保護的數據。對於一個安全策略,每個用戶最多只能被授予 2 個安全標簽 — 一個用於讀,另一個用於寫。對於讀和寫訪問,用戶還可以擁有相同的標簽。當一個用戶試圖訪問受保護的數據時,必須將他的安全標簽與保護數據的安全標簽進行比較。如果用戶的安全標簽強於數據的安全標簽,則可以訪問。

DBSECADM 可以像下面這樣向用戶授予安全標簽:

清單 5. 授予安全標簽

GRANT SECURITY LABEL MegaCorp.director TO 'john' FOR READ Access;
GRANT SECURITY LABEL MegaCorp.manager TO 'john' FOR WRITE Access;
GRANT SECURITY LABEL MegaCorp.director TO 'susan' FOR ALL Access;

訪問規則

訪問規則可以劃分為兩類:讀訪問規則和寫訪問規則。當用戶試圖讀帶安全標簽的數據時,則應用讀訪問規則。當用戶試圖插入、更新或刪除帶安全標簽的數據時,則應用寫訪問規則。IDS 有一組預定義的讀和寫訪問規則,它們被統稱為 IDSLBACRULES。當一個用戶試圖訪問帶安全標簽的數據時,必須將用戶的安全標簽與保護數據的安全標簽進行比較,並應用一個或多個預定義的規則來判斷一個標簽是否包含另一個標簽。

讀訪問規則

當用戶讀數據時(SELECT、UPDATE 和 DELETE 操作),則應用讀訪問規則,讀訪問規則可總結如下:

IDSLBACREADARRAY:要訪問數據,用戶安全標簽的每個數組組件必須大於或等於數據安全標簽的數組組件。

IDSLBACREADSET:要訪問數據,用戶安全標簽的每個集合組件必須包括數據安全標簽的集合組件。

IDSLBACREADTREE:要訪問數據,用戶安全標簽的每個樹組件必須包括數據安全標簽的樹組件中的至少一個元素(或那個元素的祖先)。

寫訪問規則

當用戶寫數據時(INSERT UPDATE 和 DELETE 操作),則應用寫訪問規則,寫訪問規則可總結如下:

IDSLBACWRITEARRAY:要訪問數據,用戶安全標簽的每個數組組件必須等於數據安全標簽的數組組件。

IDSLBACWRITESET:要訪問數據,用戶安全標簽的每個集合組件必須包括數據安全標簽的集合組件。

IDSLBACWRITETREE:要訪問數據,用戶安全標簽的每個樹組件必須包括數據安全標簽的樹組件中的至少一個元素(或那個元素的祖先)。

豁免權

豁免權為用戶繞過一個安全策略中的一個或多個訪問規則提供了一種方式。如果用戶擁有一個特定安全策略的特定規則的豁免權,那麼當該用戶試圖訪問受該安全策略保護的數據時,該規則將不起作用。一個用戶可以擁有多個豁免權。如果用戶擁有安全策略使用的每個規則的豁免權,那麼該用戶將擁有受那個安全策略保護的所有數據的完全訪問權。

DBSECADM 可以像下面這樣創建豁免權:

GRANT EXEMPTION ON RULE IDSLBACREADSET FOR MegaCorp TO 'john';
GRANT EXEMPTION ON RULE ALL FOR MegaCorp TO 'susan';

如何比較安全標簽

當一個用戶試圖訪問帶標簽的數據時,要將他的 LBAC 憑證與保護數據的安全標簽進行比較,以確定是否允許訪問。用戶的 LBAC 憑證是他所持有的安全標簽和豁免權。

安全標簽是按組件逐一比較的。如果安全標簽沒有用於某個組件的值,那麼設定該值為空值。在檢查每個組件時,要使用適當的 IDSLBACRULES 來決定是否允許訪問。如果違反任意一條訪問規則,則拒絕用戶訪問數據。如果用戶持有用於比較兩個值的規則的豁免權,則不進行比較(換句話說,訪問規則沒有被應用到那個組件)。

表 1. 用於安全標簽中不同組件的訪問規則

訪問的類型 組件 應用的訪問規則 以下情況時,訪問被拒絕 讀 ARRAY IDSLBACREADARRAY 用戶安全標簽中數組組件的值低於數據的安全標簽中數組組件 讀 SET IDSLBACREADSET 有一個或多個保護值是用戶所沒有的 讀 TREE IDSLBACREADTREE 用戶的值沒有一個等於保護值或是該值的祖先 寫 ARRAY IDSLBACWRITEARRAY 用戶的值高於保護值或低於保護值 寫 SET IDSLBACWRITESET 有一個或多個保護值是用戶所沒有的 寫 TREE IDSLBACWRITETREE 用戶的值沒有一個等於保護值或是該值的祖先

數據保護

當一個表與一個安全策略相關聯,並且其中有行和/或列受到安全標簽的保護時,則稱該表中的數據是受保護的。一個表中的數據只能受到保護該表的安全策略的安全標簽的保護。數據保護,包括添加安全策略,可以在創建表時進行,也可以在創建表之後通過修改表來實現。一個表只能與一個安全策略相關聯。當用戶訪問一個受保護的表時,IDS 實施兩個級別的訪問控制。第一級是傳統的自主訪問控制(Discretionary Access Control,DAC)。也就是說,IDS 驗證試圖訪問表的用戶是否已經被授予在該表上執行操作所需的權限。第二級的訪問控制是基於標簽的訪問控制(Label-Based Access Control,LBAC),這種控制可以發生在行級、列級或者同時發生在這兩級。

行級保護:通過將一個安全策略附加在表上,並指定用於存儲行安全標簽的列,便可以在行一級上保護一個表。IDS 引入了一個新的數據類型 IDSSECURITYLABEL,用於存儲行安全標簽。可以在將行插入到表時將安全標簽與行相關聯(存儲在 IDSSECUIRTYLABEL 類型的列中),也可以通過修改表,將指定的默認安全標簽應用到表中所有的行上。可以通過更新行,為 IDSSECUIRTYLABEL 類型的列指定新的安全標簽,從而修改行安全標簽。一個表最多只能有 1 個 IDSSECURITYLABEL 類型的列。

可以像下面這樣創建受行級保護的表:

清單 6. 創建行級保護標簽

CREATE TABLE employee
   (lbl IDSSECURITYLABEL, id int, name char(25), ssn char(15)) SECURITY
   POLICY MegaCorp;
ALTER TABLE department ADD
   (lbl IDSSECURITYLABEL DEFAULT ‘director’), ADD SECURITY POLICY MegaCorp;

列級保護:通過將一個安全策略附加在表上,並將一個安全標簽附加在該表中的一個或多個列上,便可以在列一級上保護一個表。當一個列與一個安全標簽相關聯時,那個列被稱作受保護的列。列安全標簽不能修改。如果要修改列安全標簽,必須先斷開列與已有安全標簽的關聯,然後在列上附加新的安全標簽。一個表可以有任意數量的受保護的列。

可以像下面這樣創建受列級保護的表:

清單 7. 創建受列級保護的表

CREATE TABLE employee
   (id int, name char (25), ssn char(15) COLUMN SECURED WITH manager)
   SECURITY POLICY MegaCorp;
ALTER TABLE department MODIFY
   (budget decimal(15,2) COLUMN SECURED WITH director),
   ADD SECURITY POLICY MegaCorp;

內置安全標簽函數

IDS 提供了 3 個用於處理安全標簽的內置 SQL 函數:

SECLABEL_BY_COMP:該函數通過指定一個安全策略,並在標簽中為每個組件指定值,從而構建一個安全標簽(內部編碼表示)。返回值有一個 IDSSECURITYLABEL 數據類型。該函數在插入和更新操作中為一個數據行提供行安全標簽。

清單 8. SECLABEL_BY_COMP 函數

INSERT INTO employee VALUES
   (SECLABEL_BY_COMP('megacorp', 'Secret:
   (Product Development,Quality Assurance):Europe', 1,
   'Manoj', '123-45-6789');       
UPDATE employee SET lbl = SECLABEL_BY_COMP
   ('megacorp', 'Public:Marketing:Americas') WHERE id = 2;

SECLABEL_BY_NAME:該函數通過指定一個安全策略和這個安全策略中一個安全標簽的名稱,構建一個安全標簽(內部編碼表示)。返回值是一個 IDSSECURITYLABEL 數據類型。該函數在插入和更新操作中為一個數據行提供行安全標簽。

清單 9. SECLABEL_BY_NAME function

INSERT INTO employee VALUES
   (SECLABEL_BY_NAME('megacorp', 'manager', 3, 'Lynette', '987-65-4321' );
UPDATE employee SET lbl = SECLABEL_BY_NAME
   ('megacorp', 'director') WHERE id = 4;

SECLABEL_TO_CHAR:該函數返回組成一個安全標簽的值的一個字符串表示。該函數在選擇操作中檢索行安全標簽列。可以將它看作 SECLABEL_BY_COMP 的逆操作。

表 2. SELECT SECLABEL_TO_CHAR('megacorp', lbl), id FROM employee; examples

LABEL id 'Secret:(Product Development,Quality Assurance):Europe' 1 'Public:Marketing:Americas' 2 'Confidential:Finance:UK' 3 'Secret:(Product Development,Quality Assurance):USA' 4

結束語

在本文中,您探索了如何使用 IDS LBAC 特性來部署經過精確調優的策略控制。基於標簽的訪問控制實現了對數據訪問的細粒度控制。您可以輕松地部署 LBAC 基礎設施,並對它進行精確的調優,以滿足嚴格的安全環境需求,比如政府和國防。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved