首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 9.5 安全新功能 (一):角色 完整教學——建立、授權、層級管理與群組比較

     編輯:DB2 教學

角色核心優勢

  • 簡化權限管理:依組織結構/職責定義角色,授予角色而非個別用戶
  • 人員異動只需調整角色成員資格,無需逐一修改權限
  • 角色可巢狀授權 (角色授予角色),形成階層
  • 支援 WITH ADMIN OPTION 委派授權權限
  • 優於 OS 群組:角色由 DB2 管理,建立視圖/觸發器/MQT/靜態 SQL 套件/SQL 例程時會被考慮,群組則不會

教學環境建置

  • DB2 9.5 Express-C on Windows/Linux
  • 建立用戶:DB2SEC (SECADM)、管理組 MARK/ALLY/SAUL、其他 14 位用戶、群組 Pension_gp (含 ROSE)
  • 資料庫 SAMPLE,DBA DB2INST1/passWord
  • 執行腳本建立表 LE_DEPARTMENT、LE_EMPLOYEE、LE_EMP_PHOTO、LE_EMP_RESUME、LE_ORG、LE_SALES、LE_PENSIONS 並載入資料

角色階層設計與實作

-- 基礎角色
CREATE ROLE Sales;   CREATE ROLE Mktg;   CREATE ROLE Admin;
CREATE ROLE Payroll; CREATE ROLE Pension;
-- 管理角色
CREATE ROLE SalesMgr; CREATE ROLE AdminMgr; CREATE ROLE CEO;

-- 權限授予 (範例)
GRANT SELECT ON LE_ORG, LE_SALES TO ROLE Sales;
GRANT UPDATE, INSERT ON LE_SALES TO ROLE Mktg;
-- ... 略

-- 角色巢狀授權
GRANT ROLE Sales, Mktg TO ROLE SalesMgr;
GRANT ROLE Admin, Payroll TO ROLE AdminMgr;
GRANT ROLE SalesMgr, AdminMgr TO ROLE CEO;

-- 用戶授予角色
GRANT ROLE CEO TO USER MARK;
GRANT ROLE AdminMgr TO USER ALLY;
GRANT ROLE SalesMgr TO USER SAUL;
GRANT ROLE Admin TO USER ADAM, DEBS, MARY;
GRANT ROLE Mktg TO USER MARY, ANNE, ROSE;
GRANT ROLE Payroll TO USER ADAM, PETE, YANG;
GRANT ROLE Pension TO USER YANG;
GRANT ROLE Sales TO USER STAN, ALAN, LORI, EVAN;

驗證權限繼承

  • ANNE (僅 Mktg) → 可查 LE_ORG、不可查 LE_EMPLOYEE
  • MARY (Mktg + Admin) → 兩表皆可查
  • DEBS (Admin) → 可查 LE_EMPLOYEE、不可查 LE_PENSIONS
  • ADAM (Admin + Payroll) → 兩表皆可查

角色維護與委派

撤銷角色即時生效

REVOKE ROLE Admin FROM MARY;
-- MARY 原建立的視圖總銷售額 因底表權限喪失而標記 INVALID

WITH ADMIN OPTION 僅 SECADM 可授予

GRANT ROLE Sales TO STAN WITH ADMIN OPTION;  -- 成功
-- STAN 嘗試轉授
GRANT ROLE Sales TO KLEM WITH ADMIN OPTION;  -- 失敗,STAN 無權委派 ADMIN OPTION
-- 改為普通授權
GRANT ROLE Sales TO KLEM;  -- 成功
-- 即使 STAN 後被撤銷角色,KLEM 保留權限

系統目錄與查詢函數

  • SYSCAT.ROLES:角色定義、建立時間、稽核策略
  • SYSCAT.ROLEAUTH:角色授權記錄
  • AUTH_LIST_ROLES_FOR_AUTHID('ALLY','U'):查詢用戶/角色/群組的完整角色鏈 (含授予者/類型/時間/ADMIN 旗標)

角色 vs 群組:關鍵差異實證

操作使用角色 (YANG)使用群組 (ROSE in Pension_gp)
建立觸發器✅ 成功❌ 失敗:SQL0551N 無 ALTER TABLE 權限 (群組權限不被考慮)
建立視圖✅ 成功❌ 失敗:SQL0551N 無 SELECT 權限 (群組權限不被考慮)
直接查詢✅✅ (動態 SQL 會考慮群組)

結論:建立視圖、觸發器、MQT、靜態 SQL 套件、SQL 例程時,只有角色權限被考慮,OS/LDAP 群組權限被忽略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved