DB2 採用分層權限模型,區分實例級權限(SYSADM、SYSCTRL、SYSMAINT)與資料庫級權限(DBADM、SECADM、SQLADM、WLMADM、LOAD 等)。理解權限邊界與授權鏈結,是建立最小權限原則、通過合規審計的關鍵。
| 權限 | 層級 | 核心能力 | 授權者 | 典型角色 |
|---|---|---|---|---|
| SYSADM | 實例 | 完全控制:實例配置、所有資料庫、授權管理、資料存取 | 僅 root/安裝用戶(透過 DBM CFG) | DBA 主管、系統架構師 |
| SYSCTRL | 實例 | 管理維護操作(啟停實例、備份/恢復、建立/刪除資料庫),不可存取使用者資料 | SYSADM | 運維工程師、備份管理員 |
| SYSMAINT | 實例 | 維護子集:備份/恢復、RUNSTATS、REORG、不可建立/刪除資料庫與表空間 | SYSADM | 初級運維、排程作業帳號 |
| DBADM | 資料庫 | 單一資料庫完全控制:物件管理、資料存取、授權、不可備份/恢復/修改 DB CFG | SYSADM | 應用 DBA、專案資料庫擁有者 |
| SECADM | 資料庫 | 安全管理專職:建立/撤銷角色、授權、標籤存取控制 (LBAC)、審計政策 | SYSADM | 資安長、合規專員 |
| LOAD | 資料庫 | 執行 LOAD 命令(高速大量載入),需搭配表級 INSERT/DELETE 權限 | SYSADM/DBADM | ETL 排程帳號、資料遷移專員 |
BACKUP DATABASE、DROP TABLESPACE、UPDATE DB CFGDB2 9.7+ 引入 SECADM,實現職責分離:DBA 管理物件與效能,資安人員管理權限與審計,符合 SOX、GDPR 等合規要求。
-- 授予群組 SYSADM 權限(修改後需重啟實例生效)
db2 "update dbm cfg using SYSADM_GROUP dba_admins"
-- 授予 SYSCTRL
db2 "update dbm cfg using SYSCTRL_GROUP db2_ctrl"
-- 授予 SYSMAINT
db2 "update dbm cfg using SYSMAINT_GROUP db2_maint"
db2 connect to mydb
-- 授予使用者 DBADM
db2 "grant dbadm on database to user app_dba"
-- 授予群組 DBADM
db2 "grant dbadm on database to group app_dba_group"
-- 授予 SECADM(安全專職)
db2 "grant secadm on database to user sec_admin"
-- 授予 LOAD(需搭配表權限)
db2 "grant load on database to user etl_user"
db2 "grant insert, delete on table schema.fact_table to user etl_user"
-- 查看當前用戶實例級權限
db2 "select * from table(sysproc.auth_list_authorities_for_authid(session_user, 'U')) as t"
-- 查看資料庫級權限
db2 "select grantee, granteetype, dbadmauth, secadmauth, loadauth
from syscat.dbauth where grantee in ('USER1', 'GROUP1')"
-- 查看表級權限
db2 "select * from syscat.tabauth where grantee = 'ETL_USER'"
SYSCAT.DBAUTH、SYSCAT.TABAUTH、SYSCAT.ROLEAUTH 產出權限報表SYSADM_GROUP 顯示為空,實際由 Administrators 群組成員行使DB2_SYSADM)並設定 db2 update dbm cfg using SYSADM_GROUP DB2_SYSADM