DB2 UDB 安全模型主要包含兩部分:身分驗證與授權。

身分驗證為使用安全機制驗證提供的使用者 ID 與口令過程。使用者與群組驗證由 DB2 UDB 外部設施管理:作業系統、網域控制器或 Kerberos 安全系統。這與 Oracle、SQL Server 不同,後者可在資料庫內部定義驗證帳戶,也可用外部設施。
一旦使用者 ID 與口令作為實例連結或資料庫連接請求一部分明確提供給 DB2 UDB,即嘗試使用外部安全設施驗證。請求未提供 ID/口令時,隱含使用登入工作站時的 ID/口令。實際驗證位置由實例參數 AUTHENTICATION 值決定。有不同驗證方案:伺服器端驗證、用戶端驗證(允許單一登入)、Kerberos、使用者定義 GSS 外掛程式。其他選項含網路傳輸時加密使用者名/口令/資料。參數值選擇視環境與本地安全策略而定。
使用者 bob 以口令 bobpsw 連接 finance 資料庫:
AUTHENTICATION=SERVER(預設),用伺服器安全設施驗證SQL30082N Attempt to establish connection failed with security
reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001
DB2 診斷日誌 (db2diag.log) 亦記錄:check password failed with rc = -2146500502。Windows 預設位置 C:\Program Files\IBM\SQLLIB\DB2,UNIX 為 /DB2/db2dump。遇此訊息需確認連接使用者/應用程式提供合法 ID/口令,且存在於執行驗證的設施中。
授權為判斷指定使用者 ID 對特定資料庫對象與動作的存取與特權資訊過程。DB2 UDB 內部儲存維護使用者/群組授權資訊。每提交命令執行授權檢查確保具正確特權。
特權可授予特定使用者或群組。使用者/群組定義同在 DB2 外部。群組成員自動繼承群組特權。明確授予使用者特權優先於群組關聯特權,永遠有效(即使後從群組移除),必須明確收回。多數資料庫對象有相關特權組,用 SQL GRANT/REVOKE 分配。如:GRANT SELECT ON TABLE ADM.ACCTABC TO USER BOB;REVOKE INSERT ON VIEW ADM.LEGERS FROM GROUP CLERKS。只能收回先前授予的權限。
GRANT 不檢驗使用者/群組帳戶是否存在於外部設施。可將權限授予不存在的帳戶,造成在 DB2 中可定義使用者/群組的錯誤印象。如 GRANT SELECT ON TABLE ADM.TAXCODE TO USER XYZ 中 xyz 為任意字串無對應外部使用者,DB2 GUI 工具或目錄表仍會顯示 xyz(見圖 2),但不代表存在或建立了 xyz 使用者。

SQL0551N "BOB" does not have the privilege to perform
Operation "INSERT" on object "ADM.TAXCODES". SQLSTATE=42501
遇此訊息需確認連接使用者 ID 是否具目標操作適當權限:明確授予、屬於擁有特權群組、或為超級使用者。
可為特定使用者群組分配實例與資料庫權限。DB2 UDB 定義超級使用者授權階層:SYSADM、SYSCTRL、SYSMAINT、SYSMON,各具執行管理操作子集能力(建立資料庫、強制使用者離線、備份資料庫等)。透過實例參數 SYSADM_GRP、SYSCTRL_GRP、SYSMAINT_GRP、SYSMON_GRP 配置,值為擁有該授權的群組名(外部定義)。如定義 snrdba 群組含所有資深 DBA,執行:
UPDATE DBM CFG USING SYSADM_GRP snrdba
db2stop
db2start
snrdba 所有使用者擁有 SYSADM 所有特權,能執行所有管理任務。此法可區分 DB2 管理員與系統/網路管理員。DBA 可能需 DB2 完整管理授權但不需本機/網路管理授權,將其帳戶加入對系統/網路無完整存取但對 DB2 實例有完整存取的群組,在 SYSADM_GRP 指定該群組名即可。
Windows 預設安裝實例級超級使用者參數值為 NULL,意味著超級使用者權限授予本地 Administrators 群組所有合法帳戶。強烈建議明確設為合法群組名防止未授權存取。Linux/UNIX 安裝 NULL 預設為實例擁有者基本群組,安裝後僅含實例擁有者 ID,問題較小。資料庫級授權用標準 SQL GRANT/REVOKE。
DB2 系統命令 (db2, db2ilist, db2start 等) 為作業系統可執行檔,安全機制基於檔案作業系統權限,安裝時設定。
DB2 UDB 中使用者/群組帳戶必須遵守命名規則(見表 1、2),此為外部設施定義帳戶限制外的額外限制。Windows 實際限制 20 字元;非 Windows 32 位用戶端連接 Windows 時若非 CLIENT 驗證支援超過 8 字元使用者名。所有平台通用限制見表 2。PUBLIC 為偽群組非真實群組,用於授予/收回通過驗證任何使用者的特權。其他特殊字元視作業系統與用途而定,為避免不一致與潛在問題,資料庫命名物件時勿使用其他特殊字元。


