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

DB2 權限體系深度解析:SYSADM、DBADM、SECADM 與實例/資料庫級授權矩陣

     編輯:DB2 教學

DB2 採用分層權限模型,區分實例級權限(SYSADM、SYSCTRL、SYSMAINT)與資料庫級權限(DBADM、SECADM、SQLADM、WLMADM、LOAD 等)。理解權限邊界與授權鏈結,是建立最小權限原則、通過合規審計的關鍵。

權限層級總覽

權限層級核心能力授權者典型角色
SYSADM實例完全控制:實例配置、所有資料庫、授權管理、資料存取僅 root/安裝用戶(透過 DBM CFG)DBA 主管、系統架構師
SYSCTRL實例管理維護操作(啟停實例、備份/恢復、建立/刪除資料庫),不可存取使用者資料SYSADM運維工程師、備份管理員
SYSMAINT實例維護子集:備份/恢復、RUNSTATS、REORG、不可建立/刪除資料庫與表空間SYSADM初級運維、排程作業帳號
DBADM資料庫單一資料庫完全控制:物件管理、資料存取、授權、不可備份/恢復/修改 DB CFGSYSADM應用 DBA、專案資料庫擁有者
SECADM資料庫安全管理專職:建立/撤銷角色、授權、標籤存取控制 (LBAC)、審計政策SYSADM資安長、合規專員
LOAD資料庫執行 LOAD 命令(高速大量載入),需搭配表級 INSERT/DELETE 權限SYSADM/DBADMETL 排程帳號、資料遷移專員

關鍵權限邊界釐清

SYSADM vs DBADM

  • SYSADM 擁有跨資料庫權限,可修改 DBM CFG(實例配置)、管理所有資料庫
  • DBADM 限定於單一資料庫,不可執行 BACKUP DATABASE、DROP TABLESPACE、UPDATE DB CFG
  • 建立資料庫者自動獲得該資料庫 DBADM(隱式授權)

SYSCTRL vs SYSMAINT

  • SYSCTRL 可建立/刪除資料庫、表空間;SYSMAINT 不可
  • 兩者皆不可存取使用者表資料,需額外授予 SELECT/INSERT 等權限
  • SYSMAINT 適合自動化維護排程(RUNSTATS、REORG、REBIND)

SECADM 獨立性

DB2 9.7+ 引入 SECADM,實現職責分離:DBA 管理物件與效能,資安人員管理權限與審計,符合 SOX、GDPR 等合規要求。

授權實戰指令

實例級授權(需 SYSADM,修改 DBM CFG)


-- 授予群組 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'"

最佳實務建議

  1. 最小權限原則:ETL 帳號僅授 LOAD + 目標表 INSERT/DELETE,不授 DBADM
  2. 群組管理:所有授權針對 OS 群組,而非個別使用者,便於人員異動
  3. 定期審計:每季查詢 SYSCAT.DBAUTH、SYSCAT.TABAUTH、SYSCAT.ROLEAUTH 產出權限報表
  4. 分離職責:生產環境強制分離 SYSADM(架構變更)、DBADM(日常運維)、SECADM(權限管理)
  5. 緊急存取程序:建立 Break-glass 帳號(擁有 SYSADM),平時鎖定,事故時臨時啟用並全程審計

Windows 環境特別說明

  • Windows 上實例建立時 SYSADM_GROUP 顯示為空,實際由 Administrators 群組成員行使
  • 建議建立專用域群組(如 DB2_SYSADM)並設定 db2 update dbm cfg using SYSADM_GROUP DB2_SYSADM
  • Windows 服務帳號(DB2 服務登入身分)不等同 SYSADM,切勿混淆
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved