如何保障DB2系統(tǒng)目錄視圖的安全
DB2系統(tǒng)目錄視圖存在著一些安全隱患,這會(huì)為黑客或者其他不按好心的用戶竊取相關(guān)的資料提供了便利,如何才能加強(qiáng)DB2系統(tǒng)目錄的安全性,成為了我們需要迫切解決的問題。
此文章主要向大家描述的是在實(shí)際操作中如何讓DB2系統(tǒng)目錄視圖更加安全,在DB2數(shù)據(jù)庫中系統(tǒng)目錄視圖中主要是保存著數(shù)據(jù)庫各種對(duì)象的一些信息。如表與列的定義、各種對(duì)象的特權(quán)信息、某個(gè)用戶所擁有的特權(quán)信息等等都保存在目錄視圖中。
這個(gè)設(shè)計(jì)跟Oracle等數(shù)據(jù)庫系統(tǒng)類似。
在DB2系統(tǒng)目錄視圖中保存著數(shù)據(jù)庫各種對(duì)象的相關(guān)信息。如表與列的定義、各種對(duì)象的特權(quán)信息、某個(gè)用戶所擁有的特權(quán)信息等等都保存在目錄視圖中。這個(gè)設(shè)計(jì)跟Oracle等數(shù)據(jù)庫系統(tǒng)類似。不過在這些目錄視圖的權(quán)限設(shè)計(jì)方面有比較大的差異。
一、系統(tǒng)目錄視圖在安全上的隱患。
在Oracle數(shù)據(jù)庫中,也有跟系統(tǒng)目錄視圖類似的設(shè)計(jì)。如將相關(guān)的數(shù)據(jù)庫對(duì)象以及權(quán)限等信息等存儲(chǔ)在數(shù)據(jù)字典中。但是對(duì)于Oracle數(shù)據(jù)庫來說,對(duì)于這個(gè)數(shù)據(jù)字典相關(guān)的視圖做了相關(guān)的限制。如在Oracle數(shù)據(jù)庫中,將數(shù)據(jù)字典分為user、all、dba三類。一般用戶只能夠使用user或者all數(shù)據(jù)字典視圖。
也就是說,只能夠查詢到自己擁有的對(duì)象或者自己擁有特定權(quán)限的對(duì)象信息。對(duì)于他人建立的對(duì)象,或者自己沒有權(quán)查詢的對(duì)象信息,一般用戶是查詢不到的。只有像具有數(shù)據(jù)庫管理員等特權(quán)的用戶才可以查詢到全部數(shù)據(jù)庫對(duì)象的信息。這在很大程度上保障了數(shù)據(jù)字典視圖的安全性。
但是對(duì)于DB2數(shù)據(jù)庫的系統(tǒng)目錄視圖,在這方面做的就不是很到位。如默認(rèn)情況下,在部署DB2數(shù)據(jù)庫的時(shí)候,數(shù)據(jù)庫會(huì)自動(dòng)創(chuàng)建系統(tǒng)目錄視圖。而在創(chuàng)建這個(gè)系統(tǒng)目錄視圖的時(shí)候,系統(tǒng)會(huì)將這個(gè)目錄視圖的select查詢權(quán)限賦予給public組。將這個(gè)目錄視圖賦予給這個(gè)組,就以為這數(shù)據(jù)庫系統(tǒng)中的用戶都具有查詢這個(gè)系統(tǒng)目錄視圖的權(quán)限。
即使這個(gè)對(duì)象不是這個(gè)用戶所創(chuàng)建的,或者用戶沒有這個(gè)對(duì)象的訪問權(quán)限,用戶也可以查詢到這個(gè)對(duì)象的相關(guān)信息,如誰創(chuàng)建了這個(gè)對(duì)象,誰擁有這個(gè)對(duì)象的哪些權(quán)限的信息。當(dāng)數(shù)據(jù)庫中數(shù)據(jù)的保密級(jí)別或者商業(yè)價(jià)值不怎么高的時(shí)候,這么設(shè)計(jì)不怎么會(huì)產(chǎn)生安全問題。#p#
但是,用戶使用起來不方便。如數(shù)據(jù)庫設(shè)計(jì)的比較復(fù)雜,有多個(gè)管理員同時(shí)維護(hù)數(shù)據(jù)庫系統(tǒng)。此時(shí)每個(gè)數(shù)據(jù)庫管理員之需要查詢到自己所創(chuàng)建的或則具有訪問權(quán)限的相關(guān)信息,而不需要全部的對(duì)象信息。顯然憑現(xiàn)在系統(tǒng)目錄視圖的設(shè)計(jì),不能夠做到這一點(diǎn)。
但是如果數(shù)據(jù)庫中的數(shù)據(jù)商業(yè)價(jià)值比較高,有很多人虎視眈眈的在打這些數(shù)據(jù)的注意,此時(shí)數(shù)據(jù)庫系統(tǒng)對(duì)于系統(tǒng)目錄視圖的默認(rèn)權(quán)限設(shè)計(jì),可能就不怎么合適了。因?yàn)槟夸浺晥D中存儲(chǔ)的所有對(duì)象信息(包括授權(quán)信息)對(duì)于所有用戶都是開放的。
這會(huì)為黑客或者其他不按好心的用戶竊取相關(guān)的資料提供便利。所以對(duì)于安全要求高的企業(yè),在部署DB2數(shù)據(jù)庫的時(shí)候,有可能需要更改這些系統(tǒng)目錄視圖的默認(rèn)權(quán)限,以提高目錄視圖中信息的安全性。讓只有相關(guān)的人員才能夠看到目錄視圖中的數(shù)據(jù)庫對(duì)象以及權(quán)限等相關(guān)信息。
二、如何提高系統(tǒng)目錄視圖的安全性?
既然數(shù)據(jù)庫系統(tǒng)目錄視圖存在一定的安全隱患,那么該如何提高其安全性呢?筆者對(duì)此有兩個(gè)建議,各位數(shù)據(jù)庫管理員可以根據(jù)自己的需要來選擇使用。
第一個(gè)是比較簡單的處理方法,即從public中撤銷對(duì)系統(tǒng)默認(rèn)視圖的select特權(quán)。然后給需要訪問這些信息的用戶再授予他們對(duì)于這些系統(tǒng)默認(rèn)視圖的select查詢權(quán)限。在DB2數(shù)據(jù)庫中這些系統(tǒng)目錄視圖也是視圖的一種,所以無論是授權(quán)還是撤銷權(quán)限都是跟其他任何普通視圖的授予與撤銷權(quán)限的方法是一致的。
唯一的區(qū)別就是操作用戶權(quán)限上的區(qū)別。對(duì)于普通的視圖,只要視圖的所有者或者具有視圖權(quán)限控制的用戶都可以更改視圖的相關(guān)權(quán)限。而對(duì)于DB2系統(tǒng)目錄視圖來說,操作員必須有sysadm或者DBADM的權(quán)限,才能夠更改系統(tǒng)目錄視圖的權(quán)限。即收回某些用戶的特權(quán),或者重新賦予某些用戶具有對(duì)系統(tǒng)目錄視圖的查詢權(quán)限。
第二個(gè)方法實(shí)現(xiàn)起來比較復(fù)雜,但是比較實(shí)用。簡單的說,就是按照Oracle數(shù)據(jù)庫系統(tǒng)的解決方式,將系統(tǒng)目錄視圖分為三類。第一類是user系統(tǒng)目錄視圖。即在查詢系統(tǒng)目錄視圖的時(shí),以當(dāng)前用戶為查詢條件,在系統(tǒng)目錄視圖中反映出來的是用戶自己建立的對(duì)象。其他用戶建立的對(duì)象,即使這個(gè)用戶具有查詢或者其他更加高級(jí)的權(quán)限,在這個(gè)視圖中也無法顯示出來。
這對(duì)于用戶維護(hù)自己創(chuàng)建的對(duì)象比較方便。第二類視圖是ALL視圖。這個(gè)視圖在運(yùn)行時(shí),也是以當(dāng)前用戶為查詢條件。不過在這個(gè)視圖中主要反映兩類信息。一是反映用戶自己所創(chuàng)建的對(duì)象,二是當(dāng)前用戶具有查詢等相關(guān)權(quán)限的對(duì)象信息。也就說,只要用戶有權(quán)查詢的對(duì)象都會(huì)在這個(gè)類別的系統(tǒng)目錄視圖中列出來。#p#
第三類視圖是DBA視圖,即顯示所有數(shù)據(jù)庫對(duì)象以及相關(guān)的授權(quán)信#p#息。這類視圖只有數(shù)據(jù)庫管理員才有查詢權(quán)限,其他用戶不具有這個(gè)視圖的查詢權(quán)限。分類分好后,可以先取消所有用戶對(duì)系統(tǒng)目錄視圖Select權(quán)限。注意在授權(quán)的時(shí)候,不是將系統(tǒng)目錄視圖的查詢權(quán)限賦予給其他的用戶。
而是以系統(tǒng)目錄視圖為基本對(duì)象,在此基礎(chǔ)上再根據(jù)上面的分類來建立對(duì)應(yīng)的視圖。然后在授權(quán)的時(shí)候,筆者是將這些新建立的視圖權(quán)限賦予給相關(guān)的用戶。也就說,用戶并不是直接查詢系統(tǒng)目錄視圖,而是通過查詢數(shù)據(jù)庫管理員所建立的視圖來查詢DB2系統(tǒng)目錄視圖中的相關(guān)內(nèi)容。
這不僅可以在系統(tǒng)目錄視圖與用戶之間多建立一道安全的屏障,而且還可以實(shí)現(xiàn)對(duì)目錄視圖內(nèi)容更加精細(xì)的控制。為了操作上的方便,筆者建議將建立視圖和賦予權(quán)限的語句保存下來。以后若需要重新部署數(shù)據(jù)庫,或者數(shù)據(jù)庫管理員跳槽后需要維護(hù)一個(gè)新的DB2數(shù)據(jù)庫系統(tǒng),那么可以直接通過這個(gè)語句來重建相關(guān)的視圖。
如果DB2數(shù)據(jù)庫部署比較簡單,只有一個(gè)數(shù)據(jù)庫管理員的話,那么只需要采用第一種簡便的處理方式既可。但是如果DB2數(shù)據(jù)庫應(yīng)用比較復(fù)雜,有多個(gè)數(shù)據(jù)庫管理員各司其職,共同負(fù)責(zé)數(shù)據(jù)庫應(yīng)用的時(shí)候,筆者建議采用第二種處理方式。添加了過濾條件之后,即可以保障系統(tǒng)目錄視圖數(shù)據(jù)的安全,還方便了用戶的操作。
此時(shí)即使某個(gè)數(shù)據(jù)庫管理員的帳號(hào)與密碼被泄露,那么其最終受影響的也只有這個(gè)數(shù)據(jù)庫管理員創(chuàng)建或者擁有查詢等權(quán)限的對(duì)象。而不會(huì)將其他用戶創(chuàng)建的對(duì)象或者這個(gè)用戶具有查詢等權(quán)限的對(duì)象信息泄露給其他人。其實(shí)這第二種方案只是第一次操作的時(shí)候比較復(fù)雜。
以后還有機(jī)會(huì)再次維護(hù)數(shù)據(jù)庫系統(tǒng)的話,只需要直接執(zhí)行第一次保存下來的SQL語句即可。所以不少有經(jīng)驗(yàn)的數(shù)據(jù)庫管理員,還都是比較樂于使用第二種解決方案的。因?yàn)閷?duì)于他們來說,可能第二種解決方案比第一種解決方案更加的簡單,使用起來更加的方便。
三、當(dāng)心統(tǒng)計(jì)信息泄露機(jī)密。
在系統(tǒng)目錄視圖中,有些列是統(tǒng)計(jì)信息列。這些列也比較危險(xiǎn)。因?yàn)橛涗浽贒B2系統(tǒng)目錄視圖中的某些統(tǒng)計(jì)系會(huì)含有可能是用戶環(huán)境中的敏感信息的數(shù)據(jù)。如果這些包含用戶環(huán)境中的敏感信息泄露的話,會(huì)給黑客等非法攻擊者攻擊數(shù)據(jù)庫提供方便。
這些敏感信息有時(shí)候就是他們攻擊數(shù)據(jù)庫的鑰匙。為此對(duì)于這些敏感信息,最好需要采取額外的保密措施。如即使這些統(tǒng)計(jì)信息用戶有權(quán)查看,因?yàn)檫@個(gè)對(duì)象就是用戶創(chuàng)建的。但是如果數(shù)據(jù)庫管理員認(rèn)為這個(gè)敏感信息對(duì)于用戶參與數(shù)據(jù)庫的維護(hù)工作沒有實(shí)際的價(jià)值,那么最好也屏蔽這些信息。
即通過在列級(jí)別上控制用戶查詢這個(gè)列的權(quán)限?;蛘哒f在重定義目錄視圖的時(shí)候,有意思的像用戶屏蔽這些敏感的信息。最后這些敏感的信息只有數(shù)據(jù)庫管理員一個(gè)人可以查詢。這可以作為以上兩個(gè)解決方案的輔助措施,來共同保障DB2系統(tǒng)目錄視圖的安全。