使用預設使用者 ID (如 db2admin) 安裝 DB2 UDB 並用弱口令(或無口令)將系統置於風險。許多病毒、蠕蟲、木馬利用弱口令(常見 password, 123456, 111111, db2admin 等)嘗試存取系統。Linux/UNIX 上未定義口令視為 NULL,無口令使用者皆視為使用 NULL 口令,從作業系統角度屬匹配,驗證後可連接資料庫。務必使用強健口令。
安裝需具管理權限的使用者帳戶,具體權限視平台而定。預設安裝過程中建立多個使用者/群組帳戶,用於「擁有」與啟動伺服器上運行的各種 DB2 服務與進程。
需三類帳戶:
db2admin),必須屬 Administrators 群組。精靈建立時自動授予:作為作業系統一部分、偵錯程式、建立 token 物件、增加配額、鎖定記憶體頁、作為服務登入、取代進程級 token。若自行建立/指定不同帳戶必須確保具上述權限(透過本地安全性原則設定)。口令不正確可能導致服務無法載入或特定操作被禁止。
安裝過程中還要告訴精靈其餘 DB2 服務使用同一帳戶(勾選「其他 DB2 UDB 服務使用同一使用者名與口令」)。未勾選則提示選擇預設實例擁有者帳戶,其他服務用內建 LocalSystem 啟動。DAS 帳戶需對環境中每個 DB2 系統具 SYSADM 權限以便啟動/停止其他實例。Windows 預設安裝後 Administrators 群組任何使用者具 SYSADM。DAS 服務名稱 DB2DAS - DB2DAS00。
預設 Windows 安裝自動建立 DB2 實例。可用 db2icrt/db2idrop 建立/刪除實例(位於 DB2PATH\sqllib\bin),需本地 Administrator 權限執行。建立實例時透過參數提供帳戶/口令則用該帳戶擁有/啟動服務;未提供則用 LocalSystem。如 db2icrt devinst 建立新實例賦予 LocalSystem 權限。
安裝後可修改各 DB2 服務關聯使用者帳戶。V8.2 起可用內建 LocalSystem Account (LSA) 啟動服務。嚴格口令策略系統上 LSA 有利(無關聯口令)。如環境要求每兩月換口令否則帳戶暫時鎖定,需修改指定帳戶口令啟動服務。若啟動服務帳戶被鎖或口令變更未在服務啟動屬性更新,服務將無法啟動。移交服務至 LSA 前必須考慮:LSA 無法存取 LAN 共享(無法在其他電腦驗證),必須確保 DB2 系統不使用其他機器檔案資源。LSA 上下文運行應用程式使用本地 DB2 隱性連接,開發此帳戶下應用需知 DB2 物件模式名以 SYS 開頭限制。