WITH ADMIN OPTION 委派授權權限DB2SEC (SECADM)、管理組 MARK/ALLY/SAUL、其他 14 位用戶、群組 Pension_gp (含 ROSE)SAMPLE,DBA DB2INST1/passWordLE_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_EMPLOYEEMARY (Mktg + Admin) → 兩表皆可查DEBS (Admin) → 可查 LE_EMPLOYEE、不可查 LE_PENSIONSADAM (Admin + Payroll) → 兩表皆可查REVOKE ROLE Admin FROM MARY;
-- MARY 原建立的視圖總銷售額 因底表權限喪失而標記 INVALID
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 旗標)| 操作 | 使用角色 (YANG) | 使用群組 (ROSE in Pension_gp) |
|---|---|---|
| 建立觸發器 | ✅ 成功 | ❌ 失敗:SQL0551N 無 ALTER TABLE 權限 (群組權限不被考慮) |
| 建立視圖 | ✅ 成功 | ❌ 失敗:SQL0551N 無 SELECT 權限 (群組權限不被考慮) |
| 直接查詢 | ✅ | ✅ (動態 SQL 會考慮群組) |
結論:建立視圖、觸發器、MQT、靜態 SQL 套件、SQL 例程時,只有角色權限被考慮,OS/LDAP 群組權限被忽略。