版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章SQLServer安全管理10.1SQLServer的驗(yàn)證模式10.2數(shù)據(jù)庫用戶10.3權(quán)限及設(shè)置10.4服務(wù)器角色10.5數(shù)據(jù)庫角色10.6權(quán)限管理10.7實(shí)戰(zhàn)訓(xùn)練小結(jié)
思考題
數(shù)據(jù)庫的安全是一個十分重要的問題。對于進(jìn)入數(shù)據(jù)庫的用戶身份需要驗(yàn)證,用戶的操作權(quán)限需要規(guī)定,只有防止非法用戶進(jìn)入和拒絕非法操作,才有可能管好數(shù)據(jù)庫。本章任務(wù):學(xué)習(xí)SQLServer2000數(shù)據(jù)庫的安全管理中的身份驗(yàn)證與登錄帳戶,數(shù)據(jù)庫用戶的創(chuàng)建,用戶權(quán)限和角色權(quán)限的設(shè)置與驗(yàn)證。10.1SQLServer的驗(yàn)證模式10.1.1SQLServer2000登錄身份驗(yàn)證模式用戶要使用SQL數(shù)據(jù)庫服務(wù)器,首先必須輸入登錄帳戶和密碼,通過SQLServer的登錄身份驗(yàn)證。由數(shù)據(jù)庫服務(wù)器可判斷是否具有聯(lián)接SQLServer的權(quán)限。SQLServer2000提供兩種確認(rèn)用戶的驗(yàn)證模式:SQLServer身份驗(yàn)證和Windows身份驗(yàn)證。
1.?SQLServer身份驗(yàn)證
SQLServer身份驗(yàn)證又稱為SQLServer標(biāo)準(zhǔn)登錄模式驗(yàn)證。使用SQLServer標(biāo)準(zhǔn)登錄模式驗(yàn)證時,系統(tǒng)管理員需事先創(chuàng)建一個登錄帳戶和密碼,并把它們存儲在SQLServer系統(tǒng)數(shù)據(jù)庫中。當(dāng)用戶想要聯(lián)接到SQLServer上時,必須提供一個數(shù)據(jù)庫服務(wù)器中已存在的登錄帳戶和密碼。
當(dāng)SQLServer安裝完成后,SQLServer就自動建立了一個特殊的帳戶?sa(SystemAdministrator)。sa帳戶擁有服務(wù)器和所有的數(shù)據(jù)庫,即sa擁有最高的管理權(quán)限,可以執(zhí)行服務(wù)器范圍內(nèi)的所有操作。學(xué)習(xí)時sa可以是空密碼,正式使用數(shù)據(jù)庫時,為了安全,sa必須設(shè)置密碼。sa帳戶無法刪除。
2.?Windows身份驗(yàn)證使用Windows身份驗(yàn)證時,被授權(quán)聯(lián)接SQLServer的WindowsNT/2000用戶帳戶或組帳戶在聯(lián)接SQLServer時不需要提供登錄帳戶和密碼,即SQLServer認(rèn)為WindowsNT/2000已對該用戶作了身份驗(yàn)證。
通常,針對Windows用戶推薦使用Windows身份驗(yàn)證,主要原因有三個。第一,可以提高管理效率??梢詫⑿枰L問SQLServer的用戶的WindowsNT/2000用戶帳戶加入WindowsNT/2000組帳戶中,然后將WindowsNT/2000組帳戶映射成SQLServer中的一個用戶,從而使整個組的每個成員都有權(quán)訪問SQLServer數(shù)據(jù)庫。第二,可以加快登錄速度。WindowsNT/2000用戶在登錄SQLServer時不需要再次驗(yàn)證密碼。第三,可以增強(qiáng)安全性。使用WindowsNT/2000用戶帳戶的密碼更加安全,可以要求密碼定期更換、增強(qiáng)復(fù)雜度和重復(fù)間隔等,防止密碼長期固定不變、密碼過于簡單或交替使用少數(shù)密碼等現(xiàn)象。
注意:如果將SQLServer安裝在Windows9x操作系統(tǒng)上,則將只能使用SQLServer身份驗(yàn)證模式,因?yàn)閃indows9x不支持WindowsNT/2000帳戶驗(yàn)證方式。如前所述,SQLServer2000登錄身份驗(yàn)證用來驗(yàn)證用戶是否具有聯(lián)接SQLServer的權(quán)限。和SQLServer2000提供的兩種確認(rèn)用戶的驗(yàn)證模式相對應(yīng),在SQLServer2000中存在兩類登錄帳戶,即Windows用戶帳戶和SQLServer帳戶。在SQLServer2000企業(yè)管理器的樹型目錄中展開服務(wù)器下的“安全性”,選擇“登錄”,可以查看當(dāng)前服務(wù)器所有的登錄帳戶信息,如圖10-1所示。圖10-1在企業(yè)管理器中查看服務(wù)器的登錄帳戶信息
在圖10-1中,對于每一個服務(wù)器登錄帳戶,列出了該帳戶的“名稱”、“類型”、“服務(wù)器訪問”、“默認(rèn)數(shù)據(jù)庫”以及“默認(rèn)語言”。帳戶的類型有三種,分別是“Windows用戶”帳戶、“Windows組”帳戶和“標(biāo)準(zhǔn)”帳戶。對于SQLServer帳戶,“名稱”列直接顯示帳戶名稱,顯示的圖標(biāo)如圖10-1中SQLServer帳戶sa的圖標(biāo)所示。對于WindowsNT/2000用戶帳戶,帳戶名采用“計算機(jī)名稱(或域名)\用戶名(或組名)”的形式表示。例如,計算機(jī)xjsb6031上的用戶stu使用“xjsb6031\stu”來表示,如圖10-2所示。計算機(jī)xjsb6031上的用戶組帳戶dbAdmin使用“xjsb6031\dbAdmin”來表示。圖10-2在計算機(jī)管理中創(chuàng)建的用戶stu
對于WindowsNT/2000內(nèi)建本地組,如Administrators、Users、Guests,其帳戶名中使用BUILTIN代替計算機(jī)名(或域名)。例如,WindowsNT/2000內(nèi)建本地組Administrators,其帳戶名為“BUILTIN\Administrators”,如圖10-1所示?!胺?wù)器訪問”欄顯示了是否允許該用戶登錄服務(wù)器,取值可以是“許可”或“拒絕”?!澳J(rèn)數(shù)據(jù)庫”是指用戶登錄SQLServer后首先要聯(lián)接的數(shù)據(jù)庫,默認(rèn)為master數(shù)據(jù)庫?!澳J(rèn)語言”定義了SQLServer使用何種語言向用戶顯示信息,如SimplifiedChinese(中文簡體)、English(英語)等。10.1.2設(shè)置身份驗(yàn)證模式可以使用企業(yè)管理器設(shè)置SQLServer身份驗(yàn)證模式。其步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組。
(2)右擊要設(shè)置身份驗(yàn)證模式的服務(wù)器,并在彈出的快捷菜單中選擇“屬性”。
(3)選擇“安全性”選項卡。
(4)選擇“僅Windows”單選按鈕(使用WindowsNT/2000身份驗(yàn)證模式)或“SQLServer和Windows”單選按鈕,后者表示使用混合身份驗(yàn)證模式,如圖10-3所示。
注意:改變設(shè)置后,必須停止并重新啟動SQLServer服務(wù)器,設(shè)置才會生效。圖10-3設(shè)置SQLServer身份驗(yàn)證模式10.1.3添加SQLServer身份驗(yàn)證登錄帳戶
SQLServer身份驗(yàn)證的登錄帳戶既適合于Windows平臺的用戶,也適合于非Windows平臺的用戶。
1.使用企業(yè)管理器添加登錄帳戶使用企業(yè)管理器添加SQLServer身份驗(yàn)證登錄帳戶的步驟如下:
(1)在企業(yè)管理器中展開SQLServer服務(wù)器組中的相應(yīng)服務(wù)器。
(2)右擊“安全性”→“登錄”→“新建登錄”。
(3)選中“SQLServer身份驗(yàn)證”單選按鈕。
(4)在“名稱”文本框中輸入一個用戶名,并在“密碼”文本框中輸入密碼,如圖10-4所示。(5)在“數(shù)據(jù)庫”下拉列表框中選擇默認(rèn)數(shù)據(jù)庫,在“語言”下拉列表框中選擇默認(rèn)語言。如圖10-4所示,選擇student數(shù)據(jù)庫作為默認(rèn)數(shù)據(jù)庫,選擇SimplifiedChinese(中文簡體)作為默認(rèn)語言。
(6)單擊“確定”按鈕。
(7)在隨后出現(xiàn)的“確認(rèn)密碼”對話框中再次輸入密碼并單擊“確定”按鈕。
注意:需要確保新添加的帳戶擁有對默認(rèn)數(shù)據(jù)庫的訪問權(quán)限,其設(shè)置方法以后介紹。圖l0-4添加SQLServer身份驗(yàn)證登錄帳戶2.使用Transact-SQL語句添加登錄帳戶除了使用企業(yè)管理器外,還可以使用Transact-SQL語句添加SQLServer身份驗(yàn)證登錄帳戶,這需要使用系統(tǒng)存儲過程sp_addlogin。
sp_addlogin的參數(shù)可以有帳戶名、密碼、默認(rèn)數(shù)據(jù)庫、默認(rèn)語言等。其中,帳戶名必須指定(必選參數(shù)),其他參數(shù)可以省略(使用默認(rèn)值)。
【例10-1】為用戶stu創(chuàng)建一個SQLServer登錄帳戶,沒有指定密碼或默認(rèn)數(shù)據(jù)庫。程序清單如下:
EXECsp_addlogin'stu'
在查詢分析器中執(zhí)行上面程序的結(jié)果是“已創(chuàng)建新登錄”。在企業(yè)管理器中,刷新后的結(jié)果如圖10-5所示,可以確認(rèn)用戶帳戶stu已成功添加。圖10-5在企業(yè)管理器中顯示添加用戶帳戶后的結(jié)果【例10-2】在查詢分析器中為用戶stu1創(chuàng)建一個SQLServer登錄帳戶,并指定密碼pwd以及名為College的默認(rèn)數(shù)據(jù)庫。程序清單如下:
EXECsp_addlogin'stu1','pwd','College'
運(yùn)行上述代碼后,我們可以用“stu1”這個帳戶登錄,成功登錄后,在數(shù)據(jù)庫框會顯示“College”。但此時,“stu1”只是指向“College”數(shù)據(jù)庫,還不具有訪問該數(shù)據(jù)庫的權(quán)限。10.1.4授權(quán)Windows身份驗(yàn)證登錄帳戶授權(quán)Windows身份驗(yàn)證登錄帳戶,實(shí)際上是為已經(jīng)存在的WindowsNT/2000用戶帳戶或組帳戶授權(quán),準(zhǔn)許該帳戶進(jìn)入SQLServer服務(wù)器時不輸入密碼就可以登錄。1.使用企業(yè)管理器授權(quán)Windows帳戶登錄SQL服務(wù)器
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中的相應(yīng)服務(wù)器。
(2)右擊“安全性”→“登錄”,選擇“新建登錄”,打開“新建登錄”對話框。
(3)選中“Windows身份驗(yàn)證”單選按鈕。
(4)在“名稱”框中輸入“計算機(jī)名稱(或域名)\用戶名(或組名)”形式的用戶帳戶名,例如“xjsb6031\stu”,如圖10-6所示,也可以單擊“名稱”框右側(cè)的按鈕,并在隨后彈出的對話框中選擇用戶,如圖10-7所示。圖10-6使用企業(yè)管理器添加登錄帳戶圖10-7選擇用戶對話框(5)在“數(shù)據(jù)庫”下拉列表框中選擇默認(rèn)數(shù)據(jù)庫,在“語言”下拉列表框中選擇默認(rèn)語言。如圖10-6所示,選擇student數(shù)據(jù)庫作為默認(rèn)數(shù)據(jù)庫,選擇SimplifiedChinese(中文簡體)作為默認(rèn)語言。
(6)單擊“確定”按鈕。注意:需要確保新添加的帳戶是已存在的WindowsNT/2000用戶帳戶或組帳戶??梢允褂肳indowsNT/2000的“計算機(jī)管理”或“域用戶管理器”預(yù)先添加需要的用戶帳戶或組帳戶。2.使用Transact-SQL語句授權(quán)Windows帳戶登錄SQL服務(wù)器除了上面的方法外,還可以使用Transact-SQL語句添加Windows身份驗(yàn)證登錄帳戶,這需要使用系統(tǒng)存儲過程sp_grantlogin。
sp_grantlogin只有一個參數(shù),即“計算機(jī)名稱(或域名)\用戶名(或組名)”形式的用戶帳戶名。
【例10-3】準(zhǔn)許WindowsNT/2000用戶“xjsb6031\stu”聯(lián)接到SQLServer。程序清單如下:
EXECsp_grantlogin'xjsb6031\stu'
在查詢分析器中運(yùn)行上述語句,即可實(shí)現(xiàn)WindowsNT/2000用戶xjsb6031\stu聯(lián)接到SQLServer。10.1.5修改登錄帳戶屬性在添加了新的登錄帳戶之后可以修改其屬性,如默認(rèn)數(shù)據(jù)庫、默認(rèn)語言等。在企業(yè)管理器中修改登錄帳戶屬性,只需雙擊要修改屬性的登錄帳戶,并在屬性對話框中進(jìn)行修改即可。注意:對于SQLServer的標(biāo)準(zhǔn)帳戶,可以在SQL中修改其密碼。對于WindowsNT/2000帳戶,只能使用WindowsNT/2000的“計算機(jī)管理器”或“域用戶管理器”修改帳戶密碼。使用Transact-SQL語句修改帳戶屬性涉及以下系統(tǒng)存儲過程。
(1)?sp_password:用于修改帳戶密碼。
(2)?sp_defaultdb:用于修改默認(rèn)數(shù)據(jù)庫。
(3)?sp_defaultlanguage:用于修改默認(rèn)語言?!纠?0-4】將登錄帳戶stu的密碼更改為“12345678”。程序清單如下:
EXECsp_passwordnull,'12345678','stu'
上面語句中的“null”位置上可以是原密碼,此處的“null”表示不管原密碼是什么,直接修改成新密碼。
【例10-5】將master設(shè)置為用戶stu的默認(rèn)數(shù)據(jù)庫。程序清單如下:
EXECsp_defaultdb'stu','master'【例10-6】將登錄用戶stu的默認(rèn)語言設(shè)置為法語。程序清單如下:
EXECsp_defaultlanguage'stu','french'10.1.6拒絕登錄帳戶有時可能需要暫時禁止一個登錄帳戶聯(lián)接到SQLServer,過一段時間后再恢復(fù),這可以通過企業(yè)管理器或Transact-SQL語句來實(shí)現(xiàn)。
1.使用企業(yè)管理器拒絕登錄帳戶使用企業(yè)管理器拒絕登錄帳戶的步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。
(2)選擇“安全性”→“登錄”,在右窗格的登錄帳戶列表中雙擊要拒絕訪問的WindowsNT/2000帳戶,打開帳戶屬性對話框。
(3)在帳戶屬性對話框中,選中“拒絕訪問”單選按鈕,如圖10-8所示。
(4)單擊“確定”按鈕。圖10-8拒絕登錄帳戶2.使用Transact-SQL語句拒絕登錄帳戶利用系統(tǒng)存儲過程sp_denyaccess可以暫時禁止一個WindowsNT/2000帳戶的登錄權(quán)限。
【例10-7】阻止用戶“xjsb6031\stu”登錄到SQLServer。程序清單如下:
EXECsp_denylogin'xjsb6031\stu'
當(dāng)需要恢復(fù)被拒絕登錄帳戶的登錄權(quán)限時,可以使用企業(yè)管理器,也可以使用系統(tǒng)存儲過程sp_grantlogin。
注意:只能拒絕WindowsNT/2000帳戶登錄,對于SQLServer登錄帳戶,只能通過刪除該登錄帳戶來禁止該帳戶聯(lián)接到SQLServer。10.1.7刪除登錄帳戶如果需要永遠(yuǎn)禁止某帳戶訪問SQLServer,則可以將該帳戶刪除。
1.使用企業(yè)管理器刪除登錄帳戶使用企業(yè)管理器刪除登錄帳戶的步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。
(2)選擇“安全性”→“登錄”,右擊右窗格登錄帳戶列表中要刪除的帳戶,從彈出的快捷菜單中選擇“刪除”選項,如圖10-9所示。
(3)在隨后彈出的提示框中單擊“是”按鈕。圖10-9刪除登錄帳戶2.使用Transact-SQL語句刪除登錄帳戶使用系統(tǒng)存儲過程刪除登錄帳戶時,要根據(jù)不同類型的登錄帳戶使用不同的系統(tǒng)存儲過程。對于WindowsNT/2000帳戶,需要使用系統(tǒng)存儲過程sp_revokelogin,而對于SQLServer帳戶,則需使用系統(tǒng)存儲過程sp_droplogin?!纠?0-8】撤消WindowsNT/2000帳戶“xjsb6031\stu”訪問數(shù)據(jù)庫(Windows帳戶仍在)。程序如下:
EXECsp_revokelogin'xjsb6031\stu'【例10-9】刪除SQLServer帳戶stu1。程序如下:
EXECsp_droplogin'stu1'
刪除某登錄帳戶后,該帳戶將在企業(yè)管理器窗口的登錄帳戶列表中消失。10.2數(shù)?據(jù)?庫?用?戶10.2.1管理數(shù)據(jù)庫用戶在數(shù)據(jù)庫中,一個用戶或工作組取得合法的登錄帳戶,只表明該帳戶可以通過Windows認(rèn)證或者SQLServer認(rèn)證,并不表明可以對數(shù)據(jù)庫數(shù)據(jù)和數(shù)據(jù)庫對象進(jìn)行某種或者某些操作,管理員必須在數(shù)據(jù)庫中為用戶建立一個用戶帳戶,才能使該用戶訪問該數(shù)據(jù)庫。每個數(shù)據(jù)庫中都有一個獨(dú)立的數(shù)據(jù)庫用戶列表。每個數(shù)據(jù)庫用戶與服務(wù)器登錄帳戶間都存在著一種映射關(guān)系。系統(tǒng)管理員可以將一個服務(wù)器登錄帳戶映射到用戶需要訪問的每一個數(shù)據(jù)庫中的一個用戶帳戶或角色上。一個登錄帳戶在不同的數(shù)據(jù)庫中可以映射成不同的用戶,從而擁有不同的權(quán)限。
在SQLServer中,每個數(shù)據(jù)庫一般都有兩個默認(rèn)的用戶:dbo和guest。dbo代表數(shù)據(jù)庫的擁有者。例如,sysadmin服務(wù)器角色的成員被自動映射成dbo。在安裝SQLServer系統(tǒng)時,guest用戶被加入到master、pubs、tempdb和northwind數(shù)據(jù)庫中,該用戶主要是讓那些沒有自己的用戶帳戶的SQLServer登錄者作為默認(rèn)用戶,訪問具有g(shù)uest用戶的數(shù)據(jù)庫。使用企業(yè)管理器可以管理數(shù)據(jù)庫的用戶。在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器,選擇“數(shù)據(jù)庫”→“數(shù)據(jù)庫名”→“用戶”,可以在右窗格中看到該數(shù)據(jù)庫的所有用戶。圖10-10顯示了系統(tǒng)數(shù)據(jù)庫master中的所有用戶列表。圖10-10顯示系統(tǒng)數(shù)據(jù)庫master中的所有用戶列表10.2.2添加數(shù)據(jù)庫用戶數(shù)據(jù)庫用戶是用戶進(jìn)入數(shù)據(jù)庫服務(wù)器后的又一道關(guān)卡。登錄帳戶相當(dāng)于進(jìn)入大樓前給門衛(wèi)看的通行證,而數(shù)據(jù)庫用戶則是進(jìn)入房間的鑰匙。不同的房間需要不同的鑰匙,一個人也可能有多個房間的鑰匙??梢詾橐粋€登錄帳戶在一個或多個數(shù)據(jù)庫中添加用戶。數(shù)據(jù)庫用戶的名字可以與登錄帳戶相同,也可以不同。
1.使用企業(yè)管理器添加數(shù)據(jù)庫用戶使用企業(yè)管理器添加數(shù)據(jù)庫用戶的步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。(2)展開“數(shù)據(jù)庫”,再展開待添加用戶的數(shù)據(jù)庫,右擊“用戶”,在彈出的快捷菜單中選擇“新建數(shù)據(jù)庫用戶”選項,如圖10-11所示,將彈出“數(shù)據(jù)庫用戶屬性”對話框,如圖10-12所示。
(3)在“登錄名”下拉列表框中選擇一個登錄帳戶(這里選中的是Windows登錄帳戶,也可以選SQL標(biāo)準(zhǔn)登錄帳戶)。
(4)在“用戶名”框中輸入映射后的用戶名(如果選SQL標(biāo)準(zhǔn)登錄帳戶,則數(shù)據(jù)庫用戶名默認(rèn)和登錄名相同),如圖10-13所示。圖10-11“新建數(shù)據(jù)庫用戶”選項圖10-12“數(shù)據(jù)庫用戶屬性”對話框圖10-13選擇登錄帳戶并輸入用戶名(5)如果需要,則還可以在“數(shù)據(jù)庫角色成員”列表中選擇除public以外的其他數(shù)據(jù)庫角色。關(guān)于數(shù)據(jù)庫角色的內(nèi)容將在后面的章節(jié)中講述。在圖10-13中,將登錄帳戶“xjsb6031\stu”映射成college數(shù)據(jù)庫的用戶stuAdmin。這樣,登錄帳戶“xjsb6031\stu”就可以用“stuAdmin”這個用戶名進(jìn)入college數(shù)據(jù)庫了。
2.使用Transact-SQL語句添加數(shù)據(jù)庫用戶除上述方法外,還可以使用系統(tǒng)存儲過程sp_grantdbaccess添加數(shù)據(jù)庫用戶。
【例10-10】在college數(shù)據(jù)庫中為WindowsNT/2000用戶“xjsb6031\teacher”添加數(shù)據(jù)庫用戶,并取名為teachAdmin。程序清單如下:
USEcollege--選中college數(shù)據(jù)庫
EXECsp_grantdbaccess'xjsb6031\teacher','teachAdmin'
這樣,登錄帳戶“xjsb6031\teacher”就可以用“teachAdmin”這個用戶名進(jìn)入college數(shù)據(jù)庫了。如果選中其他數(shù)據(jù)庫運(yùn)行上述語句,則可為登錄帳戶“xjsb6031\teacher”在多個數(shù)據(jù)庫中創(chuàng)建用戶,這個用戶可同時訪問多個數(shù)據(jù)庫。10.2.3刪除數(shù)據(jù)庫用戶當(dāng)我們要取消某個登錄帳戶對數(shù)據(jù)庫訪問時,就要刪除數(shù)據(jù)庫的用戶。刪除數(shù)據(jù)庫的用戶實(shí)際就是刪除一個登錄帳戶與一個數(shù)據(jù)庫用戶的映射,刪除之后在數(shù)據(jù)庫用戶列表中就少了這個用戶,與這個數(shù)據(jù)庫用戶對應(yīng)的登錄帳戶就失去了這個數(shù)據(jù)庫的訪問權(quán),這時,該登錄帳戶還在,該登錄帳戶對其他數(shù)據(jù)庫的訪問權(quán)并不受影響。在企業(yè)管理器中,刪除一個數(shù)據(jù)庫用戶時可以用鼠標(biāo)右擊欲刪除的用戶,從彈出的快捷菜單中選擇“刪除”選項,在隨后彈出的確認(rèn)對話框中單擊“是”按鈕,即可將該用戶從數(shù)據(jù)庫中刪除,如圖10-14所示。這時該用戶所對應(yīng)的登錄帳戶仍然存在。圖10-14刪除數(shù)據(jù)庫用戶
利用Transact-SQL語句同樣可以刪除數(shù)據(jù)庫用戶,下面是利用系統(tǒng)存儲過程sp_revokedbaccess刪除用戶的例子。
【例10-11】從college數(shù)據(jù)庫中刪除用戶teachAdmin。程序如下:
USEcollegeEXECsp_revokedbaccess'teachAdmin'
運(yùn)行上述語句后,登錄帳戶“xjsb6031\teacher”就失去了對college數(shù)據(jù)庫的訪問權(quán)。10.3權(quán)?限?及?設(shè)?置權(quán)限用來指定授權(quán)數(shù)據(jù)庫用戶在數(shù)據(jù)庫中可以執(zhí)行的操作。用戶在登錄到SQLServer之后,其用戶帳戶歸屬的WindowsNT/2000組或角色被賦予的權(quán)限決定了該用戶能夠?qū)δ男?shù)據(jù)庫對象執(zhí)行哪種操作以及能夠訪問、修改哪些數(shù)據(jù)。在每個數(shù)據(jù)庫中,用戶的權(quán)限獨(dú)立于用戶帳戶和用戶在數(shù)據(jù)庫中的角色,每個數(shù)據(jù)庫都有自己獨(dú)立的權(quán)限系統(tǒng)。10.3.1數(shù)據(jù)庫權(quán)限
SQLServer中包括三種類型的權(quán)限:對象權(quán)限、語句權(quán)限和預(yù)定義權(quán)限。1.對象權(quán)限對象權(quán)限表示數(shù)據(jù)庫用戶對特定的數(shù)據(jù)庫對象(即表、視圖、存儲過程等)的操作權(quán)限,它決定了能對表、視圖等數(shù)據(jù)庫對象執(zhí)行哪些操作。進(jìn)入數(shù)據(jù)庫的用戶想對某一對象進(jìn)行操作,必須具有相應(yīng)的操作權(quán)限,具體包括:●對于表和視圖的權(quán)限:該權(quán)限用來控制用戶在表和視圖上執(zhí)行SELECT、INSERT、UPDATE和DELETE語句的能力?!駥τ诒砗鸵晥D的列的權(quán)限:該權(quán)限用來控制用戶在單個字段上執(zhí)行SELECT、UPDATE和REFERENCES操作的能力?!駥τ诖鎯^程的權(quán)限:該權(quán)限用來控制用戶執(zhí)行EXECUTE語句的能力。2.語句權(quán)限語句權(quán)限表示數(shù)據(jù)庫用戶對數(shù)據(jù)庫的操作權(quán)限,即創(chuàng)建數(shù)據(jù)庫或者創(chuàng)建數(shù)據(jù)庫中其他內(nèi)容所需要的權(quán)限類型。這些語句通常是一些具有管理性的操作,如創(chuàng)建數(shù)據(jù)庫、表和存儲過程等。這種語句雖然仍包含有操作的對象,但這些對象在執(zhí)行該語句之前并不存在于數(shù)據(jù)庫中。因此,語句權(quán)限針對的是某個SQL語句,而不是數(shù)據(jù)庫中已經(jīng)創(chuàng)建的特定的數(shù)據(jù)庫對象。只有sysadmin、db_owner和db_securityadmin角色的成員才能授予語句權(quán)限。可用于語句權(quán)限的Transact-SQL語句及其含義如下:●?Createdatabase:用于創(chuàng)建數(shù)據(jù)庫。●?Createtable:用于創(chuàng)建表?!?Createview:用于創(chuàng)建視圖?!?Createrule:用于創(chuàng)建規(guī)則?!?Createdefault:用于創(chuàng)建默認(rèn)?!?Createprocedure:用于創(chuàng)建存儲過程。●?Createindex:用于創(chuàng)建索引?!?Backupdatabase:用于備份數(shù)據(jù)庫?!?Backuplog:用于備份事務(wù)日志。
3.預(yù)定義權(quán)限預(yù)定義權(quán)限是指系統(tǒng)安裝以后有些用戶和角色不必授權(quán)就有的權(quán)限。其中,角色包括固定服務(wù)器角色和固定數(shù)據(jù)庫角色;用戶包括數(shù)據(jù)庫對象所有者。只有固定角色或者數(shù)據(jù)庫對象所有者的成員才可以執(zhí)行某些操作。執(zhí)行這些操作的權(quán)限就稱為預(yù)定義權(quán)限。
注意:預(yù)定義權(quán)限不能明確地賦予和撤消。10.3.2使用企業(yè)管理器設(shè)置權(quán)限權(quán)限的設(shè)置包括對權(quán)限的授權(quán)(grant)、拒絕(deny)和撤消(revoke)。在SQLServer中,可以使用SQLServer企業(yè)管理器來設(shè)置權(quán)限,但對于語句權(quán)限和對象權(quán)限使用的方法是不同的。
1.使用企業(yè)管理器設(shè)置語句權(quán)限使用企業(yè)管理器管理語句權(quán)限的步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。
(2)展開“數(shù)據(jù)庫”,右擊指定的服務(wù)器,在彈出的快捷菜單中選擇“屬性”選項,將彈出數(shù)據(jù)庫屬性對話框,如圖10-15所示。圖10-15數(shù)據(jù)庫屬性對話框(3)單擊“權(quán)限”選項卡,打開如圖10-16所示的“權(quán)限”選項卡。
(4)在如圖10-17所示的“權(quán)限”選項卡中列出了該數(shù)據(jù)庫中所有的用戶和角色,以及所有的語句權(quán)限??梢詥螕簟坝脩?角色”與權(quán)限交叉點(diǎn)上的方框改變權(quán)限的狀態(tài)。其中,“√”表示用戶被授予權(quán)限(簡稱授權(quán));“×”表示用戶被禁止權(quán)限(簡稱禁止);“□表示沒有給該用戶授予權(quán)限或授予(或禁止)后又被收回(簡稱撤消)。圖10-17表示用戶xjsb6031\stu被授予了創(chuàng)建表的權(quán)限,同時被禁止了創(chuàng)建視圖的權(quán)限。
(5)設(shè)置完成后,單擊“確定”按鈕,使設(shè)置生效并返回企業(yè)管理器。圖10-16數(shù)據(jù)庫屬性中的“權(quán)限”選項卡圖10-17修改用戶/角色的權(quán)限2.使用企業(yè)管理器設(shè)置對象權(quán)限管理對象權(quán)限有以下兩種方式:●從用戶/角色的角度來管理,即設(shè)置一個用戶/角色能對哪些對象執(zhí)行哪些操作?!駨膶ο蟮慕嵌葋砉芾?,即設(shè)置一個數(shù)據(jù)庫對象能被哪些用戶/角色執(zhí)行哪些操作。例如,要為stu賦予查詢學(xué)生表的權(quán)限,可以按以下步驟進(jìn)行:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。
(2)展開“數(shù)據(jù)庫”,再展開指定的college數(shù)據(jù)庫,選擇“用戶”,在右窗格的用戶列表中雙擊stu用戶,打開“數(shù)據(jù)庫用戶屬性”對話框,如圖10-18所示。圖10-18“數(shù)據(jù)庫用戶屬性”對話框(3)單擊“權(quán)限”按鈕,打開“權(quán)限”選項卡,給stu用戶授予對學(xué)生表執(zhí)行SELECT的權(quán)限,如圖10-19所示。
(4)若單擊圖10-19中的“列”按鈕,則可以指定對列操作的權(quán)限,如圖10-20所示。
(5)設(shè)置完成后單擊“確定”按鈕。上述過程是先選中用戶,再對該用戶對應(yīng)的所有對象設(shè)置權(quán)限;也可以從某一對象(比如學(xué)生表)出發(fā),設(shè)置所有用戶對該對象的權(quán)限。下面從對象的角度來完成相同的工作,即針對學(xué)生表,設(shè)置用戶stu擁有的查詢該表的權(quán)限。具體的設(shè)置步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。圖10-19“權(quán)限”選項卡圖10-20設(shè)置列操作的權(quán)限(2)展開“數(shù)據(jù)庫”,再展開指定的college數(shù)據(jù)庫,選擇“表”,在右邊窗口的表用戶列表中雙擊學(xué)生表,打開“表屬性”對話框,如圖10-21所示。
(3)單擊對話框中的“權(quán)限”按鈕,打開“權(quán)限”選項卡,其中列出了該數(shù)據(jù)庫中所有的用戶和角色,以及所有的語句權(quán)限。給stu用戶授予對學(xué)生表執(zhí)行UPDATE的權(quán)限,如圖10-22所示。
(4)若單擊“列”按鈕,則可以指定對列操作的權(quán)限。
(5)設(shè)置完成后單擊“確定”按鈕。在圖10-22中,college數(shù)據(jù)庫只有一個用戶。如果有很多用戶,則會同時排列出來,可同時授權(quán)。圖10-21“表屬性”對話框圖10-22指定權(quán)限對話框3.驗(yàn)證用戶權(quán)限
【例10-12】使用stu用戶登錄,查詢和修改“學(xué)生表”,驗(yàn)證stu的SELECT和UPDATE權(quán)限,如圖10-23所示。程序清單如下:
select*from學(xué)生表where學(xué)號='05209001'update學(xué)生表set電話='66666666'where學(xué)號='05209001'select*from學(xué)生表where學(xué)號='05209001'圖10-23驗(yàn)證stu的權(quán)限10.3.3使用Transact-SQL語句設(shè)置權(quán)限
Transact-SQL語句中有GRANT、DENY、REVOKE三種命令可以設(shè)置權(quán)限。
(1)GRANT命令:用于把權(quán)限授予某一用戶,以允許該用戶執(zhí)行針對該對象的操作或允許其運(yùn)行某些語句。
(2)DENY命令:用來禁止用戶對某一對象或語句的權(quán)限,它不允許該用戶執(zhí)行針對數(shù)據(jù)庫對象的某些操作或不允許其運(yùn)行某些語句。
(3)?REVOKE命令:用來撤消用戶對某一對象或語句的權(quán)限,使其不能執(zhí)行操作。(如果該用戶是角色成員,且角色被授權(quán),則另當(dāng)別論,這種情況將在10.5.3節(jié)中討論。)
用上述命令管理對象權(quán)限的語法如下:
GRANT|DENY|REVOKEa11|權(quán)限名ON表名|其他對象名TO用戶|角色角色可以理解為用戶組。
【例10-13】將數(shù)據(jù)庫college中名為“學(xué)生表”的SELECT權(quán)限賦予stu用戶。程序清單如下:
USEcollegeGRANTSELECTON學(xué)生表TOstu
數(shù)據(jù)庫用戶stu因此擁有了對學(xué)生表讀的權(quán)限。如果要一次授予增、刪、改、讀多種權(quán)限,則可在GRANT后面寫上INSERT、DELETE、UPDATE、SELECT中的任意幾個,用“,”分開即可。
【例10-14】下面是對象權(quán)限的示例,本例將禁止stu對學(xué)生表的SELECT權(quán)限。程序清單如下:
USEcollegeDENYSELECTON學(xué)生表TOstu
在數(shù)據(jù)庫管理員執(zhí)行了上述語句后,如果用戶stu再次對學(xué)生表執(zhí)行SELECT語句,則系統(tǒng)將提示沒有權(quán)限,操作遭到拒絕,如圖10-24所示。
【例10-15】授予用戶stu在college數(shù)據(jù)庫中創(chuàng)建表的語句權(quán)限。程序清單如下:
USEcollegeGRANTCREATETABLETOstu
運(yùn)行上述語句后,可以得到如圖10-17所示的“√”,也就是用戶stu獲得了創(chuàng)建表的權(quán)限。圖10-24出錯信息示例10.4服?務(wù)?器?角?色角色是從SQLServer7.0開始引進(jìn)的新概念,它代替了以前版本中組的概念。利用角色,SQLServer管理者可以將某一組用戶設(shè)置為某一角色,這樣只要對角色進(jìn)行權(quán)限設(shè)置便可以實(shí)現(xiàn)對所有用戶權(quán)限的設(shè)置,大大減少了數(shù)據(jù)庫管理員的工作量。SQLServer提供了通常管理工作的預(yù)定義服務(wù)器角色和數(shù)據(jù)庫角色。用戶還可以創(chuàng)建自己的數(shù)據(jù)庫角色,以表示某一類用戶可以進(jìn)行同樣的操作。當(dāng)用戶需要執(zhí)行不同的操作時,只需將該用戶加入到不同的角色中即可,從而避免了對每個類似的用戶反復(fù)進(jìn)行同樣的授權(quán)許可。
服務(wù)器角色是指根據(jù)SQLServer的管理任務(wù)以及這些任務(wù)相對的重要性等級,把具有SQLServer管理職能的用戶劃分為不同的用戶組,每一組所具有的管理SQLServer的權(quán)限都是SQLServer內(nèi)置的,不能增加或減少服務(wù)器角色,也不能修改服務(wù)器角色的權(quán)限,只能向其中加入用戶或者其他角色。要加入服務(wù)器角色,必須要有登錄帳戶。10.4.1固定的服務(wù)器角色
SQLServer提供的固定服務(wù)器角色如下:●系統(tǒng)管理員(sysadmin):擁有SQLServer所有的權(quán)限許可?!穹?wù)器管理員(serveradmin):管理SQLServer服務(wù)器端的設(shè)置?!翊疟P管理員(diskadmin):管理磁盤文件?!襁M(jìn)程管理員(processadmin):管理SQLServer系統(tǒng)進(jìn)程?!癜踩芾韱T(securityadmin):管理和審核SQLServer系統(tǒng)登錄?!癜惭b管理員(setupadmin):增加、刪除聯(lián)接服務(wù)器,建立數(shù)據(jù)庫復(fù)制以及管理擴(kuò)展存儲過程?!駭?shù)據(jù)庫創(chuàng)建者(dbcreator):創(chuàng)建數(shù)據(jù)庫并對數(shù)據(jù)庫進(jìn)行修改?!翊笕萘坎迦氩僮鞴芾碚?bulkadmin):可以執(zhí)行大容量插入操作。在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器,選擇“安全性”→“服務(wù)器角色”,在右側(cè)窗格中將顯示所有的服務(wù)器角色及其描述,如圖10-25所示。圖10-25在企業(yè)管理器中顯示服務(wù)器角色及其描述10.4.2固定服務(wù)器角色的應(yīng)用如果將一個登錄帳戶加入到一個服務(wù)器角色中,作為該角色的一個成員,則可以使該登錄帳戶自動擁有該服務(wù)器角色預(yù)定義的權(quán)限。一個登錄帳戶可以同時屬于多個角色,也可以不屬于任何角色。默認(rèn)情況下,只有sysadmin服務(wù)器角色含有預(yù)定成員,包括WindowsNT/2000系統(tǒng)管理員組帳戶(BUILTIN/Administrators)、系統(tǒng)管理員帳戶(計算機(jī)名稱/Administrator)、SQLServer帳戶sa??梢允褂闷髽I(yè)管理器或Transact-SQL語句更改服務(wù)器角色成員。1.使用企業(yè)管理器更改服務(wù)器角色成員使用企業(yè)管理器更改服務(wù)器角色成員的步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。
(2)選擇“安全性”→“服務(wù)器角色”,雙擊右窗格服務(wù)器角色列表中要更改的服務(wù)器角色,將彈出“服務(wù)器角色屬性”對話框,其中顯示出當(dāng)前服務(wù)器角色成員列表,如圖10-26所示。
(3)選中一個服務(wù)器角色成員并單擊“刪除”按鈕,即可從服務(wù)器角色成員列表中刪除該服務(wù)器角色成員。圖10-26“服務(wù)器角色屬性”對話框(4)單擊“添加”按鈕,將彈出“添加成員”對話框,如圖10-27所示。選擇待添加成員并單擊“確定”按鈕,可以將選中的一個或多個登錄帳戶添加到服務(wù)器角色成員列表中。
(5)單擊“服務(wù)器角色屬性”對話框的“權(quán)限”選項卡,可以查看該服務(wù)器角色所擁有的權(quán)限列表,如圖10-28所示。
(6)單擊“確定”按鈕,確認(rèn)修改。圖10-27“添加成員”對話框圖10-28“服務(wù)器角色屬性”對話框的“權(quán)限”選項卡
在企業(yè)管理器中,也可以在“登錄帳戶屬性”對話框中改變該帳戶所屬的服務(wù)器成員角色,操作步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。
(2)選擇“安全性”→“登錄”,雙擊右窗格登錄帳戶列表中要更改服務(wù)器角色成員的登錄帳戶,將彈出“SQLServer登錄屬性”對話框。
(3)選擇“SQLServer登錄屬性”對話框的“服務(wù)器角色”選項卡,如圖10-29所示。
(4)從“服務(wù)器角色”列表中選中或取消選中,即可將該登錄帳戶加入服務(wù)器角色或從服務(wù)器角色中刪除。圖10-30所示為將“xjsb6031\stu”登錄帳戶加入SystemAdministrators角色。
(5)單擊“確定”按鈕,確認(rèn)修改。圖10-29“服務(wù)器角色”選項卡圖10-30將“xjsb6031\stu”登錄帳戶加入SystemAdministrators角色2.使用Transact-SQL語句更改服務(wù)器角色成員使用系統(tǒng)存儲過程sp_addsrvrolemember、sp_dropsrvrolemeber可以添加和刪除服務(wù)器角色成員。
【例10-16】將WindowsNT/2000帳戶“xjsb6031\teacher”添加到sysadmin服務(wù)器角色中。程序清單如下:
EXECsp_addsrvrolemember'xjsb6031\teacher','sysadmin'
返回信息:'xjsb6031\teacher'已添加到角色'sysadmin'中。說明服務(wù)器角色成員添加成功。
注意:如果還沒有對該登錄帳戶授予SQLServer訪問權(quán)限,那么將自動對其授予訪問權(quán)限。【例10-17】將WindowsNT/2000帳戶“xjsb6031\teacher”從sysadmin服務(wù)器角色中刪除。程序清單如下:
EXECsp_dropsrvrolemember'xjsb6031\teacher','sysadmin'
返回信息:'xjsb6031\teacher'已從角色'sysadmin'中除去。說明服務(wù)器角色成員刪除成功。此外,還有以下幾個和服務(wù)器角色管理相關(guān)的系統(tǒng)過程。●?sp_helpsrvrole:返回服務(wù)器角色列表?!?sp_helpsrvrolemember:返回指定服務(wù)器角色的信息。若不提供參數(shù),則返回所有的服務(wù)器角色信息。●?sp_srvrolepermission:返回一個服務(wù)器角色的權(quán)限。10.5數(shù)?據(jù)?庫?角?色在前面的章節(jié)中,我們介紹了為數(shù)據(jù)庫用戶授權(quán)。如果有很多用戶對很多表有相同的權(quán)限(比如,某單位的銷售部門有50個人,部門數(shù)據(jù)庫有60個表或視圖),那么設(shè)置工作量會很大,而且檢查工作量也很大,因此我們要考慮能否找到一種捷徑,設(shè)置一個用戶組,授予相應(yīng)的權(quán)限,把用戶添加到用戶組中,這樣每個用戶既擁有了相同的數(shù)據(jù)庫權(quán)限,而且設(shè)置和檢查都很簡單。數(shù)據(jù)庫角色就是這樣一種用戶組。比如,在生活中,有一個高爾夫球場只對俱樂部會員開放(會員具有相同的許可),如果你參加了這個俱樂部,那么就可以進(jìn)入該球場。另外,還有一個游泳館,只對游泳俱樂部會員開放,你也可以參加游泳俱樂部,獲得準(zhǔn)許進(jìn)入那個游泳館。一個人可以同時參加多個俱樂部,獲得多項娛樂準(zhǔn)許。不同的數(shù)據(jù)庫角色就像不同的俱樂部,有不同的許可;一個用戶就像一個娛樂愛好者,可以經(jīng)批準(zhǔn)成為不同角色的成員。10.5.1數(shù)據(jù)庫角色的分類
SQLServer提供了兩種類型的數(shù)據(jù)庫角色,即固定的數(shù)據(jù)庫角色和用戶自定義的數(shù)據(jù)庫角色。用戶自定義的數(shù)據(jù)庫角色就是把一組用戶共有的權(quán)限設(shè)置給一個對象,然后定義一組用戶成為角色的成員,這些用戶就具有了數(shù)據(jù)庫用戶所有的權(quán)限。
用戶自定義的數(shù)據(jù)庫角色有兩種類型,即標(biāo)準(zhǔn)角色和應(yīng)用程序角色。標(biāo)準(zhǔn)角色通過對用戶權(quán)限等級的認(rèn)定將用戶劃分為不同的用戶組,使用戶總是相對于一個或多個角色,從而實(shí)現(xiàn)管理的安全性。所有固定的數(shù)據(jù)庫角色或SQLServer管理者自定義的某一角色都是標(biāo)準(zhǔn)角色。應(yīng)用程序角色是一種比較特殊的角色。當(dāng)我們打算讓某些用戶只能通過特定的應(yīng)用程序間接地存取數(shù)據(jù)庫中的數(shù)據(jù),而不是直接存取數(shù)據(jù)庫數(shù)據(jù)時,就應(yīng)該考慮使用應(yīng)用程序角色。當(dāng)某一用戶使用了應(yīng)用程序角色時,就放棄了本身所有的數(shù)據(jù)庫權(quán)限,擁有的只是應(yīng)用程序角色被設(shè)置的角色。通過應(yīng)用程序角色能夠以可控的方式限定用戶的語句或者對象權(quán)限。
標(biāo)準(zhǔn)角色是指通過把用戶加入到不同的角色中而使用戶具有這樣或那樣的語句權(quán)限或?qū)ο髾?quán)限,獲得的是數(shù)據(jù)庫用戶和各角色權(quán)限的總和。應(yīng)用程序角色首先將各種需要的權(quán)限賦予應(yīng)用程序角色,然后將應(yīng)用程序角色加入到某一特定的應(yīng)用程序中,通過激活應(yīng)用程序角色實(shí)現(xiàn)對應(yīng)用程序存取數(shù)據(jù)的可控性。只有應(yīng)用程序角色被激活,角色才有效。用戶可以且只可以執(zhí)行應(yīng)用程序角色相應(yīng)的權(quán)限,而不管用戶在激活程序角色以前有多少權(quán)限。10.5.2固定的數(shù)據(jù)庫角色固定的數(shù)據(jù)庫角色是在每個數(shù)據(jù)庫中都存在的預(yù)定義組,SQLServer已經(jīng)預(yù)先定義了這些角色所具有的管理、訪問數(shù)據(jù)庫的權(quán)限,而且SQLServer管理者不能對其所具有的權(quán)限進(jìn)行任何修改。在數(shù)據(jù)庫中使用固定的數(shù)據(jù)庫角色可以將不同級別的數(shù)據(jù)庫管理工作分給不同的角色,從而有效地實(shí)現(xiàn)工作權(quán)限的傳遞。
SQLSenrer提供了10種常用的固定數(shù)據(jù)庫角色,這些固定數(shù)據(jù)庫角色信息存儲在系統(tǒng)表sysusers中。這些固定的數(shù)據(jù)庫角色的具體含義如下:●?public:維護(hù)全部默認(rèn)權(quán)限。●?db_owner:數(shù)據(jù)庫的所有者,可以對所擁有的數(shù)據(jù)庫執(zhí)行任何操作。●?db_accessadmin:可以增加或者刪除數(shù)據(jù)庫用戶、工作組和角色?!?db_ddladmin:可以增加、刪除和修改數(shù)據(jù)庫中的任何對象。●?db_securityadmin:管理角色、角色成員、管理對象和語句權(quán)限。●?db_backupoperator:可以備份和恢復(fù)數(shù)據(jù)庫。●?db_datareader:能且僅能對數(shù)據(jù)庫中的任何表執(zhí)行SELECT操作,從而讀取所有表的信息?!?db_datawriter:能夠增加、修改和刪除表中的數(shù)據(jù),但不能進(jìn)行SELECT操作。●?db_denydatareader:不能讀取數(shù)據(jù)庫中任何表中的數(shù)據(jù)。●?db_denydatawriter:不能對數(shù)據(jù)庫中的任何表執(zhí)行增加、修改和刪除操作。在固定的數(shù)據(jù)庫角色中,public是一個特殊的數(shù)據(jù)庫角色,數(shù)據(jù)庫中的每個用戶都是public角色中的成員。不能將用戶、組或者其他角色指定給pubic角色,在每一個數(shù)據(jù)庫中都包含public角色,但不能刪除。一個人可以不參加任何團(tuán)體,但仍然屬于“大眾”這個團(tuán)體。public角色就是指“大眾”,如果一個數(shù)據(jù)庫要給每個用戶某種權(quán)限,那么就應(yīng)為public角色設(shè)置這種權(quán)限。
在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器,展開“數(shù)據(jù)庫”,再展開指定數(shù)據(jù)庫,選擇“角色”,在右窗格中列出數(shù)據(jù)庫中已存在的角色。在未創(chuàng)建新角色之前,數(shù)據(jù)庫中只有固定數(shù)據(jù)庫角色,如圖10-31所示。圖10-31在企業(yè)管理器中列出數(shù)據(jù)庫中已存在的角色10.5.3數(shù)據(jù)庫標(biāo)準(zhǔn)角色在SQLServer中,可以利用企業(yè)管理器和系統(tǒng)存儲過程兩種方式創(chuàng)建數(shù)據(jù)庫標(biāo)準(zhǔn)角色。
1.使用企業(yè)管理器創(chuàng)建數(shù)據(jù)庫標(biāo)準(zhǔn)角色使用企業(yè)管理器創(chuàng)建數(shù)據(jù)庫標(biāo)準(zhǔn)角色的步驟如下:
(1)在企業(yè)管理器中,展開SQLServer服務(wù)器組中相應(yīng)的服務(wù)器。
(2)展開“數(shù)據(jù)庫”,再展開指定數(shù)據(jù)庫,右擊“角色”,在彈出的快捷菜單中選擇“新建數(shù)據(jù)庫角色”選項,將彈出“數(shù)據(jù)庫角色屬性”對話框,如圖10-32所示。
(3)在“名稱”欄中輸入自定義角色的名稱,選中“標(biāo)準(zhǔn)角色”單選按鈕。圖10-32“數(shù)據(jù)庫角色屬性”對話框(4)單擊“添加”按鈕,在彈出的“添加角色成員”對話框中選中要添加的成員,如圖10-33所示。單擊“確定”按鈕,回到“數(shù)據(jù)庫角色屬性”對話框。
(5)如圖10-34所示,已將登錄帳戶stu2添加到數(shù)據(jù)庫角色成員列表中。
(6)在圖10-34所示的“數(shù)據(jù)庫角色屬性”對話框中,單擊“刪除”按鈕也可以刪除選中的角色成員。圖10-33“添加角色成員”對話框圖10-34將登錄帳戶stu2添加到數(shù)據(jù)庫角色成員列表中2.使用Transact-SQL語句創(chuàng)建數(shù)據(jù)庫標(biāo)準(zhǔn)角色使用Transact-SQL語句創(chuàng)建數(shù)據(jù)庫標(biāo)準(zhǔn)角色通常需要用到以下系統(tǒng)存儲過程?!?sp_addrole:創(chuàng)建數(shù)據(jù)庫角色?!?sp_addrolemember:向數(shù)據(jù)庫角色添加成員。
【例11-18】為college數(shù)據(jù)庫創(chuàng)建一個名為dbAdmin的數(shù)據(jù)庫角色。程序清單如下:
USEcollegeEXECsp_addrole'dbAdmin'
【例10-19】將SQLServer用戶stu3添加到college數(shù)據(jù)庫的dbAdmin角色中。程序清單如下:
USEcollegeEXECsp_addrolemember'dbAdmin','stu3'3.在企業(yè)管理器中刪除數(shù)據(jù)庫標(biāo)準(zhǔn)角色在企業(yè)管理器中,右擊待刪除角色,從彈出的快捷菜單中選擇“刪除”選項,并在隨后彈出的確認(rèn)對話框中選擇“是”,就可以刪除一個用戶自定義角色。注意:首先,系統(tǒng)固定的數(shù)據(jù)庫角色不能被刪除;其次,不能刪除一個有成員的角色,即必須首先刪除該角色的成員,否則系統(tǒng)將提示應(yīng)先刪除其成員,如圖10-35所示。圖10-35刪除角色前應(yīng)先刪除其成員4.使用Transact-SQL語句刪除數(shù)據(jù)庫標(biāo)準(zhǔn)角色使用Transact-SQL語句刪除數(shù)據(jù)庫標(biāo)準(zhǔn)角色所用到的系統(tǒng)存儲過程如下:●?sp_droprole:刪除數(shù)據(jù)庫角色。●?sp_droprolemember:從數(shù)據(jù)庫角色中刪除成員。
【例10-20】將SQLServer用戶stu3從college數(shù)據(jù)庫的dbAdmin角色中刪除。程序清單如下:
USEcollegeEXECsp_droprolemember'dbAdmin','stu3'10.5.4應(yīng)用程序角色標(biāo)準(zhǔn)用戶能夠登錄聯(lián)接到SQLServer,并能運(yùn)行賦予權(quán)限范圍內(nèi)的語句。有些情況下,人們只希望用戶在某應(yīng)用程序中具有相關(guān)權(quán)限,而不希望他們使用查詢分析器或任何其他工具訪問SQLServer。在這種情況下,就可以使用應(yīng)用程序角色。應(yīng)用程序角色需要激活才能使用,一般的使用方法是:由另一標(biāo)準(zhǔn)用戶激活應(yīng)用程序角色,這樣應(yīng)用程序角色就可以獲得其相應(yīng)的權(quán)限了。標(biāo)準(zhǔn)角色和應(yīng)用程序角色間的主要差別如下:
(1)應(yīng)用程序角色不能包含成員。
(2)應(yīng)用程序角色默認(rèn)設(shè)置為未激活狀態(tài),要由其他標(biāo)準(zhǔn)角色激活后才能使用。【例10-21】使用企業(yè)管理器在College數(shù)據(jù)庫中創(chuàng)建名為“AppRole01”、密碼為“ABC”的應(yīng)用程序角色。
(1)在控制臺中展開College數(shù)據(jù)庫。
(2)右擊“角色”,然后單擊“新建數(shù)據(jù)庫角色”命令。
(3)在“名稱”欄中輸入新的應(yīng)用程序角色的名稱,這里輸入“AppRole01”。
(4)在“數(shù)據(jù)庫角色類型”下單擊“應(yīng)用程序角色”,然后輸入密碼,這里輸入“ABC”。
(5)單擊“確定”按鈕完成本例。
【例10-22】使用系統(tǒng)存儲過程sp_addapprole在College數(shù)據(jù)庫中添加一名為“AppRole02”,密碼為“ABC”的應(yīng)用程序角色。在查詢分析器中運(yùn)行如下命令:
USECollegeGOEXECsp_addapprole'AppRole02','ABC‘
【例10-22】生成應(yīng)用程序角色并指定權(quán)限,演示應(yīng)用程序角色如何被激活。在查詢分析器中運(yùn)行如下命令:
(1)增加應(yīng)用程序角色。
USECollegeEXECSP_addapprole'AppRole03','ABC'(2)授權(quán)AppRole03具有班級表的SELECT權(quán)限。
GRANTSELECTON班級表TOAppRole03(3)創(chuàng)建登錄名為“stu5”、密碼為“ABC”、默認(rèn)數(shù)據(jù)庫為College并能聯(lián)接到College數(shù)據(jù)庫的用戶。
EXECSp_addlogin'stu5','ABC','College'USECollegeEXECsp_grantdbaccess'stu5','stu5'(4)以stu5身份聯(lián)接另一查詢分析器窗口。在查詢分析器主菜單上選擇“文件”,再選擇“聯(lián)接”命令,如圖10-36所示,選擇“SQLServer身份認(rèn)證”。登錄名輸入“stu5”,密碼輸入“ABC”,單擊“確定”按鈕完成聯(lián)接。圖10-36以stu5身份聯(lián)接另一查詢分析器窗口(5)在新的查詢分析器窗口中運(yùn)行如下命令:
SELECT*FROM班級表運(yùn)行結(jié)果如圖10-37所示,由于用戶stu5沒有執(zhí)行該語句的權(quán)限,因此執(zhí)行遭到拒絕(前面新建的stu5用戶)。
(6)激活應(yīng)用程序角色AppRole03,執(zhí)行后返回,如圖10-38所示。
EXECSP_SETAPPROLE'AppRole03','ABC’(7)重新執(zhí)行對班級表的SELECT操作,并與應(yīng)用程序角色激活前進(jìn)行對比。由于應(yīng)用程序角色AppRole03已激活,且有執(zhí)行該語句的權(quán)限,因此下列語句可正常執(zhí)行:
SELECT*FROM班級表與此同時,也證明了用戶stu5原先所具有的權(quán)限丟失。圖10-37執(zhí)行語句遭到拒絕圖10-38激活應(yīng)用程序角色AppRole0310.6權(quán)限管理10.6.1權(quán)限計算權(quán)限的設(shè)置是指對對象權(quán)限和語句權(quán)限的設(shè)置。權(quán)限可以由數(shù)據(jù)庫所有者和角色進(jìn)行管理。權(quán)限管理的內(nèi)容包括以下三個方面的內(nèi)容:●授予權(quán)限(有權(quán)):允許某個用戶或角色對一個對象執(zhí)行某種操作或某種語句。●禁止訪問(禁止):禁止某個用戶或角色訪問某個對象。即使該用戶或其加入的角色在其他途徑被授權(quán)訪問,或者由于繼承而獲得訪問權(quán),結(jié)果仍然被禁止執(zhí)行相應(yīng)的操作。多重權(quán)限中只要一個禁止,其他授權(quán)均無效?!癯废麢?quán)限(無權(quán)):即某個用戶或角色對一個對象沒有執(zhí)行某種操作或某種語句的許可,也沒有禁止。沒有許可就是無權(quán)訪問,如果其他途徑被授權(quán)訪問或繼承訪問權(quán),則可獲得訪問權(quán)。實(shí)際上,用戶權(quán)限是對該用戶授權(quán)和繼承角色權(quán)限的累加,有權(quán)+禁止=禁止,有權(quán)+無權(quán)=有權(quán),無權(quán)+禁止=禁止。如果使用應(yīng)用程序角色,則一旦激活,只有應(yīng)用程序角色的權(quán)限,原有權(quán)限全部作廢,不能累加。
10.6.2權(quán)限管理的應(yīng)用下面我們分步來計算權(quán)限。
(1)首先我們定義一個登錄帳戶STUD,并在College數(shù)據(jù)庫中定義具有同名的數(shù)據(jù)庫用戶。
分析:這時如果以STUD登錄,則有PUBLIC角色所具有的權(quán)限,因?yàn)槊恳粋€用戶都默認(rèn)是PUBLIC角色的成員。操作:
usemastergoEXECsp_addlogin'stud'USEcollege--選中college數(shù)據(jù)庫
EXECsp_grantdbaccess'stud','stud'
驗(yàn)證:運(yùn)行上列代碼
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒童情緒管理的中醫(yī)視角與實(shí)踐探索
- 2025年佳木斯貨運(yùn)從業(yè)資格證科目一考試答案
- 2025年江蘇貨運(yùn)從業(yè)資格考試模擬考試題庫及答案大全
- 企業(yè)安全文化的構(gòu)建與培訓(xùn)路徑
- 以實(shí)踐為導(dǎo)向的醫(yī)學(xué)類學(xué)科競賽與人才培養(yǎng)研究
- 2025年甘孜貨運(yùn)資格證模擬考試題
- 2025年恩施貨運(yùn)從業(yè)資格證試題及答案
- 2025年陜西貨運(yùn)從業(yè)資格證考試題目答案大全
- 從國際視野看中國家庭教育的未來發(fā)展
- 從創(chuàng)新到落地企業(yè)發(fā)展的成功路徑與實(shí)踐案例分享
- 藍(lán)色商務(wù)風(fēng)汽車行業(yè)商業(yè)計劃書模板
- DB21T 2748-2017 拉氏鱥池塘養(yǎng)殖技術(shù)規(guī)范
- 蘇州大學(xué)《高等數(shù)學(xué)一》2022-2023學(xué)年第一學(xué)期期末試卷
- 運(yùn)河鎮(zhèn)江段航道疏浚工程環(huán)評資料環(huán)境影響
- 2024年心理咨詢師考試題庫【典型題】
- 第一單元知識提綱(填空版) -2024-2025學(xué)年統(tǒng)編版道德與法治七年級 上冊
- 2024學(xué)年第一學(xué)期杭州市高三年級教學(xué)質(zhì)量檢測試題(杭州一模)含答案
- 生理學(xué)課件全套課件
- 2024年江西省公務(wù)員考試《行測》真題及答案解析
- 中藥藥劑學(xué)智慧樹知到答案2024年中國藥科大學(xué)
- 軍事理論-綜合版智慧樹知到期末考試答案章節(jié)答案2024年國防大學(xué)
評論
0/150
提交評論