解決三層架構 (Web/App Server → DB2) 安全痛點:
可信上下文建立 DB2 與中介層的信任關係:連線屬性 (系統授權 ID、IP/網域、加密等級) 匹配定義 → 連線成為可信連線,中介層可切換當前用戶 ID (可選認證),後續操作使用真實用戶身份與權限,稽核可追蹤真人。
SAMPLE、DB2SEC SECADM 等)127.0.0.1 hostname、別名 SAMPLER127.0.0.1 localhost、192.168.73.134 host1.Admin.LUWent.com-- 失敗:無效位址格式
CREATE TRUSTED CONTEXT MktgTrustedContext
BASED UPON CONNECTION USING SYSTEM AUTHID ALLY
ATTRIBUTES (ADDRESS 'qwerty', ENCRYPTION 'HIGH')
DEFAULT ROLE Mktg ENABLE;
-- SQL0644N ADDRESS 關鍵字值無效
-- 成功:使用有效位址
CREATE TRUSTED CONTEXT MktgTrustedContext
BASED UPON CONNECTION USING SYSTEM AUTHID ALLY
ATTRIBUTES (ADDRESS '127.0.0.1', ENCRYPTION 'HIGH')
DEFAULT ROLE Mktg ENABLE;
-- DB20000I 成功
限制:每個系統授權 ID 只能有一個可信上下文;本地資料庫無效。
-- 新增允許切換用戶 (無需認證)
ALTER TRUSTED CONTEXT MktgTrustedContext
ADD USE FOR STAN WITHOUT AUTHENTICATION;
-- 暫時禁用
ALTER TRUSTED CONTEXT MktgTrustedContext ALTER DISABLE;
-- 刪除
DROP TRUSTED CONTEXT MktgTrustedContext;
限制:僅支援 DB2 CLI / JDBC 應用程式;必須在交易邊界 (建議顯式 COMMIT WORK) 進行。
ALLY 無權限更新 LE_PENSIONS (預期失敗)MktgALLY 身份建立可信連線STAN (已在 ADD USE FOR STAN 中授權,且 STAN 擁有 Sales 角色含更新權限)STAN 身份執行更新 → 成功,稽核記錄顯示 STANDEFAULT ROLE:連線建立時自動獲得的角色ADD USE FOR user [WITH/WITHOUT AUTHENTICATION] ROLE role:可為個別切換用戶指定不同角色PUBLIC:允許任意授權 ID 使用該上下文 (慎用)ENABLE/DISABLE) 可動態控制可用性可信上下文讓中介層「代理」真實用戶身份執行資料庫操作,兼顧連線池效能 (無需重建連線) 與細粒度安全/稽核,是三層架構資料庫安全的關鍵基礎設施。