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

深入理解 DB2 UDB 使用者與群組帳戶交互機制:驗證、授權與安裝最佳實務

     編輯:DB2 教學

DB2 UDB 安全模型概覽

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

DB2 UDB 安全模型

身分驗證

身分驗證為使用安全機制驗證提供的使用者 ID 與口令過程。使用者與群組驗證由 DB2 UDB 外部設施管理:作業系統、網域控制器或 Kerberos 安全系統。這與 Oracle、SQL Server 不同,後者可在資料庫內部定義驗證帳戶,也可用外部設施。

一旦使用者 ID 與口令作為實例連結或資料庫連接請求一部分明確提供給 DB2 UDB,即嘗試使用外部安全設施驗證。請求未提供 ID/口令時,隱含使用登入工作站時的 ID/口令。實際驗證位置由實例參數 AUTHENTICATION 值決定。有不同驗證方案:伺服器端驗證、用戶端驗證(允許單一登入)、Kerberos、使用者定義 GSS 外掛程式。其他選項含網路傳輸時加密使用者名/口令/資料。參數值選擇視環境與本地安全策略而定。

驗證流程範例(七步驟)

使用者 bob 以口令 bobpsw 連接 finance 資料庫:

  1. CONNECT 陳述式傳遞給 DB2 UDB 伺服器
  2. 未明確配置安全外掛則用預設;實例 AUTHENTICATION=SERVER(預設),用伺服器安全設施驗證
  3. 預設外掛將 ID/口令送作業系統驗證
  4. 作業系統確認 bob/bobpsw 組合有效,回傳資訊
  5. 安全外掛啟動 DB2 UDB 安全機制,查詢目錄表檢查 bob 是否獲授資料庫 CONNECT 權限
  6. 預設 CONNECT 特權授予 PUBLIC,任何通過驗證使用者均可連接
  7. DB2 UDB 安全機制驗證使用者或回傳錯誤

驗證失敗訊息

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 不驗證帳戶存在性

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 UDB 安裝所需與建立的使用者/群組帳戶

安裝需具管理權限的使用者帳戶,具體權限視平台而定。預設安裝過程中建立多個使用者/群組帳戶,用於「擁有」與啟動伺服器上運行的各種 DB2 服務與進程。

Microsoft Windows 環境

需三類帳戶:

  1. 安裝使用者帳戶:本地或網域帳戶,必須屬安裝機器 Administrators 群組。網域帳戶需屬 Domain Administrators。除 Enterprise Server Edition 外可用內建 LocalSystem 帳戶安裝。可預先定義或讓安裝精靈建立。
  2. DB2 Administration Server (DAS) 使用者帳戶:本地或網域帳戶。DAS 為特殊服務支援 GUI 工具協助管理任務,有分配帳戶用於 DB2 載入時啟動服務。安裝精靈畫面提示選擇啟動 DAS 服務的帳戶(見圖 3)。可預先建立或讓精靈建立(預設 db2admin),必須屬 Administrators 群組。精靈建立時自動授予:作為作業系統一部分、偵錯程式、建立 token 物件、增加配額、鎖定記憶體頁、作為服務登入、取代進程級 token。若自行建立/指定不同帳戶必須確保具上述權限(透過本地安全性原則設定)。口令不正確可能導致服務無法載入或特定操作被禁止。
  3. DB2 UDB 實例擁有者使用者帳戶:本地或網域帳戶。可預先建立或讓精靈建立。網域帳戶需安裝使用者有建立網域帳戶權限。必須屬 Administrators 群組。精靈建立時自動授予上述權限(除「作為作業系統一部分」外)。同樣需確保權限正確設定。

安裝精靈指定 DAS 使用者帳戶

安裝過程中還要告訴精靈其餘 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 開頭限制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved