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

DB2 9 核心認證指南(第二部分):全方位掌握資料庫安全架構

     編輯:DB2 教學

前言:安全防禦的三道防線

資料庫安全不僅是設定密碼,而是系統性工程。DB2 提供身份驗證、授權、特權三層防護:

  • 身份驗證:確認「你是誰」(用戶 ID/密碼、Kerberos、外掛模組)
  • 授權:決定「你能做什麼管理操作」(SYSADM、DBADM 等權限層級)
  • 特權:控制「你能存取哪些物件」(SELECT、INSERT、CONTROL 等細粒度權限)

本文依 730 認證大綱,從架構到實操,完整解析 DB2 9 安全體系。

環境角色釐清:Client、Server、Gateway、Host

分散式環境下,四角色分工明確:

角色定義典型部署
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-Gateway-Host 基本架構圖

關鍵:認證發生位置取決於架構——Client-Server 模式在 Server 驗證;Client-Gateway-Host 模式在 Host 驗證,Gateway 僅轉發。

身份驗證機制深度解析

驗證觸發時機

執行 ATTACH(連接實例)或 CONNECT(連接資料庫)時,DB2 呼叫底層 OS 安全功能驗證帳密。

九大驗證類型(AUTHENTICATION 參數)

類型驗證位置密碼傳輸適用場景
SERVERServer明文內網信任環境
SERVER_ENCRYPTServerClient 加密後傳送預設、最常用
CLIENTClientClient 本地驗證單機/可信 Client
KERBEROSKDC票據制,無密碼傳輸單一登入、跨平台
KRB_SERVER_ENCRYPTKDC 或 Server支援 Kerberos 者用 Kerberos,其餘用 SERVER_ENCRYPT混合環境遷移期
DATA_ENCRYPTServer用戶 ID/密碼/資料全加密高安全需求
DATA_ENCRYPT_CMPServer支援 DATA_ENCRYPT 用加密,舊 Client 降級 SERVER_ENCRYPT相容舊版 Client
GSSPLUGIN外部 GSS-API 外掛由外掛決定整合第三方安全體系
GSS_SERVER_ENCRYPT外掛或 ServerClient 不支援外掛時降級 SERVER_ENCRYPT漸進式部署外掛

V9.1 新增:SRVCON_AUTH 可單獨設定「資料庫連線」驗證類型,區別於實例級 AUTHENTICATION。例:實例用 SERVER_ENCRYPT,資料庫連線強制 KERBEROS。

Server/Gateway/Client 端設定指令

# 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

處理不可信 Client(TRUST_ALLCLNTS、TRUST_CLNTAUTH)

當 Server 設 AUTHENTICATION=CLIENT 時,預期 Client 自行驗證。但 Win98/ME 等無本地安全機制的「不可信 Client」需特殊處理:

  • TRUST_ALLCLNTS=YES:信任所有 Client 自行驗證
  • TRUST_CLNTAUTH=SERVER:不可信 Client 提供帳密時,改由 Server 驗證

決策矩陣極大(含 DRDAONLY 選項),實務上建議統一用 SERVER_ENCRYPT 避免複雜度。

安全外掛架構與 Kerberos 實作

外掛架構優勢

  • 標準 GSS-API 介面,支援第三方身分管理(LDAP、AD、自製系統)
  • V8.2 引入,V9.1 增強;範例碼在 samples/security/plugins
  • 可 FENCED 模式執行(崩潰不影響實例),開發期建議開啟

Kerberos 部署五大前提

  1. Client/Server 同屬可信網域
  2. 正確設定 Principal(Kerberos 帳號)
  3. 建立 Server keytab,實例擁有者可讀
  4. 所有機器時鐘同步(誤差 < 5 分鐘)
  5. 安裝 Kerberos 客戶端套件

啟用步驟

# 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 CFGDBM CFG: SYSADM_GROUP
SYSCTRL實例群組管理/維護命令(啟停、建庫、備份、runstats),不可存取用戶資料DBM CFG: SYSCTRL_GROUP
SYSMAINT實例群組維護子集(啟停、備份、runstats),不可建/刪庫表空間、不可存資料DBM CFG: SYSMAINT_GROUP
DBADM資料庫用戶/群組近乎完全控制單一資料庫(建表、授權、runstats),不可備份/還原/修改 DB CFGGRANT DBADM ON DATABASE
LOAD資料庫用戶/群組執行 LOAD 命令(高速載入),需搭配表級 INSERT/DELETE 特權GRANT LOAD ON DATABASE

實操範例:授予 DBADM 與 LOAD

# 建庫者自動得 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_FENCED
  • IMPLICIT_SCHEMA、LOAD、QUIESCE_CONNECT、CREATE_EXTERNAL_ROUTINE

物件級特權速查表

系統編目檢視:SYSCAT.TABAUTH、SYSCAT.COLAUTH、SYSCAT.INDEXAUTH 等。

