資料庫安全性雖非最引人矚目話題,但如去年電子商務企業信用卡號遭竊事件所示,安全漏洞確會引人注目並動搖客戶信心。對任何使用 DBMS 的企業而言,安全性都是核心考量。隨著企業紛紛進軍電子空間,將私有資料與公開資料隔離變得愈發重要。
企業資料庫系統可能收集、儲存、分析成千上萬筆資訊,本質上包含公開與私有資料。資料庫必須讓 DBA 能適當授權與限制存取,並提供防止未授權使用者存取機密資料的機制。但資料庫安全資訊常難以獲取或理解。本文將帶您瀏覽 Windows、Unix、OS/2 版 DB2 UDB v7.1 的安全特性,並說明協助最大化安全性的內部控制。
驗證是資料庫安全最基本概念,透過安全機制證實使用者身分。使用者提供身分證明或驗證權杖回應驗證請求。如銀行開戶需出示帶照片證件,駕照即為驗證權杖。

軟體多採用使用者 ID 與密碼驗證。使用者 ID 宣稱身分,密碼提供個人驗證憑證,前提是密碼受良好保護且僅持有者知悉。使用者驗證由 DB2 外部安全工具完成,通常為作業系統一部分或獨立產品。某些作業系統(如 Windows 95/98)無本地安全機制,可配置環境依賴更安全系統上的 DB2 伺服器提供安全性,或使用第三方產品(如 DCE Security Services)增加安全層。DB2 協調外部安全工作與自身安全主動性保護交易或分析環境。
驗證成功後,DB2 記錄使用者身分標識與相關安全資訊(如使用者群組清單)。使用者必須使用 SQL 授權名或授權 ID 被 DB2 識別,連接期間保留此資訊。
DB2 提供在資料庫管理器配置(dbm cfg)中透過 AUTHENTICATION 參數設定的不同驗證選項,決定驗證方式與位置。邏輯上分為四類:
TRUST_ALLCLNTS 與 TRUST_CLNTAUTH 允許可信任用戶端用用戶端驗證,不可信任者需提供密碼。提供使用者/密碼集中管理、不傳送明文密碼、單一登入。DB2 整合第三方 DCE 產品支援。
DB2 UDB v7.1 新增,緊密整合 Microsoft Windows 2000,單一登入工具完成 DB2 驗證。驗證後用戶不受 Kerberos 環境中任何伺服器再次質疑。僅適用於用戶端與伺服器均運行 Windows 2000 的情況。原理同 DCE:登入 Kerberos 環境獲取加密票證向指定 DB2 伺服器證明身分。
通過驗證的使用者進入 DB2 安全性第二層——授權。授權是 DB2 獲取通過驗證使用者資訊(可執行的資料庫操作、可存取的資料對象)的過程。如駕照不僅驗證身分,更授予駕駛特定車型權力並限制存取特定道路(如高速公路)。DB2 運作邏輯相似。
權限將特權分組,控制資料庫管理器與實用程式的高階維護操作。資料庫相關權限存於目錄;系統權限關聯群組成員關係,存於 dbm cfg。四大預定義權限層級:SYSADM、SYSCTRL、SYSMAINT、DBADM。SYSADM/SYSCTRL/SYSMAINT 在實例層級運作,範圍涵蓋整個伺服器;DBADM 連結特定資料庫,自動授予建立資料庫的使用者,擁有該資料庫及內部所有對象的所有群組特權。預設 SYSADM 擁有整個系統(含資料庫)所有群組特權(隱含 DBADM)。

DB2 使用多重縱向授權流,每個請求依對象與操作可能需多次授權檢查。透過 DB2 工具執行授權,系統目錄記錄各授權名關聯特權,將通過驗證使用者的授權名及所屬群組與記錄特權比較,決定是否允許存取。成為 SYSADM_GROUP、SYSCTRL_GROUP、SYSMAINT_GROUP 參數指定群組的成員即獲得對應權限。
特權定義對授權名的單一許可,讓使用者修改或存取資料庫資源,存於資料庫目錄。權限預定義一組隱性授予群組成員的特權,特權則為單獨許可。利用作業系統安全功能維護的使用者群組,指派特權給群組可降低總擁有成本。如需為 50 位使用者開放 CREATETAB 與 CONNECT,建立群組指派特權比逐一授予更有效率。

動態 SQL 與非資料庫對象授權適用群組成員關係;靜態 SQL 不適用(PUBLIC 群組除外)。特定使用者 ID、PUBLIC 群組或多個群組可被授予/撤銷特權。所有操作與對象存取皆由特權控制,必須擁有特權 DB2 才允許執行。
存取控制方法建立資訊內容子集,讓使用者僅查看或存取與需求相關的資料。DB2 提供多種存取控制方法:
套件為一或多條 SQL 語句相關資訊集合,是 DB2 內 SQL 基礎存取控制點。含優化器生成的存取計畫與授權模型。建立套件時綁定至具特定特權的資料庫,建立者必須擁有執行套件中所有靜態 SQL 所需特權。執行者需具套件 EXECUTE 特權,但不一定需具套件內所有靜態語句的逐一特權。如無 CREATETAB 特權無法建表,但擁有執行含靜態 CREATE TABLE 套件特權的使用者可透過此法建表。套件在控制使用者存取資料庫對象權限上關鍵。
視圖為限制資料低層級(列級)存取的主要方法。透過視圖隱藏原始表中敏感資訊的行與欄。根據視圖授予特權讓使用者存取資訊,特權僅適用視圖不影響基礎表,存取範圍限於視圖(基礎表資料子集)。WITH CHECK OPTION 甚至防止特定 SQL 修改使用者在視圖中無特權讀取的行。
範例:公司目錄表含 L_Name、F_Name、Phone、Email、Title、Salary、Bonus、Total Salary。全體員工可看前五欄;Web 存取者僅看前三欄降低垃圾郵件風險;HR 員工可看所有欄。DB2 存取控制提供保護資料與列級存取的框架。
觸發程序建立更複雜安全機制,特定事件(如 INSERT)發生時啟動。可在事件前/後觸發提供動態安全稽核。使用者語句未通過觸發程序內安全稽核時,觸發程序主體發出的錯誤防止表被修改。
DB2 提供 USER 特殊暫存器含當前會話連接資料庫的使用者 ID。可在視圖中使用此值針對特定使用者客製化視圖,使基於表的視圖因使用者而異,亦可應用於觸發程序與 SQL 語句。
DB2 稽核工具維護實例內事件的稽核追蹤。監視成功資料存取嘗試與後續分析可改進存取控制,最終防止惡意或無意的未授權存取。可從記錄事件提取報表供分析。詳細請參閱 DB2 Administration Guide。
DB2 眾多功能與機制讓您即使將最安全、最隱私的資料委託給資料庫引擎也能安心。當資料由 DB2 儲存管理,企業可在可擴展、健壯且安全的環境中運作。負責資料庫安全意味著晚上能睡得更安穩。