国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

SQL Server數(shù)據(jù)庫(kù)安全規(guī)劃全攻略

2024-08-31 00:47:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友


在改進(jìn)sql server 7.0系列所實(shí)現(xiàn)的安全機(jī)制的過(guò)程中,microsoft建立了一種既靈活又強(qiáng)大的安全管理機(jī)制,它能夠?qū)τ脩粼L問(wèn)sql server服務(wù)器系統(tǒng)和數(shù)據(jù)庫(kù)的安全進(jìn)行全面地管理。按照本文介紹的步驟,你可以為sql server 7.0(或2000)構(gòu)造出一個(gè)靈活的、可管理的安全策略,而且它的安全性經(jīng)得起考驗(yàn)。   一、驗(yàn)證方法選擇 本文對(duì)驗(yàn)證(authentication)和授權(quán)(authorization)這兩個(gè)概念作不同的解釋。驗(yàn)證是指檢驗(yàn)用戶的身份標(biāo)識(shí);授權(quán)是指允許用戶做些什么。在本文的討論中,驗(yàn)證過(guò)程在用戶登錄sql server的時(shí)候出現(xiàn),授權(quán)過(guò)程在用戶試圖訪問(wèn)數(shù)據(jù)或執(zhí)行命令的時(shí)候出現(xiàn)。 構(gòu)造安全策略的第一個(gè)步驟是確定sql server用哪種方式驗(yàn)證用戶。sql server的驗(yàn)證是把一組帳戶、密碼與master數(shù)據(jù)庫(kù)sysxlogins表中的一個(gè)清單進(jìn)行匹配。windows nt/2000的驗(yàn)證是請(qǐng)求域控制器檢查用戶身份的合法性。一般地,如果服務(wù)器可以訪問(wèn)域控制器,我們應(yīng)該使用windows nt/2000驗(yàn)證。域控制器可以是win2k服務(wù)器,也可以是nt服務(wù)器。無(wú)論在哪種情況下,sql server都接收到一個(gè)訪問(wèn)標(biāo)記(access token)。訪問(wèn)標(biāo)記是在驗(yàn)證過(guò)程中構(gòu)造出來(lái)的一個(gè)特殊列表,其中包含了用戶的sid(安全標(biāo)識(shí)號(hào))以及一系列用戶所在組的sid。正如本文后面所介紹的,sql server以這些sid為基礎(chǔ)授予訪問(wèn)權(quán)限。注意,操作系統(tǒng)如何構(gòu)造訪問(wèn)標(biāo)記并不重要,sql server只使用訪問(wèn)標(biāo)記中的sid。也就是說(shuō),不論你使用sql server 2000、sql server 7.0、win2k還是nt進(jìn)行驗(yàn)證都無(wú)關(guān)緊要,結(jié)果都一樣。 如果使用sql server驗(yàn)證的登錄,它最大的好處是很容易通過(guò)enterprise manager實(shí)現(xiàn),最大的缺點(diǎn)在于sql server驗(yàn)證的登錄只對(duì)特定的服務(wù)器有效,也就是說(shuō),在一個(gè)多服務(wù)器的環(huán)境中管理比較困難。使用sql server進(jìn)行驗(yàn)證的第二個(gè)重要的缺點(diǎn)是,對(duì)于每一個(gè)數(shù)據(jù)庫(kù),我們必須分別地為它管理權(quán)限。如果某個(gè)用戶對(duì)兩個(gè)數(shù)據(jù)庫(kù)有相同的權(quán)限要求,我們必須手工設(shè)置兩個(gè)數(shù)據(jù)庫(kù)的權(quán)限,或者編寫(xiě)腳本設(shè)置權(quán)限。如果用戶數(shù)量較少,比如25個(gè)以下,而且這些用戶的權(quán)限變化不是很頻繁,sql server驗(yàn)證的登錄或許適用。但是,在幾乎所有的其他情況下(有一些例外情況,例如直接管理安全問(wèn)題的應(yīng)用),這種登錄方式的管理負(fù)擔(dān)將超過(guò)它的優(yōu)點(diǎn)。   二、web環(huán)境中的驗(yàn)證 即使最好的安全策略也常常在一種情形前屈服,這種情形就是在web應(yīng)用中使用sql server的數(shù)據(jù)。在這種情形下,進(jìn)行驗(yàn)證的典型方法是把一組sql server登錄名稱和密碼嵌入到web服務(wù)器上運(yùn)行的程序,比如asp頁(yè)面或者cgi腳本;然后,由web服務(wù)器負(fù)責(zé)驗(yàn)證用戶,應(yīng)用程序則使用它自己的登錄帳戶(或者是系統(tǒng)管理員sa帳戶,或者為了方便起見(jiàn),使用sysadmin服務(wù)器角色中的登錄帳戶)為用戶訪問(wèn)數(shù)據(jù)。 這種安排有幾個(gè)缺點(diǎn),其中最重要的包括:它不具備對(duì)用戶在服務(wù)器上的活動(dòng)進(jìn)行審核的能力,完全依賴于web應(yīng)用程序?qū)崿F(xiàn)用戶驗(yàn)證,當(dāng)sql server需要限定用戶權(quán)限時(shí)不同的用戶之間不易區(qū)別。如果你使用的是iis 5.0或者iis 4.0,你可以用四種方法驗(yàn)證用戶。第一種方法是為每一個(gè)網(wǎng)站和每一個(gè)虛擬目錄創(chuàng)建一個(gè)匿名用戶的nt帳戶。此后,所有應(yīng)用程序登錄sql server時(shí)都使用該安全環(huán)境。我們可以通過(guò)授予nt匿名帳戶合適的權(quán)限,改進(jìn)審核和驗(yàn)證功能。 第二種方法是讓所有網(wǎng)站使用basic驗(yàn)證。此時(shí),只有當(dāng)用戶在對(duì)話框中輸入了合法的帳戶和密碼,iis才會(huì)允許他們?cè)L問(wèn)頁(yè)面。iis依靠一個(gè)nt安全數(shù)據(jù)庫(kù)實(shí)現(xiàn)登錄身份驗(yàn)證,nt安全數(shù)據(jù)庫(kù)既可以在本地服務(wù)器上,也可以在域控制器上。當(dāng)用戶運(yùn)行一個(gè)訪問(wèn)sql server數(shù)據(jù)庫(kù)的程序或者腳本時(shí),iis把用戶為了瀏覽頁(yè)面而提供的身份信息發(fā)送給服務(wù)器。如果你使用這種方法,應(yīng)該記住:在通常情況下,瀏覽器與服務(wù)器之間的密碼傳送一般是不加密的,對(duì)于那些使用basic驗(yàn)證而安全又很重要的網(wǎng)站,你必須實(shí)現(xiàn)ssl(secure sockets layer,安全套接字層)。 在客戶端只使用ie 5.0、ie 4.0、ie 3.0瀏覽器的情況下,你可以使用第三種驗(yàn)證方法。你可以在web網(wǎng)站上和虛擬目錄上都啟用nt驗(yàn)證。ie會(huì)把用戶登錄計(jì)算機(jī)的身份信息發(fā)送給iis,當(dāng)該用戶試圖登錄sql server時(shí)iis就使用這些登錄信息。使用這種簡(jiǎn)化的方法時(shí),我們可以在一個(gè)遠(yuǎn)程網(wǎng)站的域上對(duì)用戶身份進(jìn)行驗(yàn)證(該遠(yuǎn)程網(wǎng)站登錄到一個(gè)與運(yùn)行著web服務(wù)器的域有著信任關(guān)系的域)。 最后,如果用戶都有個(gè)人數(shù)字證書(shū),你可以把那些證書(shū)映射到本地域的nt帳戶上。個(gè)人數(shù)字證書(shū)與服務(wù)器數(shù)字證書(shū)以同樣的技術(shù)為基礎(chǔ),它證明用戶身份標(biāo)識(shí)的合法性,所以可以取代nt的challenge/response(質(zhì)詢/回應(yīng))驗(yàn)證算法。netscape和ie都自動(dòng)在每一個(gè)頁(yè)面請(qǐng)求中把證書(shū)信息發(fā)送給iis。iis提供了一個(gè)讓管理員把證書(shū)映射到nt帳戶的工具。因此,我們可以用數(shù)字證書(shū)取代通常的提供帳戶名字和密碼的登錄過(guò)程。 由此可見(jiàn),通過(guò)nt帳戶驗(yàn)證用戶時(shí)我們可以使用多種實(shí)現(xiàn)方法。即使當(dāng)用戶通過(guò)iis跨越internet連接sql server時(shí),選擇仍舊存在。因此,你應(yīng)該把nt驗(yàn)證作為首選的用戶身份驗(yàn)證辦法。  三、設(shè)置全局組 構(gòu)造安全策略的下一個(gè)步驟是確定用戶應(yīng)該屬于什么組。通常,每一個(gè)組織或應(yīng)用程序的用戶都可以按照他們對(duì)數(shù)據(jù)的特定訪問(wèn)要求分成許多類別。例如,會(huì)計(jì)應(yīng)用軟件的用戶一般包括:數(shù)據(jù)輸入操作員,數(shù)據(jù)輸入管理員,報(bào)表編寫(xiě)員,會(huì)計(jì)師,審計(jì)員,財(cái)務(wù)經(jīng)理等。每一組用戶都有不同的數(shù)據(jù)庫(kù)訪問(wèn)要求。 控制數(shù)據(jù)訪問(wèn)權(quán)限最簡(jiǎn)單的方法是,對(duì)于每一組用戶,分別地為它創(chuàng)建一個(gè)滿足該組用戶權(quán)限要求的、域內(nèi)全局有效的組。我們既可以為每一個(gè)應(yīng)用分別創(chuàng)建組,也可以創(chuàng)建適用于整個(gè)企業(yè)的、涵蓋廣泛用戶類別的組。然而,如果你想要能夠精確地了解組成員可以做些什么,為每一個(gè)應(yīng)用程序分別創(chuàng)建組是一種較好的選擇。例如,在前面的會(huì)計(jì)系統(tǒng)中,我們應(yīng)該創(chuàng)建data entry operators、accounting data entry managers等組。請(qǐng)記住,為了簡(jiǎn)化管理,最好為組取一個(gè)能夠明確表示出作用的名字。 除了面向特定應(yīng)用程序的組之外,我們還需要幾個(gè)基本組。基本組的成員負(fù)責(zé)管理服務(wù)器。按照習(xí)慣,我們可以創(chuàng)建下面這些基本組:sql server administrators,sql server users,sql server denied users,sql server db creators,sql server security operators,sql server database security operators,sql server developers,以及 db_name users(其中db_name是服務(wù)器上一個(gè)數(shù)據(jù)庫(kù)的名字)。當(dāng)然,如果必要的話,你還可以創(chuàng)建其他組。 創(chuàng)建了全局組之后,接下來(lái)我們可以授予它們?cè)L問(wèn)sql server的權(quán)限。首先為sql server users創(chuàng)建一個(gè)nt驗(yàn)證的登錄并授予它登錄權(quán)限,把master數(shù)據(jù)庫(kù)設(shè)置為它的默認(rèn)數(shù)據(jù)庫(kù),但不要授予它訪問(wèn)任何其他數(shù)據(jù)庫(kù)的權(quán)限,也不要把這個(gè)登錄帳戶設(shè)置為任何服務(wù)器角色的成員。接著再為sql server denied users重復(fù)這個(gè)過(guò)程,但這次要拒絕登錄訪問(wèn)。在sql server中,拒絕權(quán)限始終優(yōu)先。創(chuàng)建了這兩個(gè)組之后,我們就有了一種允許或拒絕用戶訪問(wèn)服務(wù)器的便捷方法。 為那些沒(méi)有直接在sysxlogins系統(tǒng)表里面登記的組授權(quán)時(shí),我們不能使用enterpris managr,因?yàn)閑nterprise manager只允許我們從現(xiàn)有登錄名字的列表選擇,而不是域內(nèi)所有組的列表。要訪問(wèn)所有的組,請(qǐng)打開(kāi)query analyzer,然后用系統(tǒng)存儲(chǔ)過(guò)程sp_addsrvrolemember以及sp_addrolemember進(jìn)行授權(quán)。 對(duì)于操作服務(wù)器的各個(gè)組,我們可以用sp_addsrvrolemember存儲(chǔ)過(guò)程把各個(gè)登錄加入到合適的服務(wù)器角色:sql server administrators成為sysadmins角色的成員,sql server db creators成為dbcreator角色的成員,sql server security operators成為securityadmin角色的成員。注意sp_addsrvrolemember存儲(chǔ)過(guò)程的第一個(gè)參數(shù)要求是帳戶的完整路徑。例如,bigco域的joes應(yīng)該是bigco/joes(如果你想用本地帳戶,則路徑應(yīng)該是server_name/joes)。 要?jiǎng)?chuàng)建在所有新數(shù)據(jù)庫(kù)中都存在的用戶,你可以修改model數(shù)據(jù)庫(kù)。為了簡(jiǎn)化工作,sql server自動(dòng)把所有對(duì)model數(shù)據(jù)庫(kù)的改動(dòng)復(fù)制到新的數(shù)據(jù)庫(kù)。只要正確運(yùn)用model數(shù)據(jù)庫(kù),我們無(wú)需定制每一個(gè)新創(chuàng)建的數(shù)據(jù)庫(kù)。另外,我們可以用sp_addrolemember存儲(chǔ)過(guò)程把sql server security operators加入到db_securityadmin,把sql server developers加入到db_owner角色。 注意我們?nèi)匀粵](méi)有授權(quán)任何組或帳戶訪問(wèn)數(shù)據(jù)庫(kù)。事實(shí)上,我們不能通過(guò)enterprise manager授權(quán)數(shù)據(jù)庫(kù)訪問(wèn),因?yàn)閑nterprise manager的用戶界面只允許我們把數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限授予合法的登錄帳戶。sql server不要求nt帳戶在我們把它設(shè)置為數(shù)據(jù)庫(kù)角色的成員或分配對(duì)象權(quán)限之前能夠訪問(wèn)數(shù)據(jù)庫(kù),但enterprise manager有這種限制。盡管如此,只要我們使用的是sp_addrolemember存儲(chǔ)過(guò)程而不是enterprise manager,就可以在不授予域內(nèi)nt帳戶數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限的情況下為任意nt帳戶分配權(quán)限。 到這里為止,對(duì)model數(shù)據(jù)庫(kù)的設(shè)置已經(jīng)完成。但是,如果你的用戶群體對(duì)企業(yè)范圍內(nèi)各個(gè)應(yīng)用數(shù)據(jù)庫(kù)有著類似的訪問(wèn)要求,你可以把下面這些操作移到model數(shù)據(jù)庫(kù)上進(jìn)行,而不是在面向特定應(yīng)用的數(shù)據(jù)庫(kù)上進(jìn)行。  四、允許數(shù)據(jù)庫(kù)訪問(wèn) 在數(shù)據(jù)庫(kù)內(nèi)部,與迄今為止我們對(duì)登錄驗(yàn)證的處理方式不同,我們可以把權(quán)限分配給角色而不是直接把它們分配給全局組。這種能力使得我們能夠輕松地在安全策略中使用sql server驗(yàn)證的登錄。即使你從來(lái)沒(méi)有想要使用sql server登錄帳戶,本文仍舊建議分配權(quán)限給角色,因?yàn)檫@樣你能夠?yàn)槲磥?lái)可能出現(xiàn)的變化做好準(zhǔn)備。 創(chuàng)建了數(shù)據(jù)庫(kù)之后,我們可以用sp_grantdbaccess存儲(chǔ)過(guò)程授權(quán)db_name users組訪問(wèn)它。但應(yīng)該注意的是,與sp_grantdbaccess對(duì)應(yīng)的sp_denydbaccess存儲(chǔ)過(guò)程并不存在,也就是說(shuō),你不能按照拒絕對(duì)服務(wù)器訪問(wèn)的方法拒絕對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。如果要拒絕數(shù)據(jù)庫(kù)訪問(wèn),我們可以創(chuàng)建另外一個(gè)名為db_name denied users的全局組,授權(quán)它訪問(wèn)數(shù)據(jù)庫(kù),然后把它設(shè)置為db_denydatareader以及db_denydatawriter角色的成員。注意sql語(yǔ)句權(quán)限的分配,這里的角色只限制對(duì)對(duì)象的訪問(wèn),但不限制對(duì)ddl(data definition language,數(shù)據(jù)定義語(yǔ)言)命令的訪問(wèn)。 正如對(duì)登錄過(guò)程的處理,如果訪問(wèn)標(biāo)記中的任意sid已經(jīng)在sysusers系統(tǒng)表登記,sql將允許用戶訪問(wèn)數(shù)據(jù)庫(kù)。因此,我們既可以通過(guò)用戶的個(gè)人nt帳戶sid授權(quán)用戶訪問(wèn)數(shù)據(jù)庫(kù),也可以通過(guò)用戶所在的一個(gè)(或者多個(gè))組的sid授權(quán)。為了簡(jiǎn)化管理,我們可以創(chuàng)建一個(gè)名為db_name users的擁有數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限的全局組,同時(shí)不把訪問(wèn)權(quán)授予所有其他的組。這樣,我們只需簡(jiǎn)單地在一個(gè)全局組中添加或者刪除成員就可以增加或者減少數(shù)據(jù)庫(kù)用戶。   五、分配權(quán)限 實(shí)施安全策略的最后一個(gè)步驟是創(chuàng)建用戶定義的數(shù)據(jù)庫(kù)角色,然后分配權(quán)限。完成這個(gè)步驟最簡(jiǎn)單的方法是創(chuàng)建一些名字與全局組名字配套的角色。例如對(duì)于前面例子中的會(huì)計(jì)系統(tǒng),我們可以創(chuàng)建accounting data entry operators、accounting data entry managers之類的角色。由于會(huì)計(jì)數(shù)據(jù)庫(kù)中的角色與帳務(wù)處理任務(wù)有關(guān),你可能想要縮短這些角色的名字。然而,如果角色名字與全局組的名字配套,你可以減少混亂,能夠更方便地判斷出哪些組屬于特定的角色。 創(chuàng)建好角色之后就可以分配權(quán)限。在這個(gè)過(guò)程中,我們只需用到標(biāo)準(zhǔn)的grant、revoke和deny命令。但應(yīng)該注意deny權(quán)限,這個(gè)權(quán)限優(yōu)先于所有其他權(quán)限。如果用戶是任意具有deny權(quán)限的角色或者組的成員,sql server將拒絕用戶訪問(wèn)對(duì)象。 接下來(lái)我們就可以加入所有sql server驗(yàn)證的登錄。用戶定義的數(shù)據(jù)庫(kù)角色可以包含sql server登錄以及nt全局組、本地組、個(gè)人帳戶,這是它最寶貴的特點(diǎn)之一。用戶定義的數(shù)據(jù)庫(kù)角色可以作為各種登錄的通用容器,我們使用用戶定義角色而不是直接把權(quán)限分配給全局組的主要原因就在于此。 由于內(nèi)建的角色一般適用于整個(gè)數(shù)據(jù)庫(kù)而不是單獨(dú)的對(duì)象,因此這里建議你只使用兩個(gè)內(nèi)建的數(shù)據(jù)庫(kù)角色,,即db_securityadmin和db_owner。其他內(nèi)建數(shù)據(jù)庫(kù)角色,例如db_datareader,它授予對(duì)數(shù)據(jù)庫(kù)里面所有對(duì)象的select權(quán)限。雖然你可以用db_datareader角色授予select權(quán)限,然后有選擇地對(duì)個(gè)別用戶或組拒絕select權(quán)限,但使用這種方法時(shí),你可能忘記為某些用戶或者對(duì)象設(shè)置權(quán)限。一種更簡(jiǎn)單、更直接而且不容易出現(xiàn)錯(cuò)誤的方法是為這些特殊的用戶創(chuàng)建一個(gè)用戶定義的角色,然后只把那些用戶訪問(wèn)對(duì)象所需要的權(quán)限授予這個(gè)用戶定義的角色。   六、簡(jiǎn)化安全管理 sql server驗(yàn)證的登錄不僅能夠方便地實(shí)現(xiàn),而且與nt驗(yàn)證的登錄相比,它更容易編寫(xiě)到應(yīng)用程序里。但是,如果用戶的數(shù)量超過(guò)25,或者服務(wù)器數(shù)量在一個(gè)以上,或者每個(gè)用戶都可以訪問(wèn)一個(gè)以上的數(shù)據(jù)庫(kù),或者數(shù)據(jù)庫(kù)有多個(gè)管理員,sql server驗(yàn)證的登錄不容易管理。由于sql server沒(méi)有顯示用戶有效權(quán)限的工具,要記憶每個(gè)用戶具有哪些權(quán)限以及他們?yōu)楹我玫竭@些權(quán)限就更加困難。即使對(duì)于一個(gè)數(shù)據(jù)庫(kù)管理員還要擔(dān)負(fù)其他責(zé)任的小型系統(tǒng),簡(jiǎn)化安全策略也有助于減輕問(wèn)題的復(fù)雜程度。因此,首選的方法應(yīng)該是使用nt驗(yàn)證的登錄,然后通過(guò)一些精心選擇的全局組和數(shù)據(jù)庫(kù)角色管理數(shù)據(jù)庫(kù)訪問(wèn)。 下面是一些簡(jiǎn)化安全策略的經(jīng)驗(yàn)規(guī)則:   ·用戶通過(guò)sql server users組獲得服務(wù)器訪問(wèn),通過(guò)db_name users組獲得數(shù)據(jù)庫(kù)訪問(wèn)。   ·用戶通過(guò)加入全局組獲得權(quán)限,而全局組通過(guò)加入角色獲得權(quán)限,角色直接擁有數(shù)據(jù)庫(kù)里的權(quán)限。   ·需要多種權(quán)限的用戶通過(guò)加入多個(gè)全局組的方式獲得權(quán)限。 只要規(guī)劃得恰當(dāng),你能夠在域控制器上完成所有的訪問(wèn)和權(quán)限維護(hù)工作,使得服務(wù)器反映出你在域控制器上進(jìn)行的各種設(shè)置調(diào)整。雖然實(shí)際應(yīng)用中情況可能有所變化,但本文介紹的基本措施仍舊適用,它們能夠幫助你構(gòu)造出很容易管理的安全策略。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 许昌县| 龙南县| 临沭县| 沂源县| 武定县| 寻乌县| 榆树市| 昂仁县| 新余市| 开远市| 南乐县| 项城市| 宜君县| 临澧县| 中宁县| 扎鲁特旗| 柳州市| 丰台区| 绍兴县| 云南省| 同江市| 偃师市| 松阳县| 巢湖市| 长岭县| 克什克腾旗| 哈尔滨市| 大宁县| 同心县| 武城县| 喀喇沁旗| 镇雄县| 文登市| 靖江市| 张掖市| 阿巴嘎旗| 石楼县| 浪卡子县| 思茅市| 宝兴县| 马龙县|