直播中
我們還增加了DENY語(yǔ)句,可以被管理員用來(lái)禁止某個(gè)用戶對(duì)一個(gè)對(duì)象的所有訪問(wèn)權(quán)限。在SQL
Server 6.5中你可以在一行上運(yùn)行兩次REVOKE語(yǔ)句來(lái)在某種程度上仿效DENY語(yǔ)句。
在SQL Server 7.0中,如果你想阻止某人查看某一個(gè)表,你可以使用DENY來(lái)禁止他的SELECT權(quán)限。使用DENY語(yǔ)句時(shí)應(yīng)當(dāng)非常小心。舉個(gè)例子:假如你在AUTHORS表上有SELECT和INSERT的權(quán)限,而且作為某個(gè)NT組的成員,你還擁有UPDATE權(quán)限。然而,你所在的另一個(gè)NT組被DENY語(yǔ)句禁止了INSERT和UPDATE權(quán)限。結(jié)果是,你只有SELECT權(quán)限了。DENY語(yǔ)句會(huì)禁止對(duì)數(shù)據(jù)庫(kù)對(duì)象的訪問(wèn),因此你要確保沒有對(duì)PUBLIC組使用DENY語(yǔ)句,因?yàn)槿魏斡脩舳伎偸荘UBLIC組中的成員。許多沒有經(jīng)驗(yàn)的管理員這樣做了,然后他們只好打電話來(lái)向我們求助。
DENY不僅可以用于數(shù)據(jù)庫(kù)對(duì)象,它還可以用于登錄名。例如,你授予了NT組“domain
users”登錄到SQL Server的權(quán)限。Joe剛剛被解雇了但是他還不知道。你不能簡(jiǎn)單地使用REVOKE語(yǔ)句來(lái)取消Joe的登錄權(quán)限,因?yàn)樗麤]有被單獨(dú)授予登錄權(quán)限,而是和其他成員一起作為“domain
users”組中的一個(gè)成員被一起授予登錄權(quán)限。這時(shí)你就可以特別地對(duì)Joe使用DENY語(yǔ)句。這樣他不能登錄到SQL
Server了,而同一個(gè)組的其他成員仍然可以。
應(yīng)用程序角色是如何工作的?
可能解釋應(yīng)用程序角色的最好方式是在實(shí)際情況中說(shuō)明。比方說(shuō)你想做一個(gè)職工工資單的應(yīng)用程序,可以允許用戶更新工資。當(dāng)然你不希望允許用戶簡(jiǎn)單地登錄到SQL
Server中然后更改工資。如果雇員能夠那樣做的話,他就可能試圖去更改他自己的工資了。更合適的方法是使用一個(gè)工資單應(yīng)用程序,它能夠執(zhí)行特定的安全檢查,例如,不允許用戶更新他們自己的工資。
它是這樣工作的。你的工資單應(yīng)用程序以使用者的安全級(jí)別登錄到SQL
Server,以便服務(wù)器審計(jì)追蹤工具能夠知道到底是誰(shuí)在登錄到SQL Server。然后你的應(yīng)用程序切換到適當(dāng)?shù)臄?shù)據(jù)庫(kù)并調(diào)用系統(tǒng)存儲(chǔ)過(guò)程“sp_setapprole”來(lái)啟動(dòng)應(yīng)用程序角色。應(yīng)用程序角色是受密碼保護(hù)的,所以你需要把密碼作為參數(shù)傳遞給sp_setapprole。當(dāng)數(shù)據(jù)在網(wǎng)上傳輸時(shí),你也可以對(duì)密碼進(jìn)行加密。
一旦啟動(dòng)了應(yīng)用程序角色,用戶現(xiàn)有的權(quán)限被關(guān)閉,應(yīng)用程序角色的安全權(quán)限被相應(yīng)打開。你的應(yīng)用程序現(xiàn)在就可以使用應(yīng)用程序角色來(lái)執(zhí)行修改數(shù)據(jù)庫(kù)的操作了。
需要注意的一個(gè)問(wèn)題是,應(yīng)用程序角色是特定于連接的。假如你同時(shí)打開了兩個(gè)到SQL
Server的連接,你必須保證每個(gè)連接的應(yīng)用程序角色都被打開了。使用應(yīng)用程序角色時(shí),一旦打開連接并轉(zhuǎn)換到適當(dāng)?shù)臄?shù)據(jù)庫(kù)后,第一件事情就是調(diào)用“sp_setapprole”存儲(chǔ)過(guò)程。如果不啟動(dòng)應(yīng)用程序角色,你就不能夠訪問(wèn)任何應(yīng)用程序角色所專有的數(shù)據(jù)。