三種特權授予途徑

  1. 顯式 GRANT/REVOKE:GRANT SELECT ON TABLE gmilne.org TO USER test1
  2. 隱式授予:執行特定 DDL 時自動獲得(如 CREATE TABLE 得該表 CONTROL)
  3. 間接特權(套件):擁有套件 EXECUTE 即可間接執行套件內靜態 SQL,無需底表直接特權

注意:REVOKE ALL ON TABLE ... FROM GROUP 不影響成員被直接授予的特權。

亮點新功能:基於標籤的存取控制

DB2 9 引入 LBAC(Label-Based Access Control),實現列/行級安全,取代傳統「建視圖+撤銷基表權限」的繁瑣做法。

核心概念

  • 安全標籤組件:定義階層(TREE)、集合(SET)或陣列(ARRAY)
  • 安全政策:綁定一或多個組件,指定規則集(DB2LBACRULES)
  • 安全標籤:政策下的具體標籤值(如 HR_EXECUTIVE、MANAGE_D11_E21)
  • 免授權用戶:SECADM 權限管理 LBAC 設定

完整實作範例:人資薪資保密

場景:三角色——執行官 Jane(全權)、經理 Joe(D11/E21 部門全權)、組長 Frank(A00 唯讀)。

-- 1. 建立樹狀標籤組件
CREATE SECURITY LABEL COMPONENT J_DEPT
  TREE ('HR_EXECUTIVE' ROOT,
        'MAN_D11_E21' UNDER 'HR_EXECUTIVE',
        'A00' UNDER 'HR_EXECUTIVE',
        'D11' UNDER 'MAN_D11_E21',
        'E21' UNDER 'MAN_D11_E21', ...);

-- 2. 定義政策
CREATE SECURITY POLICY J_DEPT_POLICY
  COMPONENTS J_DEPT
  WITH DB2LBACRULES
  RESTRICT NOT AUTHORIZED WRITE SECURITY LABEL;

-- 3. 建立標籤
CREATE SECURITY LABEL J_DEPT_POLICY.EXECUTIVE COMPONENT J_DEPT 'HR_EXECUTIVE';
CREATE SECURITY LABEL J_DEPT_POLICY.MANAGE_D11_E21 COMPONENT J_DEPT 'MAN_D11_E21';
CREATE SECURITY LABEL J_DEPT_POLICY.A00 COMPONENT J_DEPT 'A00';
...

-- 4. 授予用戶標籤與存取權
GRANT SECURITY LABEL J_DEPT_POLICY.A00 TO USER Frank FOR READ ACCESS;
GRANT SECURITY LABEL J_DEPT_POLICY.MANAGE_D11_E21 TO USER Joe FOR ALL ACCESS;
GRANT SECURITY LABEL J_DEPT_POLICY.EXECUTIVE TO USER Jane FOR ALL ACCESS;

-- 5. 修改 EMP 表加入標籤欄並套用政策
ALTER TABLE EMP ADD COLUMN DEPT_TAG DB2SECURITYLABEL;
ALTER TABLE EMP ADD SECURITY POLICY J_DEPT_POLICY;

-- 6. 依部門回填標籤
UPDATE EMP SET DEPT_TAG = SECLABEL_BY_NAME('J_DEPT_POLICY','A00') WHERE WORKDEPT='A00';
UPDATE EMP SET DEPT_TAG = SECLABEL_BY_NAME('J_DEPT_POLICY','D11') WHERE WORKDEPT='D11';
...

驗證效果

  • Jane(EXECUTIVE):全表可讀寫,42 筆資料皆可見
  • Joe(MANAGE_D11_E21):僅見 D11、E21 部門 17 筆,查詢其他部門回 0 筆
  • Frank(A00 READ ONLY):僅見 A00 部門 5 筆,嘗試 UPDATE 報 SQL20402N 無 LBAC 憑證

完美滿足「執行官全權、經理部門全權、組長唯讀」業務需求,且無需維護視圖。

總結:認證必考重點清單

  • 四角色架構與認證發生位置
  • 九種 AUTHENTICATION 類型差異、SRVCON_AUTH 分離設定
  • TRUST_ALLCLNTS/TRUST_CLNTAUTH 處理不可信 Client 邏輯
  • 五大權限(SYSADM/CTL/MAINT、DBADM、LOAD)授予對象、指令、能力邊界
  • 資料庫級 vs 物件級特權、隱式/間接特權機制
  • LBAC 三步驟:組件→政策→標籤→授予→套用表→回填資料
  • SECADM 專屬管理 LBAC,PUBLIC 群組預設特權

掌握這套「驗證→授權→特權→標籤」四層防護體系,即可建構符合合規與最小權限原則的 DB2 安全環境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特權適用物件能力
CONTROL表、視圖、索引、套件、UDF、Sequence...完整控制權,含授予/撤銷他人特權
SELECT/INSERT/UPDATE/DELETE表、視圖基本 DML 操作
ALTER表修改結構(加欄、改型別等)
INDEX表建立索引
REFERENCES表建立/刪除外鍵參考
BIND套件REBIND 既有套件
EXECUTE套件、程序、函數、方法執行程式碼
CREATEIN/ALTERIN/DROPINSchemaSchema 內建立/修改/刪除物件