簡介
我們面對的這個問題是:數據庫安全性話題還沒有象測定最短宕機時間世界記錄和報告那麼引人矚目。您是在什麼時候最後一次讀到有關安全令牌和加密的睿智文章的呢?但正如去年大肆宣傳的從一些電子商務企業中盜竊信用卡號碼的事件所表明的,安全性缺口的確引人矚目 — 而且能削弱顧客的信心。即便安全性不是最令人激動的主題,對於任何使用數據庫管理系統的企業來說,它也是重要顧慮。同時,隨著越來越多的企業參與電子空間,把私有數據從公共數據中分離變得尤為重要。
如想獲得更多關於 DB2 UDB 安全特性的信息,請參閱 DB2 Administration Guide。
任何給定的公司的數據庫系統可能要收集、存儲和分析成千上萬行信息,這些信息本質上有公共的,也有私有的。由於有這項責任在身,數據庫必須使數據庫管理員能適當的授權和限制訪問。此外,數據庫還必須提供防止未授權用戶存取機密數據的方法。
但是有時候,數據庫安全信息難以獲得或理解。盡管您常聽說 DB2 通用數據庫(DB2 Universal Database,UDB)是多麼可擴展、多麼健壯,但您多久才會聽到一次有關 DB2 的安全特性的細節呢?
因為保護數據庫安全是 DBA 最重要的職責之一,所以您不應當試圖通過反復試驗來學習數據庫安全性。保護您的數據庫安全涉及:
防止任何人在企業無需知道的情況下對機密數據進行未授權的存取
防止未授權用戶惡意刪除進行破壞或擅自改變數據
采用審核技術監視用戶存取數據
本文中,我將帶您浏覽 Windows、Unix 和 OS/2 版本的 DB2 UDB v.7.1 中的安全特性,並描述一些可以幫助您最大化安全性的內部控制。
驗證
數據庫安全性中最基本的概念之一就是驗證,這是一個相當簡單的過程,系統通過這個過程來證實用戶身份。用戶可以通過提供身份證明或驗證令牌來響應驗證請求。
很可能您已經熟悉這個概念了。如果您曾經被要求出示帶照片的 ID(例如,在銀行新開帳戶時),那麼已經有人向您提出過驗證請求了。您出示了駕駛執照(或其它帶照片的 ID)從而證明自己的身份。在這種情況下,您的駕駛執照就充當了驗證令牌。
圖 1. DB2 授權角色
不管您在電影裡看到些什麼,大部分軟件程序不能把未來系統(比如面部識別)用於驗證。相反,大多數驗證請求要求您提供用戶標識和密碼。您的用戶標識表示您聲稱自己是被授權可訪問該環境的人,密碼則將提供您個人的驗證證據。當然,這種驗證假定您的密碼受到很好的保護,而且您是唯一一個知道這個密碼的人。
用戶驗證由 DB2 之外的安全性工具完成,這個工具通常是操作系統的一部分或獨立產品。事實上,安全性不僅是數據庫問題;操作系統廠商也要花費很多的時間、金錢和心思確保他們的產品是安全的。但是,包括 Microsoft Windows 95 和 98 在內的一些操作系統並沒有本地安全機制。如果您使用的是沒有安全機制的操作系統,那您可以把環境配置成依靠在更安全的系統上運行的 DB2 服務器來提供這種安全性。例如,您可以使用可靠的客戶端選項,我將在文章的後面部分更多的討論這些選項。(如想獲得更多信息,請參閱 DB2 Administration Guide。)
您也可以使用第三方產品(如由 Open Group 定義的分布式計算環境安全服務(Distributed Computing Environment(DCE)Security Services)來給您的環境添加一層安全層。DB2 可以協調這些外部安全工作與其安全主動性來保護事務或分析環境。
一旦用戶身份驗證成功,DB2 記下用戶的身份標識和其它相關的安全信息,如用戶組列表。用戶必須使用 SQL 授權名(authorization name)或授權標識(authid)以被 DB2 識別,授權名或授權標識可以與用戶標識或映射值相同。這一連接信息將在用戶連接期間保留。
驗證選項
因為驗證可以由操作系統或第三方產品處理,所以 DB2 提供您可以在數據庫管理器配置(dbm cfg)文件中使用 AUTHENTICATION 參數設置的不同驗證選項。DB2 使用這一參數確定驗證應該以何種方式、在何處發生。
dbm cfg AUTHENTICATION 參數的許多設置在邏輯上可以分組為以下四個不同類別:SERVER(服務器)、ClIEnt(客戶機)、DCE、Kerberos。
服務器驗證。該組提供兩個主要選項:
SERVER(服務器)缺省安全性機制,指明驗證應該使用服務器的操作系統在服務器上發生。如果用戶標識和密碼是在連接期間指定的,那麼 DB2 將調用操作系統函數來驗證提交的用戶標識和密碼。(在基於 Windows 的環境中,用戶標識常被稱為用戶名。用戶名和密碼合起來常被稱為用戶賬戶。)
SERVER_ENCRYPT本質上同缺省選項是一樣的,只有一點例外,即從客戶機傳到服務器的密碼是加密的。DB2 在連接時使用單 DES(56 位)密碼加密技術和 DiffIE-Hellman 算法為加密算法生成密鑰。RSA BSAFE 工具箱提供這一支持。
Client(客戶機)驗證。該組僅有的選項 CLIENT 指明驗證將在客戶機上發生。如果客戶機駐留在原本就具有安全特性的操作系統(例如,AIX)上,那麼它就是可信任客戶機。通常,除 Microsoft Windows 95 和 98 被認為不可信任之外,所有客戶機都是可信任的。
如果服務器接收到來自可信任客戶機和不可信任客戶機的請求,那麼 TRUST_ ALLCLNTS 和 TRUST_CLNTAUTH 選項允許可信任客戶機使用客戶機驗證(clIEnt authentication)獲得訪問權,而不可信任客戶機則必須提供密碼才能成功驗證。請參閱 DB2 Administration Guide以了解細節。
DCE 驗證選項。一些管理員願意實現 DCE 安全性服務,原因是 DCE 提供用戶和密碼集中式管理,不傳送明文密碼和用戶標識,並且向用戶提供單次登錄。DB2 使用第三方 DCE 產品來提供對 DCE 安全性服務的集成支持。您可以選擇以下兩種設置之一:
DCE指明使用 DCE 安全性服務來驗證用戶。已經登錄到 DCE 的 DB2 客戶機可以得到一張加密的“票證”,它可以用這張票證向 DB2 服務器證明自己的身份。
DCE_SERVER_ENCRYPT指明服務器將把 DCE 票證或用戶標識以及加密的密碼當作驗證證據接受,由 DB2 客戶機選擇。
Kerberos 驗證選項。Kerberos 這一新的驗證機制被作為它與 Microsoft Windows 2000 緊密集成的一部分添加到 DB2 UDB v.7.1 中,單次登錄工具就可以完成 DB2 驗證。一旦通過驗證,用戶就不會受到存在於 Kerberos 環境中的任何服務器的再次質疑。這種驗證方法只能用於 DB2 客戶機和 DB2 服務器都是在 Windows 2000 上運行的情況下。
DCE 和 Kerberos 使用本質上相同的底層技術。當客戶機登錄到 Kerberos 安全性環境的時候,DB2 客戶機可以獲取加密的 Kerberos 票證用來向指定的 DB2 服務器證明自己的身份。
您可以選擇以下兩種設置之一:
KERBEROS指明應當只用 Kerberos 安全性服務來驗證用戶。
KRB_SERVER_ENCRYPT指明服務器將把 Kerberos 票證或用戶標識以及加密密碼當作驗證證據接受,由 DB2 客戶機選擇。
授權
通過驗證的用戶將參加 DB2 安全性的第二層 — 授權。授權是 DB2 借以獲得有關通過驗證的 DB2 用戶的信息(包括用戶可以執行的數據庫操作和用戶可以訪問的數據對象)之過程。
您的駕駛執照就是授權文檔的絕佳示例。雖然可以把它用於驗證目的,但它還授予您駕駛某種類型的車的權力。不僅如此,就駕駛機動車行路而言,您所擁有的某種授權或多或少會給您些特權。
例如,在加拿大的安大略省,G 類駕照給您實際上在任何時間任何地點都可以開車的特權。G 類駕照在駕駛汽車授權等級結構的最上層。級別比它低的 G2 類駕照雖然允許用戶在一天中的任何時間駕車,但是有一定的限制。(例如,這種授權體制下的用戶在飲用任何含酒精的飲料之後絕不允許駕車。)G2 駕照的下面一級是 G1 駕照,包括許多限制(例如,駕駛員必須有一位 G 類駕照的乘客陪同,不可以在高速公路上或者在天黑以後駕車)。
您的駕照授權您駕駛機動車並限制您對某些“對象”的訪問(例如,如您持有 G2 駕照就不可以在高速公路上開車)。DB2 以非常類似的方式工作。
授權可以被分為兩個不同類別:權限和特權。
權限。權限提供一種把特權分組的方法,並對數據庫管理器和實用程序進行更高級的維護和操作加以控制。數據庫相關權限存儲在數據庫目錄中;系統權限關系到組成員關系,對給定的實例,它存儲在數據庫管理器配置文件中。DB2 有如下四個預定義的權限級別:SYSADM、SYSCTRL、SYSMAINT 和 DBADM。圖 1 說明 DB2 中使用的預定義的授權級別等級系統。SYSADM、SYSCTRL 和 SYSMAINT 在實例級別上操作,范圍是整個服務器。每個級別都有自己的按組分的特權和訪問規則(與 G 類執照非常相似)。這些權限都是在每個實例的數據庫管理器配置文件中被定義的。DBADM 授權級別鏈接到服務器實例中的特定數據庫,並自動把這一權限級別授予創建數據庫的用戶。DBADM 對數據庫及其內的所有對象都擁有所有可能的按組分的特權。缺省情況下,SYSADM 對包括數據庫在內的整個系統擁有所有可能的按組分的特權(SYSADM 有隱含的 DBADM 權限)。
DB2 使用不止一個縱向授權流。對於每個用戶請求,依據涉及到的對象和操作,可能會需要多次授權檢查。授權是使用 DB2 工具執行的。DB2 系統目錄中記錄了與每個授權名有關聯的特權。對通過驗證的用戶的授權名以及該用戶所屬的組與記錄在案的屬於他們的特權進行比較。根據比較結果,DB2 決定是否允許請求的訪問。
圖 2. 返回給未被授權執行特定命令的用戶的出錯消息
例如,圖 2 展示輸入命令運行的結果,該命令要求用戶具有特定的授權特權。
DB2 安全性機制阻止 TESTING 用戶標識,因為它知道這個用戶沒有得到執行這樣的命令的授權。在這種情況下,TESTING 顯然不是 SYSADM,因為該權限級別是執行如圖 2 中所示的命令所需要的。
在 DB2 中,您通過分別成為 SYSADM_GROUP、SYSCTRL_GROUP 和 SYSMAINT_GROUP 數據庫管理器配置參數指定的組的成員獲得 SYSADM、SYSCTRL 和 SYSMAINT 權限。
如想獲得所有授予屬於 DB2 預定義授權組的用戶的授權特權的完整列表,請參考 DB2 Administration Guide。
特權。特權(privilege)定義對授權名的單一許可,從而使用戶能夠修改或訪問數據庫資源。特權存儲於數據庫目錄中。雖然權限組預定義了一組可以隱性授予組成員的特權,但是特權是單獨的許可。
圖 3:DB2 中可用的樣本特權
DB2 可以利用由操作系統安全功能維護的用戶組。組允許數據庫管理員給組指派特權,這樣幫助降低數據庫系統持所有權的總成本。
例如,如果您要把創建表(CREATETAB)和連接數據庫(CONNECT)的特權為 50 個用戶開放,那麼創建組並給它添加特權要比顯式給每個單獨的用戶授予每種特權更容易。每當您需要添加或撤消特權時,您只要對組操作一次,對組的所有成員都會生效。
通常,動態 SQL 和非數據庫對象授權(例如,實例級命令和實用程序)適用於組成員關系。動態 SQL 是非預先安排或即時生成的 SQL。靜態 SQL 不適用於組成員關系(除 PUBLIC 組之外)。靜態 SQL 在執行之前就為 DB2 所知,而且 DB2 優化器已經生成了 SQL 訪問計劃並把它作為數據包存儲在目錄中。
特定用戶標識、所有用戶自動歸屬的特定組(PUBLIC)或多個組都可以被授予(或被撤消)每種特權。圖 3 是 DB2 提供的一些不同特權的示例。(注意:Table(表)和 VIEw(視圖)組中,ALTER、INDEX、REFERENCES 和 UPDATE Column 特權只適用於表。)如想要了解有關這些特權的深入討論,請參閱 DB2 Administration Guide。
對所有種類的操作和對象的訪問都由特權控制。您必須先擁有做某事的特權,DB2 才會允許您做這件事。
訪問控制方法
現在您懂得了 DB2 如何管理驗證和授權,讓我們看一下 DB2 為了更強大的訪問控制而綜合這些選項所提供的框架。訪問控制方法用於創建信息內容的子集,從而用戶可以只查看或存取與其需要相關的數據。您可以在 DB2 中使用許多不同的訪問控制方法。訪問控制是為您在數據庫中所進行的一切操作而存在的。
請考慮一下表 1 中視圖的行。您也許希望公司裡的所有用戶都有權訪問 L_Name、F_Name、Phone、email 和 Title 這些列。但是,為了盡可能降低垃圾郵件的風險,您也許希望通過 Web 訪問公司目錄的用戶只能看到 L_Name、F_Name 和 Phone 這幾列。最後,人力資源部的雇員應該有權訪問這張表中的所有行。DB2 訪問控制提供對於在 DB2 中保護您的數據和提供對數據的行級別訪問非常重要的框架。
使用數據包的訪問控制。數據包是與一條或多條 SQL 語句有關的信息集合,這是 DB2 內 SQL 的基本訪問控制點。數據包中包括諸如優化器生成的訪問計劃和授權模型等信息。向數據庫引擎發出的任何語句都會和特定數據包有關。
在創建數據包的時候,它就被綁定到具有特定特權的數據庫。創建數據包的人一定有執行數據包中所有靜態 SQL 語句所需要的特權。運行數據包的用戶也一定有這個數據包的 EXECUTE 特權,但是他們不一定有執行數據包中包含的所有靜態語句的一對一的特權。例如,沒有 CREATETAB 特權,用戶就不能在數據庫中創建表。但是,有特權運行包含靜態 CREATE TABLE 語句的數據包的用戶可以以這種方式創建表。數據包在控制用戶對數據庫對象的訪問權方面起了關鍵作用。
使用視圖的訪問控制。視圖是另一種主要限制對數據的低級(也稱為“行級”)存取的訪問控制方法。通過使用視圖,您就可以對 SQL 語句隱藏駐留在原始表中的敏感信息的行和列。您可以通過根據視圖授予特權使用戶可以存取信息。因為這些特權只適用於視圖,不會影響基本表,所以用戶的存取范圍僅限於視圖,而該視圖是通過創建所需表中數據的子集生成的。WITH CHECK 選項甚至提供更多的安全性,因為它不會讓特定的 SQL 語句改變用戶在視圖中沒有特權讀取的那些行。
表 1. 視圖中的一行
L_Name F_Name Phone e-mail Title Salary Bonus Total Salary
Godfrey Mike 2447337 [email protected] Mgr $23,000 $122,000 $145,000
使用觸發器的訪問控制。通過使用觸發器,您就可以創建更復雜的安全機制,無論什麼時候只要特定事件發生,安全機制就會被激活。表的 INSERT 語句就是一個示例事件,它可用於觸發觸發器。此外,觸發器可以在特定事件之前或之後觸發以提供更具活力的安全性審核。如果用戶的語句沒有通過觸發器內的安全性審核,則從觸發器主體內發出的錯誤將會防止表被修改。
使用 USER 專用寄存器的訪問控制。DB2 提供的專用寄存器名為 USER,其中包含用於在當前會話連接數據庫的用戶標識。您可以在視圖中使用專用寄存器中存儲的值來針對特定的用戶定制視圖。通過使用專用寄存器,您可以使基於表的視圖因用戶而異。您也可以把這一技術應用於觸發器和 SQL 語句。
審核功能
DB2 的審核工具使您可以維持對發生在實例內的事件的審核跟蹤。成功的數據存取嘗試監視和後續分析可以使數據訪問控制方面得到改進,並最終防止惡意或無意非授權存取數據。然後,就可以從這些記錄下來的事件中提取出一份報告供分析。 DB2 Administration Guide 中詳細介紹了審核。
請信任數據庫
DB2 的許多功能和機制使您甚至可以把最安全和最隱私的數據托付給數據庫引擎。當您的數據由 DB2 存儲和管理的時候,您可以對您的企業將在可擴展、健壯而且安全的環境中運行充滿自信。另外,如果您負責數據庫安全,那就意味著在晚上您可以睡得更香。
關於作者
Paul Zikopoulos 是 DB2 Sales Support 小組的數據庫專家。他有多篇有關 DB2 的文章在雜志上發表,並著有多本 DB2 方面的書籍。最近,Paul 同別人合著了 A DBA's Guide to Databases on Linux(Syngress Media 出版,2000 年)以及 DB2 for Dummies(IDG 圖書公司出版,2000 年)等書。Paul 是一位 DB2 認證高級技術專家(DB2 Certified Advanced Technical Expert,DRDA 和 Cluster/EEE),同時還是 DB2 認證解決方案專家(DB2 CertifIEd Solutions Expert,商業智能和數據庫管理)。您可以通過 [email protected]與他聯系。