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