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