資料庫安全不僅是設定密碼,而是系統性工程。DB2 提供身份驗證、授權、特權三層防護:
本文依 730 認證大綱,從架構到實操,完整解析 DB2 9 安全體系。
分散式環境下,四角色分工明確:
| 角色 | 定義 | 典型部署 |
|---|---|---|
| Database Server | 資料庫實體所在機器(分區系統含多台) | Linux/UNIX/Windows 伺服器 |
| DB2 Client | 發出查詢的機器,可本地或遠端 | 應用伺服器、開發工作站 |
| Host / Host Server | 大型主機上的 DB2(z/OS、iSeries) | IBM Z、Power Systems |
| Gateway | 執行 DB2 Connect 的中介機器 | 連接分散式 Client 至 Host |
關鍵:認證發生位置取決於架構——Client-Server 模式在 Server 驗證;Client-Gateway-Host 模式在 Host 驗證,Gateway 僅轉發。
執行 ATTACH(連接實例)或 CONNECT(連接資料庫)時,DB2 呼叫底層 OS 安全功能驗證帳密。
| 類型 | 驗證位置 | 密碼傳輸 | 適用場景 |
|---|---|---|---|
| SERVER | Server | 明文 | 內網信任環境 |
| SERVER_ENCRYPT | Server | Client 加密後傳送 | 預設、最常用 |
| CLIENT | Client | Client 本地驗證 | 單機/可信 Client |
| KERBEROS | KDC | 票據制,無密碼傳輸 | 單一登入、跨平台 |
| KRB_SERVER_ENCRYPT | KDC 或 Server | 支援 Kerberos 者用 Kerberos,其餘用 SERVER_ENCRYPT | 混合環境遷移期 |
| DATA_ENCRYPT | Server | 用戶 ID/密碼/資料全加密 | 高安全需求 |
| DATA_ENCRYPT_CMP | Server | 支援 DATA_ENCRYPT 用加密,舊 Client 降級 SERVER_ENCRYPT | 相容舊版 Client |
| GSSPLUGIN | 外部 GSS-API 外掛 | 由外掛決定 | 整合第三方安全體系 |
| GSS_SERVER_ENCRYPT | 外掛或 Server | Client 不支援外掛時降級 SERVER_ENCRYPT | 漸進式部署外掛 |
V9.1 新增:SRVCON_AUTH 可單獨設定「資料庫連線」驗證類型,區別於實例級 AUTHENTICATION。例:實例用 SERVER_ENCRYPT,資料庫連線強制 KERBEROS。
# Server 端(DBM CFG)
db2 update dbm cfg using authentication server_encrypt
db2stop && db2start
# Gateway 端(編目資料庫時指定)
db2 catalog database myhostdb at node nd1 authentication SERVER
db2 terminate
# Client 端(編目時需與 Server 一致)
db2 catalog database sample at node nd1 authentication SERVER
當 Server 設 AUTHENTICATION=CLIENT 時,預期 Client 自行驗證。但 Win98/ME 等無本地安全機制的「不可信 Client」需特殊處理:
TRUST_ALLCLNTS=YES:信任所有 Client 自行驗證TRUST_CLNTAUTH=SERVER:不可信 Client 提供帳密時,改由 Server 驗證決策矩陣極大(含 DRDAONLY 選項),實務上建議統一用 SERVER_ENCRYPT 避免複雜度。
samples/security/pluginsFENCED 模式執行(崩潰不影響實例),開發期建議開啟# Client 端指定外掛
db2 update dbm cfg using clnt_krb_plugin IBMkrb5
db2 terminate
# 選填:編目時指定 Target Principal,省略首次尋找步驟
db2 catalog db sample at node testnd authentication KERBEROS \
target principal gmilne/gmilne02.torolab.ibm.com@TOROLAB.IBM.COM
# Server 端:全啟用 Kerberos
db2 update dbm cfg using authentication KERBEROS
# 或僅資料庫連線用 Kerberos
db2 update dbm cfg using srvcon_auth KERBEROS
db2stop && db2start
| 權限 | 層級 | 授予對象 | 核心能力 | 授予方式 |
|---|---|---|---|---|
| SYSADM | 實例 | 群組 | 最高權限:任意命令、存取所有資料、授予/撤銷權限、修改 DBM CFG | DBM CFG: SYSADM_GROUP |
| SYSCTRL | 實例 | 群組 | 管理/維護命令(啟停、建庫、備份、runstats),不可存取用戶資料 | DBM CFG: SYSCTRL_GROUP |
| SYSMAINT | 實例 | 群組 | 維護子集(啟停、備份、runstats),不可建/刪庫表空間、不可存資料 | DBM CFG: SYSMAINT_GROUP |
| DBADM | 資料庫 | 用戶/群組 | 近乎完全控制單一資料庫(建表、授權、runstats),不可備份/還原/修改 DB CFG | GRANT DBADM ON DATABASE |
| LOAD | 資料庫 | 用戶/群組 | 執行 LOAD 命令(高速載入),需搭配表級 INSERT/DELETE 特權 | GRANT LOAD ON DATABASE |
# 建庫者自動得 DBADM
db2 create database test
# SYSADM 授予他人 DBADM
db2 connect to sample
db2 grant dbadm on database to user tst1
db2 grant dbadm on database to group db2grp1
# LOAD 需搭配表級特權
db2 grant load on database to user tst1
db2 grant insert on table sales to user tst1 # LOAD INSERT 需要
db2 grant delete on table sales to group grp1 # LOAD REPLACE 需要
CREATETAB、BINDADD、CONNECT、CREATE_NOT_FENCEDIMPLICIT_SCHEMA、LOAD、QUIESCE_CONNECT、CREATE_EXTERNAL_ROUTINE| 特權 | 適用物件 | 能力 |
|---|---|---|
| CONTROL | 表、視圖、索引、套件、UDF、Sequence... | 完整控制權,含授予/撤銷他人特權 |
| SELECT/INSERT/UPDATE/DELETE | 表、視圖 | 基本 DML 操作 |
| ALTER | 表 | 修改結構(加欄、改型別等) |
| INDEX | 表 | 建立索引 |
| REFERENCES | 表 | 建立/刪除外鍵參考 |
| BIND | 套件 | REBIND 既有套件 |
| EXECUTE | 套件、程序、函數、方法 | 執行程式碼 |
| CREATEIN/ALTERIN/DROPIN | Schema | Schema 內建立/修改/刪除物件 |