SQL Server與Oracle數(shù)據(jù)庫在安全性上的異同
前言:Oracle數(shù)據(jù)庫和SQL Server數(shù)據(jù)庫是兩種應(yīng)用比較普遍的數(shù)據(jù)庫,在業(yè)界,人們普遍認(rèn)為Oracle數(shù)據(jù)庫的安全性要比SQL Server數(shù)據(jù)庫高,但實(shí)際情況Oracle數(shù)據(jù)庫和SQL Server數(shù)據(jù)庫二者又有著怎么的差別,下面筆者就來談?wù)勥@兩種數(shù)據(jù)庫在安全性設(shè)計(jì)上面的異同。掌握好這些內(nèi)容,對(duì)于我們進(jìn)行數(shù)據(jù)庫安全方面的設(shè)計(jì)與管理,有著舉足輕重的作用。
一、角色到用戶的授權(quán)
現(xiàn)在很多應(yīng)用軟件,包括數(shù)據(jù)庫系統(tǒng),都采用了角色到用戶的授權(quán)體系。也就是說,先給一個(gè)角色進(jìn)行授權(quán),然后再把用戶加入到這個(gè)角色中,讓其擁有這個(gè)角色的權(quán)限。
如我們?cè)跀?shù)據(jù)庫設(shè)計(jì)的時(shí)候,一般至少需要兩種角色,一種是系統(tǒng)管理員角色,這種角色具有對(duì)數(shù)據(jù)庫系統(tǒng)進(jìn)行管理,如表的建立與刪除、用戶的建立與修改等等。另外一種是普通用戶的角色,其可以對(duì)表進(jìn)行插入、修改、刪除記錄等等的操作。然后,我們建立兩個(gè)帳戶,一個(gè)是數(shù)據(jù)庫管理員帳戶,讓其隸屬于管理員角色;再建立一個(gè)用戶帳號(hào),讓其歸屬于用戶角色。如此,不用給用戶設(shè)置特別的權(quán)限,他們就從他們的角色中,繼承了相關(guān)的權(quán)限。這就是基于角色-用戶的權(quán)限管理體系。
這個(gè)權(quán)限管理體系,兩種數(shù)據(jù)庫都是支持的,只不過具體的叫法有差異。在SQL Sever數(shù)據(jù)庫中,其沿用的是微軟操作系統(tǒng)的叫法,把角色稱做組。其實(shí),我們?cè)诮o操作系統(tǒng)定義用戶與權(quán)限的時(shí)候,也是采用這種方法,我們先建立一個(gè)組,再給這個(gè)組賦予特定的權(quán)限,然后,再建立一個(gè)用戶帳號(hào)加入到這個(gè)組中即可。雖然兩個(gè)數(shù)據(jù)庫的叫法不同,但是,其本質(zhì)是一樣的,換湯不換藥而已。
兩者的差異主要體現(xiàn)在對(duì)特定角色的授權(quán)方面。
二、角色的授權(quán)
兩個(gè)數(shù)據(jù)庫雖然在“角色-授權(quán)” 方面雷同,但在具體角色權(quán)限的分配上,還是有比較大的差異。用一句話來總結(jié),就是Oracle在權(quán)限的分配上,要比SQL Server數(shù)據(jù)庫細(xì)。Oracle在權(quán)限控制方面,基本上可以細(xì)化到每個(gè)步驟。
如在用戶管理上面,Oracle數(shù)據(jù)庫可以把創(chuàng)建用戶帳號(hào)的權(quán)利給某個(gè)組,但是,這個(gè)組卻沒有刪除帳號(hào)的權(quán)利。而微軟的數(shù)據(jù)庫中,則一般是把用戶管理的權(quán)限,包括用戶創(chuàng)建與刪除當(dāng)作一個(gè)權(quán)限賦予給某個(gè)組,而不能把他們分開。也就是說,一個(gè)組若具有用戶帳號(hào)管理權(quán)限的話,其不僅可以創(chuàng)建用戶帳號(hào),而且,也可以刪除用戶帳號(hào)。也就是說,微軟的SQL Server數(shù)據(jù)庫在權(quán)限設(shè)計(jì)上,沒有分得像Oracle那么細(xì)。正因?yàn)槿绱?,所以O(shè)racle數(shù)據(jù)庫在權(quán)限管理上面,要比SQL Server數(shù)據(jù)庫靈活。
不光在帳戶管理上如此,數(shù)據(jù)庫很多對(duì)象權(quán)限的管理,也有類似現(xiàn)象。如對(duì)于存儲(chǔ)過程的管理,對(duì)于表格的管理等等。甲骨文的Oracle數(shù)據(jù)庫在權(quán)限劃分上,比其他數(shù)據(jù)庫都要細(xì)。
三、對(duì)用戶進(jìn)行獨(dú)立授權(quán)
除了可以根據(jù)角色進(jìn)行授權(quán),Oracle數(shù)據(jù)庫還可以在用戶帳號(hào)的級(jí)別上直接跟用戶進(jìn)行授權(quán)。在SQL Server數(shù)據(jù)庫上也有類似的功能,但是,光從這方面說,前者要比后者靈活。如Oracle數(shù)據(jù)庫中具有的“ 對(duì)象授權(quán)”功能,在SQL Server數(shù)據(jù)庫中就無法實(shí)現(xiàn)。
1、 在用戶口令上,Oracle數(shù)據(jù)庫要比SQL Server數(shù)據(jù)庫安全性更高
眾所周知,用戶口令與帳號(hào)是數(shù)據(jù)庫安全的第一道保障。如在建立Oracle數(shù)據(jù)庫的用戶名的時(shí)候,默認(rèn)情況下,其有密碼復(fù)雜性驗(yàn)證設(shè)置。如果我們?cè)诮⒂脩裘臅r(shí)候,把密碼設(shè)置成為“123456”,Oracle數(shù)據(jù)庫不會(huì)接受。因?yàn)樗J(rèn)為純數(shù)字的密碼過于簡(jiǎn)單,容易被破解。而在微軟的SQL Server數(shù)據(jù)庫中,默認(rèn)情況下沒有這方面的限制。
2、 用戶建立默認(rèn)權(quán)限不同
這兩個(gè)數(shù)據(jù)庫都可以至少通過兩種方式建立用戶名。一是通過圖形化的界面建立用戶名與帳號(hào)。如Oracle數(shù)據(jù)庫可以通過EM,即瀏覽器建立用戶帳號(hào);而SQL Server數(shù)據(jù)庫則可以通過企業(yè)管理器建立用戶帳號(hào)。另外一個(gè)是可以通過命令行,也就是說,通過SQL 語句建立用戶名。
從SQL Server數(shù)據(jù)庫來說,這兩種建立方式?jīng)]有什么不同。但是,甲骨文的Oracle數(shù)據(jù)庫還是有比較大的差異,主要體現(xiàn)在默認(rèn)權(quán)限的不同。在利用瀏覽器建立用戶帳號(hào)的時(shí)候,默認(rèn)就具有連接數(shù)據(jù)庫的權(quán)限。而若在命令行中建立用戶帳號(hào),除非你明確給其指定其具有連接數(shù)據(jù)庫的權(quán)限,否則的話,這個(gè)帳戶是不能連接到數(shù)據(jù)庫的。
如我們通過命令,建立一個(gè)test的用戶,其密碼為test111。
Create user test identified by test111;
注意 ,這里設(shè)置用戶名密碼的時(shí)候,若是純數(shù)字的密碼,則數(shù)據(jù)庫不會(huì)接受。
然后,我們利用如下語句連接到數(shù)據(jù)庫,看看有什么現(xiàn)象。
Connet test/test111;
此時(shí),數(shù)據(jù)庫會(huì)拒絕這個(gè)用戶登陸到數(shù)據(jù)庫,會(huì)提示這個(gè)用戶沒有連接到數(shù)據(jù)庫的權(quán)限。除非,我們?cè)倮萌缦旅?,?duì)用戶進(jìn)行授權(quán)。
Grant connect to test;
對(duì)用戶名進(jìn)行授權(quán)后,才能夠連接到數(shù)據(jù)庫中去。這一點(diǎn)差異,很多數(shù)據(jù)庫管理員在剛開始接觸數(shù)據(jù)庫的時(shí)候,特別是先前有SQL Server數(shù)據(jù)庫使用經(jīng)驗(yàn)的人,一般都不容易搞清楚。結(jié)果在學(xué)習(xí)或者使用的時(shí)候,會(huì)遇到一些麻煩。筆者因?yàn)閰⒓舆^SQL Server數(shù)據(jù)庫管理員的培訓(xùn)與考試,所以,在后續(xù)使用Oracle數(shù)據(jù)庫的時(shí)候,對(duì)于這一點(diǎn)當(dāng)時(shí)就有點(diǎn)困惑。現(xiàn)在回頭想想,Oracle大概是基于安全方面的考慮吧。
#p#
3、 對(duì)象授權(quán)
假設(shè)現(xiàn)在有如下這種情形。
現(xiàn)在有個(gè)用戶test,其有product表的查詢權(quán)限。而另外一個(gè)用戶test1不具有這個(gè)表的任何訪問權(quán)限?,F(xiàn)在,test想把product表的查詢權(quán)限賦予test1,讓其也可以查詢數(shù)據(jù)庫中的product表。注意,這里的用戶test只是普通用戶,不是數(shù)據(jù)庫管理員。
這個(gè)需求在SQL Server數(shù)據(jù)庫中,是無法實(shí)現(xiàn)的,因?yàn)橛脩魌est沒有數(shù)據(jù)庫管理的權(quán)限,而只有表查詢的權(quán)限,其沒有權(quán)利為其他用戶分配這個(gè)表的查詢權(quán)限的權(quán)利。但是,在Oracle數(shù)據(jù)庫中,則通過“對(duì)象授權(quán)” 的方式,可以實(shí)現(xiàn)這個(gè)需求。
第一步:利用系統(tǒng)管理員帳戶,在分配權(quán)限的時(shí)候,給予“ 對(duì)象授權(quán)” 的權(quán)利。
如先用系統(tǒng)管理員帳戶登陸到系統(tǒng)中,然后給用戶test查詢表product的權(quán)利,并啟用對(duì)象授權(quán)模式。具體命令如下:
Grant select on product to test with grant option;
Grant select on product to test就表示用戶test具有查詢表product的權(quán)限;而后面的with grant option則表示對(duì)于這個(gè)用戶開啟了“ 對(duì)象授權(quán)” 的模式。以后,test用戶可以把對(duì)于表product的查詢權(quán)限賦予給其他用戶。
第二步:利用test用戶登陸,然后賦予test1用戶表prodcut的查詢權(quán)限。
Grant select on product to test1;
這個(gè)語句就是用戶test賦予用戶test1表product的查詢權(quán)利。若我們?cè)诮otest用戶賦予權(quán)限的時(shí)候,沒有啟用“對(duì)象授權(quán)”模式,即沒有在后面加入with grant option語句,則在以普通用戶test執(zhí)行這條語句的時(shí)候,就會(huì)發(fā)生錯(cuò)誤,提示用戶沒有這個(gè)權(quán)限。但是,若我們系統(tǒng)管理員在給test用戶分配權(quán)限的時(shí)候,開啟了“對(duì)象授權(quán)”的模式,則用戶test就可以賦予用戶test1表查詢的權(quán)限。不過,這只是針對(duì)于特定的表與特定的操作。如果數(shù)據(jù)庫管理員在分配test用戶權(quán)限的時(shí)候,只用了“Grant select on product to test with grant option”這個(gè)語句,就表示test用戶只能針對(duì)表product的查詢權(quán)限進(jìn)行再授權(quán)。如,現(xiàn)在test1想把表product-bom的查詢權(quán)限賦予給test1的話,數(shù)據(jù)庫服務(wù)器就不允許了,因?yàn)槠錄]有這個(gè)權(quán)利。
這就是對(duì)象授權(quán)的功能,雖然其破壞了數(shù)據(jù)庫權(quán)限管理的統(tǒng)一性,但是,這也提高了數(shù)據(jù)庫權(quán)限設(shè)計(jì)的靈活性,在大型數(shù)據(jù)庫設(shè)計(jì)的過程中,經(jīng)常會(huì)被用到。
除了對(duì)表可以進(jìn)行對(duì)象授權(quán)之外,還可以對(duì)過程、視圖等等也進(jìn)行對(duì)象授權(quán)。這里要注意的是,在對(duì)象授權(quán)的過程中,是需要對(duì)每個(gè)步驟進(jìn)行授權(quán)。如現(xiàn)在用戶test具有表product記錄查詢、記錄更新、記錄刪除等的權(quán)利。但是,其只有表查詢權(quán)利的“對(duì)象授權(quán)”。此時(shí),test用戶就不能夠把這個(gè)表的更新、刪除等權(quán)利賦予給用戶test1。因?yàn)閹魌est對(duì)對(duì)象進(jìn)行再授權(quán),只是針對(duì)特定的查詢操作。
另外,除了對(duì)象授權(quán)之外,Oracle數(shù)據(jù)庫中還有一個(gè)“系統(tǒng)授權(quán)”的概念。系統(tǒng)授權(quán)跟對(duì)象授權(quán)類似,只是其針對(duì)的是系統(tǒng)管理的權(quán)限,如帳戶刪除或者新建的操作。需要注意的是,系統(tǒng)授權(quán)仍然需要分步驟來進(jìn)行授權(quán)。
以上詳細(xì)介紹了SQL Server與Oracle數(shù)據(jù)庫在安全性上的異同,大家對(duì)SQL Server數(shù)據(jù)庫與Oracle數(shù)據(jù)庫有了新的認(rèn)識(shí)、新的了解,在以后的工作學(xué)習(xí)中能更加熟練的掌握和運(yùn)用SQL Server數(shù)據(jù)庫與Oracle數(shù)據(jù)庫。在涉及到數(shù)據(jù)庫安全方面的設(shè)計(jì)與管理,我們也能很好的應(yīng)對(duì)。
【編輯推薦】