身分竊盜與資料洩露為美國增長最快的犯罪類型之一。罪犯竊取個人資料(社安號、信用卡號)進行詐騙獲利,管道遍及電腦網路、電子郵件、郵遞、垃圾桶等。雖公司盡力阻擋入侵者,但超過 70% 資料洩露由員工造成。現有存取控制機制或不夠好、或開銷過大。IDS 11 透過基於標籤的存取控制提供優良解決方案:依員工職責、部門或其他條件,允許或限制對個別列與欄的讀寫存取。
LBAC 為資料庫系統依據物件所含安全標籤與授予存取物件使用者的安全標籤,控制資料庫物件存取的機制,屬強制存取控制一種。IDS 實作允許控制誰可存取表中個別列與欄的資料,功能可配置、可客製化滿足特定安全環境。
資料庫安全管理員(獲授新內建角色 DBSECADM 的使用者)執行所有 LBAC 配置:建立安全策略 → 建立安全標籤 → 關聯標籤至表列/列保護資料 → 授予使用者安全標籤允許存取。存取時比較使用者標籤與資料標籤:使用者標籤較強則允許,否則拒絕。DBSECADM 亦可授予豁免權,讓標籤權限不足的使用者存取受保護資料。安全標籤與豁免權統稱 LBAC 憑證。
新內建角色,執行所有安全相關管理含 LBAC 基礎設施設置。屬伺服器級角色,僅資料庫伺服器管理員 (DBSA) 可授予:
GRANT DBSECADM TO 'lynette', 'manoj';
三類組件:
有序元素集合,順序代表層級高低(第 1 元素最高)。最多 64 元素。範例:企業資料敏感度。圖 1 展示陣列組件。

CREATE SECURITY LABEL COMPONENT level ARRAY ['Trade Secret', 'Secret', 'Confidential', 'Public'];
無序元素集合,順序不重要。最多 64 元素。範例:企業部門。圖 2 展示集合組件。

CREATE SECURITY LABEL COMPONENT department SET {
'Product Development', 'Quality Assurance', 'Marketing', 'Sales', 'HR', 'Finance'};
多節點分支的複雜層級關係。最多 64 元素。範例:企業營運區域。圖 3 展示樹組件。

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 組件),定義標籤組成並指定控制敏感資料存取的規則:
CREATE SECURITY POLICY MegaCorp
COMPONENTS level, department, region
WITH IDSLBACRULES;
安全標籤屬於一安全策略,為策略中每個組件包含一值(值為組件允許的 0 到多個元素清單;陣列型 0 或 1 元素,集合/樹型 0 到多個)。應用至列/行保護資料,授予使用者允許存取。每策略每使用者最多授 2 個標籤(一讀一寫,可相同)。存取時比較標籤:使用者標籤強於資料標籤則允許。
CREATE SECURITY LABEL MegaCorp.director
COMPONENT level 'Secret',
COMPONENT department 'Product Development', 'Quality Assurance',
COMPONENT region 'USA';
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;
預定義規則統稱 IDSLBACRULES。比較標籤時逐組件應用適當規則,任一規則違反即拒絕存取;使用者持有該規則豁免權則跳過比較。
| 存取類型 | 組件 | 應用規則 | 拒絕存取條件 |
|---|---|---|---|
| 讀 | ARRAY | IDSLBACREADARRAY | 使用者陣列組件值低於資料陣列組件值 |
| 讀 | SET | IDSLBACREADSET | 一或多個保護值為使用者所無 |
| 讀 | TREE | IDSLBACREADTREE | 使用者值無一等於保護值或為其祖先 |
| 寫 | ARRAY | IDSLBACWRITEARRAY | 使用者值高於或低於保護值(必須相等) |
| 寫 | SET | IDSLBACWRITESET | 一或多個保護值為使用者所無 |
| 寫 | TREE | IDSLBACWRITETREE | 使用者值無一等於保護值或為其祖先 |
豁免權讓使用者繞過策略中一或多個存取規則。擁有策略所有規則豁免權即擁有該策略保護資料的完全存取權:
GRANT EXEMPTION ON RULE IDSLBACREADSET FOR MegaCorp TO 'john';
GRANT EXEMPTION ON RULE ALL FOR MegaCorp TO 'susan';
表與安全策略關聯且有行/欄受標籤保護時稱資料受保護。表資料僅能受該表策略的標籤保護。保護可在建表時或後續修改表實現。表僅能關聯一策略。存取受保護表時實施兩級控制:
將安全策略附加於表,指定儲存行安全標籤的欄。IDS 引入新資料型別 IDSSECURITYLABEL 儲存行標籤。插入列時關聯標籤(存於該型別欄),或修改表套用預設標籤至所有列。更新列指定新標籤可修改行標籤。表最多一個 IDSSECURITYLABEL 型別欄。
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;
將安全策略附加於表,將安全標籤附加於一或多個欄。欄與標籤關聯稱受保護欄。欄標籤不可修改,需先解除關聯再附加新標籤。表可有任意數量受保護欄。
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 函數處理安全標籤:
IDSSECURITYLABEL,用於插入/更新提供行標籤IDSSECURITYLABEL,用於插入/更新提供行標籤SECLABEL_BY_COMP 逆操作清單 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;
清單 9. SECLABEL_BY_NAME
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;
表 2. SELECT SECLABEL_TO_CHAR 範例
| 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 實現資料存取細粒度控制,輕鬆部署基礎設施並精確調優滿足嚴格安全環境(政府、國防)需求。