版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、4. 授權(quán)在驗(yàn)證之后,該考慮驗(yàn)證過(guò)的登陸可以做些什么了。在這個(gè)領(lǐng)域,SQL Server 2008和SQL Server 2005比之前的版本更加靈活。現(xiàn)在的權(quán)限更加細(xì)粒度了,因此你可以授予所要求的專門的權(quán)限,而不是授權(quán)給具有一個(gè)固定角色的成員,這很可能會(huì)承載比它所需的權(quán)限更多的權(quán)限。你現(xiàn)在具有更多的要保護(hù)的實(shí)體,你可以對(duì)它們分配更細(xì)粒度的權(quán)限。除了加強(qiáng)用戶數(shù)據(jù)的保護(hù),關(guān)于一個(gè)細(xì)粒度的要保護(hù)的結(jié)構(gòu)信息和元數(shù)據(jù)現(xiàn)在只可用于具有權(quán)限訪問(wèn)這要保護(hù)的信息的主體。此完,還可以使用一個(gè)機(jī)制創(chuàng)建定制權(quán)限集合,這個(gè)機(jī)制允許一個(gè)人定義安全上下文,存儲(chǔ)過(guò)程可以運(yùn)行在這個(gè)上下文之下。此外,SQL Agent 使用靈
2、活的代理scheme 來(lái)允許工作步驟運(yùn)行和訪問(wèn)所要求的資源。所有這些特性使得SQL Server更加復(fù)雜但是更加安全。4.1 細(xì)粒度權(quán)限SQL Server 2008和SQL Server 2005在許多方面比之前的版本更加安全,其中之一就是改進(jìn)的細(xì)粒度權(quán)限。之前,一個(gè)管理員需要給一個(gè)在固定的服務(wù)器角色或固定的數(shù)據(jù)庫(kù)角色中的用戶成員授予權(quán)限,以執(zhí)行特定的操作,但是通常情況是,這些角色具有比執(zhí)行這些簡(jiǎn)單工作所需的權(quán)限多很多的權(quán)限。這個(gè)最小權(quán)限的原則要求一個(gè)用戶只有要做這個(gè)工作的最少的權(quán)限,所以分配給用戶廣泛的角色以執(zhí)行很少的工作違反了這個(gè)原則。固定服務(wù)器和數(shù)據(jù)庫(kù)角色的集合從SQL Server
3、2000以來(lái)沒(méi)有怎么改變,所以你仍然可以在用戶或應(yīng)用程序要求所有或大部分定義的權(quán)限時(shí)利用這些預(yù)定義的權(quán)限集??赡茏畲蟮母淖兙褪翘砑恿艘粋€(gè)public服務(wù)器角色。然而,最小權(quán)限的原則要求你不使用一個(gè)不是正好適用于這個(gè)原則做這個(gè)工作所需要的角色。盡管它要求更多的工作來(lái)發(fā)現(xiàn)和指派某原則所需的權(quán)限,但是它可以生成一個(gè)更加安全的數(shù)據(jù)庫(kù)環(huán)境。4.2 主體和可得到的在SQL Server 2008中,一個(gè)主體是任何單獨(dú)的、可以要求訪問(wèn)受保護(hù)的資源并可被授予權(quán)限來(lái)訪問(wèn)它的個(gè)體、組或過(guò)程。在SQL Server的之前版本中,你可以定義一個(gè)Windows中的主體或者你將它基于一個(gè)SQL Server登陸而不和Wi
4、ndows主體關(guān)聯(lián)。下面的列表顯示了SQL Server 2008主體的層次,不包括固定服務(wù)器和數(shù)據(jù)庫(kù)角色,以及你可以怎樣匹配登陸和數(shù)據(jù)庫(kù)用戶來(lái)保護(hù)對(duì)象。這個(gè)主體的影響范圍取決于它的定義的范圍,因此一個(gè)Windows級(jí)別的主體比一個(gè)SQL Server級(jí)別的主體范圍更廣。每一個(gè)數(shù)據(jù)庫(kù)用戶會(huì)自動(dòng)地屬于固定的公共(public)角色。Windows級(jí)別主體· Windows域登陸· Windows本地登陸· Windows組SQL Server級(jí)別主體· SQL Server登陸· 與一個(gè)Windows 登陸相匹配的SQL Server登陸
5、3; 與一個(gè)證書(shū)相匹配的SQL Server登陸· 與一個(gè)非對(duì)稱密鑰相匹配的SQL Server登陸數(shù)據(jù)庫(kù)級(jí)別的主體· 數(shù)據(jù)庫(kù)用戶· 與一個(gè)SQL Server登陸相匹配的數(shù)據(jù)庫(kù)用戶· 與一個(gè)Windows 登陸相匹配的數(shù)據(jù)庫(kù)用戶· 與一個(gè)證書(shū)相匹配的數(shù)據(jù)庫(kù)用戶· 與一個(gè)非對(duì)稱密鑰相匹配的數(shù)據(jù)庫(kù)用戶· 數(shù)據(jù)庫(kù)角色· 應(yīng)用程序角色· 公共角色授權(quán)的另一個(gè)部分是你可以通過(guò)授予或拒絕授予權(quán)限來(lái)保護(hù)的對(duì)象。圖4列出了SQL Server 2008中可保護(hù)的對(duì)象的層次。在服務(wù)器級(jí)別,你可以保護(hù)網(wǎng)絡(luò)終端來(lái)控制通信路線
6、進(jìn)出服務(wù)器,還有數(shù)據(jù)庫(kù)、綁定和角色以及登陸。在數(shù)據(jù)庫(kù)和schema級(jí)別,事實(shí)上你可以創(chuàng)建的每一個(gè)對(duì)象都是可得到的,包括那些存在于schema之中的。圖 4在SQL Server 2008中的可得到的對(duì)象的層次4.3 角色和權(quán)限要想知道在SQL Server中可用的權(quán)限的數(shù)目,你可以調(diào)用fn_builtin_permissions系統(tǒng)功能:以下是引用片段:SELECT * FROM sys.fn_builtin_permissions(default)這些是SQL Server 2005中的新的權(quán)限類型:· CONTROL。 授予所有者想要的權(quán)限,這些權(quán)限可以有效地對(duì)這個(gè)對(duì)象授予所有定
7、義的權(quán)限,并且所有對(duì)象在它的范圍內(nèi),包括授予其它受權(quán)人任何權(quán)限的能力。CONTROL SERVER授予等價(jià)于sysadmin的權(quán)限。· ALTER。授予權(quán)限來(lái)修改可得到的對(duì)象的任何屬性,除了修改所屬關(guān)系。固定地授予權(quán)限給相同范圍內(nèi)的ALTER、CREATE或 DROP 可得到的對(duì)象。例如,授予一個(gè)數(shù)據(jù)庫(kù)上的ALTER權(quán)限,包括修改它的表。· ALTER ANY <可得到的對(duì)象>。 授予權(quán)限以修改可得到的指定類型的對(duì)象。例如,授予ALTER ANY ASSEMBLY允許修改數(shù)據(jù)庫(kù)中的任何.NET 集合,而在服務(wù)器級(jí)別授予ALTER ANY LOGIN 使得用戶修改
8、任何在服務(wù)器上的登陸。· IMPERSONATE ON <登陸或用戶>。 授予權(quán)限來(lái)模擬特定的用戶或登陸。你在本篇文章的后面可以看到,這個(gè)權(quán)限對(duì)于為存儲(chǔ)過(guò)程轉(zhuǎn)換執(zhí)行上下文是很必要的。你在一個(gè)批處理中進(jìn)行模擬也需要這個(gè)權(quán)限。· TAKE OWNERSHIP。 授予權(quán)限給受權(quán)人以使用可得到的所有權(quán),使用ALTER AUTHORIZATION語(yǔ)句。SQL Server 2008仍然使用類似的GRANT、DENY和REVOKE scheme來(lái)指派或拒絕給一個(gè)主體授予對(duì)一個(gè)可得到的對(duì)象的權(quán)限。現(xiàn)在ANT 語(yǔ)句涵蓋了所有新的權(quán)限選項(xiàng),例如授予的范圍和是否主體可以授予這個(gè)權(quán)限
9、給其它主體。SQL Server 不允許數(shù)據(jù)庫(kù)交叉權(quán)限。為了授予這樣的權(quán)限,你要在每一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)復(fù)制的用戶,并單獨(dú)的給每一個(gè)數(shù)據(jù)庫(kù)用戶指派這個(gè)權(quán)限。如同SQL Server 之前的版本一樣,激活一個(gè)應(yīng)用程序角色會(huì)在這個(gè)角色活動(dòng)的期限內(nèi)掛起其它的權(quán)限。然而,在SQL Server 2008和SQL Server 2005中,你具有卸載應(yīng)用程序角色的能力。SQL Server 2000和之后版本的另一個(gè)不同之處是,當(dāng)激活一個(gè)應(yīng)用程序角色時(shí),這個(gè)角色還會(huì)掛起任何服務(wù)器權(quán)限,包括public。例如,如果你授予VIEW ANY DEFINITION給public,應(yīng)用程序不會(huì)受益于它。這是當(dāng)在一
10、個(gè)應(yīng)用程序角色上下文中訪問(wèn)服務(wù)器級(jí)別的元數(shù)據(jù)時(shí)值得注意的。注意 這個(gè)新的首選的應(yīng)用程序角色選擇將使用代碼模塊中的執(zhí)行上下文。要獲得更多的信息,請(qǐng)查看本文中的執(zhí)行上下文一節(jié)。授予一個(gè)特殊的權(quán)限可以傳遞其它暗含的權(quán)限。例如在一個(gè)schema 上的ALTER 權(quán)限暗含了更細(xì)粒度和較低級(jí)別的權(quán)限。圖5顯示了ALTER SCHEMA暗含的權(quán)限。圖 5: ALTER SCHEMA 所暗含的權(quán)限層次當(dāng)你考慮可用的主體的數(shù)目和類型、服務(wù)器和一個(gè)典型的數(shù)據(jù)庫(kù)中的可得到的對(duì)象的數(shù)目、可用的權(quán)限和隱藏的以及暗含的權(quán)限的數(shù)目時(shí),“在SQL Server 2008中的細(xì)粒度權(quán)限是怎樣的”就立刻清楚了?,F(xiàn)在創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)
11、要求更細(xì)致地分析它的安全需求和謹(jǐn)慎地控制在所有對(duì)象上的權(quán)限。然而,這個(gè)分析是很值得的,在SQL Server 2008中使用這些功能會(huì)使得數(shù)據(jù)庫(kù)更安全。4.4 元數(shù)據(jù)安全細(xì)粒度權(quán)限scheme 的一個(gè)好處是SQL Server保護(hù)元數(shù)據(jù)和數(shù)據(jù)。在SQL Server 2005之前,一個(gè)用戶對(duì)數(shù)據(jù)庫(kù)的任何訪問(wèn)都會(huì)看到數(shù)據(jù)庫(kù)中的所有對(duì)象的元數(shù)據(jù),無(wú)論這個(gè)用戶是否可以訪問(wèn)其中的數(shù)據(jù)或執(zhí)行存儲(chǔ)過(guò)程。SQL Server 2008檢查主體在數(shù)據(jù)庫(kù)中具有的權(quán)限,并僅當(dāng)這個(gè)主體是所有人或他具有這個(gè)對(duì)象的一些權(quán)限時(shí)才可以顯示這個(gè)對(duì)象的元數(shù)據(jù)。還有一個(gè)VIEW DEFINITION 權(quán)限可以授予查看元數(shù)據(jù)信息的
12、權(quán)限,它甚至不需要這個(gè)對(duì)象的其它權(quán)限。這個(gè)保護(hù)擴(kuò)展到因用戶沒(méi)有權(quán)限所做的訪問(wèn)或更新對(duì)象的操作所返回的錯(cuò)誤信息。不只是承認(rèn)確實(shí)有一個(gè)表叫做Address ,還給攻擊者一個(gè)信息說(shuō)她被跟蹤了,SQL Server返回一個(gè)具有選擇可能性的錯(cuò)誤信息。例如,如果一個(gè)用戶沒(méi)有對(duì)數(shù)據(jù)庫(kù)中的任何對(duì)象的權(quán)限,他試圖刪除Address表,那么SQL Server 會(huì)顯示下面的錯(cuò)誤信息:以下是引用片段:Msg 3701, Level 14, State 20, Line 1 Cannot drop the table 'Address', because it does not exist or yo
13、u do not have permission.在這種方式下,攻擊者不能確定一個(gè)Address表是否真的存在。然而,調(diào)試這個(gè)問(wèn)題的人仍然只需要探究有限的可能性。4.5 SQL Server Agent代理在SQL Server 2008中的授權(quán)模型的一個(gè)最好的例子就是SQL Server Agent。你可以定義許多常常與Windows登陸關(guān)聯(lián)的憑證,鏈接到具有必要的權(quán)限的用戶以執(zhí)行一個(gè)或多個(gè)SQL Server Agent步驟。然后一個(gè)SQL Server Agent 代理會(huì)使用一個(gè)工作步驟鏈接這個(gè)憑證來(lái)提供必要的權(quán)限。這為下面的最小權(quán)限的主體提供了一個(gè)細(xì)粒度的方法:授予一個(gè)工作步驟所需的權(quán)
14、限,除此以外沒(méi)有其它權(quán)限。你可以創(chuàng)建任何數(shù)目的代理,將它們的每一個(gè)同一個(gè)或多個(gè)SQL Server Agent子系統(tǒng)關(guān)聯(lián)起來(lái)。這是對(duì)SQL Server 2000中的所有強(qiáng)大的代理帳戶的完全約束,它使得用戶可以在任何SQL Server Agent子系統(tǒng)中創(chuàng)建工作步驟。注意 當(dāng)你對(duì)一個(gè)SQL Server 2000服務(wù)器進(jìn)行升級(jí)的時(shí)候,會(huì)創(chuàng)建一個(gè)單獨(dú)的代理賬戶,所有的子系統(tǒng)會(huì)被分配到這個(gè)單獨(dú)的代理賬戶上以便現(xiàn)有的工作可以繼續(xù)運(yùn)行。在升級(jí)之后,創(chuàng)建憑證和代理賬戶來(lái)實(shí)現(xiàn)一組更加安全的、更細(xì)粒度的代理來(lái)保護(hù)服務(wù)器資源。圖6顯示了管理套件中的對(duì)象資源管理器和一列SQL Server Agent中可用的
15、子系統(tǒng)。每一個(gè)子系統(tǒng)可以有與它關(guān)聯(lián)的一個(gè)或多個(gè)代理,它們授予這個(gè)工作步驟所需的適當(dāng)?shù)臋?quán)限。這個(gè)scheme的一個(gè)例外是Transact-SQL子系統(tǒng)以模塊所有者的權(quán)限來(lái)執(zhí)行,這和在SQL Server 2000中是一樣的。圖 6: 你可以將之與代理相關(guān)聯(lián)的SQL Server Agent子系統(tǒng)在一個(gè)新安裝的SQL Server 之上,只有System Administrator 角色具有維護(hù)SQL Server Agent 工作的權(quán)限,管理套件資源管理器中的管理面板只對(duì)sysadmins開(kāi)放。SQL Server 2008具有一些其它的、你可以用來(lái)授予多級(jí)權(quán)限的角色。你可以將用戶分配到SQLA
16、gentUser、SQLAgentReaderRole或SQLAgentOperator 角色,其中的每一個(gè)授予逐漸增長(zhǎng)的權(quán)限級(jí)別來(lái)創(chuàng)建、管理和運(yùn)行工作,或是MaintenanceUser 角色,它具有SQLAgentUser的所有的權(quán)限和創(chuàng)建維護(hù)計(jì)劃的能力。sysadmin 角色的成員當(dāng)然可以在任何子系統(tǒng)中做任何他們想要做的。為了授權(quán)給任何其他的用戶以使用子系統(tǒng),要求至少創(chuàng)建一個(gè)代理帳戶,它可以授權(quán)給一個(gè)或多個(gè)子系統(tǒng)。圖7顯示一個(gè)代理帳戶MyProxy怎樣被分配到多個(gè)主體上,這里是一個(gè)用戶和一個(gè)角色。這個(gè)代理帳戶使用一個(gè)憑證,這個(gè)憑證將它鏈接到一個(gè)帳戶,通常是一個(gè)域帳戶,它要具有操作系統(tǒng)執(zhí)行
17、子系統(tǒng)所要求的所有任務(wù)所必需的權(quán)限。每一個(gè)代理可以有一個(gè)或多個(gè)相關(guān)聯(lián)的子系統(tǒng),這些子系統(tǒng)授予主體以運(yùn)行這些子系統(tǒng)的能力。圖 7:用于多個(gè)子系統(tǒng)的SQL Server Agent代理帳戶下面的代碼顯示了執(zhí)行圖7所示的scheme所必需的Transact-SQL代碼。它一開(kāi)始創(chuàng)建了一個(gè)憑證,一個(gè)提供了對(duì)具有執(zhí)行子系統(tǒng)中想要的活動(dòng)的權(quán)限的操作系統(tǒng)帳戶的鏈接的數(shù)據(jù)庫(kù)對(duì)象。然后它添加一個(gè)代理帳戶MyProxy,這只是一個(gè)用于憑證的友好名稱。然后,它將這個(gè)代理分派到兩個(gè)首要角色上,在這里是一個(gè)SQL Server登陸和一個(gè)定制角色。最后它將這個(gè)代理和四個(gè)SQL Server Agent子系統(tǒng)的每一個(gè)相關(guān)聯(lián)
18、。以下是引用片段:CREATE CREDENTIAL MyCredential WITH IDENTITY = 'MyDOMAINuser1'GOmsdb.sp_add_proxy proxy_name = 'MyProxy', credential_name = 'MyCredential'GOmsdb.sp_grant_login_to_proxy login_name = 'MyLogin', proxy_name = 'MyProxy
19、9;GOmsdb.sp_grant_login_to_proxy login_name = 'MyRole', proxy_name = 'MyProxy'GOsp_grant_proxy_to_subsystem proxy_name = 'MyProxy', subsystem_name = 'ActiveScripting'GOsp_grant_proxy_to_subsystem proxy_name = 'MyProxy',
20、160; subsystem_name = 'CmdExec'GOsp_grant_proxy_to_subsystem proxy_name = 'MyProxy', subsystem_name = 'ANALYSISQUERY'GOsp_grant_proxy_to_subsystem proxy_name = 'MyProxy', subsystem_name = 'DTS'GOSQL Server管理套件提
21、供了對(duì)創(chuàng)建憑證和代理的充分支持,如圖8所示。它創(chuàng)建了與之前的代碼相同的代理。圖 8:在SQL Server管理套件中的一個(gè)新的SQL Server Agent代理一個(gè)代理不是操作系統(tǒng)中圍繞安全的一個(gè)方式。如果和代理一起使用的憑證沒(méi)有在Windows中的權(quán)限,例如寫到網(wǎng)絡(luò)上的一個(gè)目錄中,那么代理也沒(méi)有這個(gè)權(quán)限。你還可以使用一個(gè)代理來(lái)授予有限的執(zhí)行權(quán)限給xp_cmdshell ,因?yàn)樗枪粽咚矏?ài)的一個(gè)工具,一旦他們危及一個(gè)SQL Server計(jì)算機(jī)他們就能擴(kuò)展他們?cè)诰W(wǎng)絡(luò)中的范圍。這個(gè)代理提供了這個(gè)保護(hù),因?yàn)榧词怪黧w具有在網(wǎng)絡(luò)上的無(wú)限的權(quán)限,例如域管理員,但是通過(guò)代理執(zhí)行的任何命令只具有憑證帳戶
22、所具有的有限的權(quán)限。4.6 執(zhí)行上下文SQL Server 很久以來(lái)就支持所有權(quán)鏈接作為一個(gè)確保管理員和應(yīng)用程序開(kāi)發(fā)人員對(duì)訪問(wèn)數(shù)據(jù)庫(kù)的入口檢查其權(quán)限而不是對(duì)所有訪問(wèn)的對(duì)象的權(quán)限進(jìn)行檢查的概念。只要調(diào)用模塊(存儲(chǔ)過(guò)程或函數(shù))或者視圖的用戶具有對(duì)這個(gè)模塊的執(zhí)行權(quán)限,或者具有對(duì)視圖的選擇權(quán)限,并且這個(gè)模塊或視圖的所有人是訪問(wèn)對(duì)象的所有人(一個(gè)所有權(quán)鏈),那么就不會(huì)檢查對(duì)基本對(duì)象具有的權(quán)限,而調(diào)用者會(huì)得到請(qǐng)求的數(shù)據(jù)。如果所有權(quán)鏈接由于代碼的所有者不擁有引用的對(duì)象的原因而被破壞了,那么SQL Server將對(duì)調(diào)用者的安全上下文檢查權(quán)限。如果調(diào)用者具有訪問(wèn)這個(gè)對(duì)象的權(quán)限,那么SQL Server 返回?cái)?shù)據(jù)
23、。如果她沒(méi)有,那么SQL Server 將報(bào)錯(cuò)。所有權(quán)鏈接有一些局限性;它只適用于數(shù)據(jù)操作而不適用于動(dòng)態(tài)SQL。進(jìn)一步的,如果你穿過(guò)所有權(quán)限定訪問(wèn)對(duì)象,所有權(quán)鏈接就不可用。因此,這個(gè)預(yù)先的權(quán)限檢查行為只能用于特定的情況。SQL Server 2008具有使用一個(gè)執(zhí)行上下文標(biāo)識(shí)模塊的能力,這樣在模塊中的語(yǔ)句就可以作為與調(diào)用用戶相反的特殊用戶來(lái)執(zhí)行。這個(gè)方式,當(dāng)調(diào)用用戶仍然需要權(quán)限來(lái)執(zhí)行模塊時(shí),SQL Server為模塊內(nèi)的語(yǔ)句對(duì)模塊的執(zhí)行上下文檢查權(quán)限。你可以使用這個(gè)行動(dòng)來(lái)克服所有權(quán)鏈接的一些缺點(diǎn),因?yàn)樗m用于模塊內(nèi)的所有語(yǔ)句。管理員如果想執(zhí)行預(yù)先的權(quán)限檢查的話可以使用執(zhí)行上下文來(lái)完成這個(gè)工作。
24、現(xiàn)在當(dāng)你定義用戶定義的功能(除了在線的值為表的情況),存儲(chǔ)過(guò)程和觸發(fā)器時(shí)你可以使用EXECUTE AS 條件來(lái)指定SQL Server 使用哪個(gè)用戶的權(quán)限來(lái)驗(yàn)證對(duì)由以下過(guò)程引用的對(duì)象和數(shù)據(jù)的訪問(wèn):以下是引用片段:CREATE PROCEDURE GetData(Table varchar(40) WITH EXECUTE AS 'User1'SQL Server 提供了四個(gè)EXECUTE AS選項(xiàng)。· EXECUTE AS CALLER 指定了在模塊的調(diào)用者的安全上下文中執(zhí)行的代碼;沒(méi)有發(fā)生身份模擬。調(diào)用者必須具有對(duì)所有引用的對(duì)象的訪問(wèn)權(quán)限。然而,SQL Server
25、 只檢查對(duì)所有權(quán)斷鏈的權(quán)限,所以如果這個(gè)代碼的所有者還擁有后臺(tái)的對(duì)象,那么只會(huì)檢查模塊的執(zhí)行權(quán)限。這是向后兼容性的默認(rèn)執(zhí)行上下文。· EXECUTE AS 'user_name' 指定了代碼執(zhí)行在指定用戶的安全上下文下。如果你不想依賴于所有權(quán)鏈那么這是一個(gè)很好的選擇。相反,你創(chuàng)建一個(gè)具有必要權(quán)限的用戶來(lái)允許這個(gè)代碼和創(chuàng)建定制的權(quán)限集合。· EXECUTE AS SELF 是一個(gè)縮寫符號(hào),用于指定要?jiǎng)?chuàng)建或修改這個(gè)模塊的用戶的安全上下文。SQL Server 在內(nèi)部保存和這個(gè)模塊相關(guān)聯(lián)的實(shí)際的用戶名稱,而不是“SELF”。· EXECUTE AS OW
26、NER 指定這個(gè)安全上下文是模塊執(zhí)行時(shí)的模塊當(dāng)前所有者的安全上下文。如果這個(gè)模塊沒(méi)有所有者,那么使用所包含的schema的所有者的上下文。當(dāng)你想能夠改變這個(gè)模塊的所有者而不改變模塊本身的時(shí)候這是一個(gè)很好的選擇。只要用戶上下文使用EXECUTE AS選項(xiàng)進(jìn)行變更,那么模塊的創(chuàng)建者或更改者必須具有對(duì)指定的用戶的IMPERSONATE權(quán)限。你不能從數(shù)據(jù)庫(kù)中刪除指定的用戶,除非你將所有模塊的執(zhí)行上下文更改為其它的用戶。4.7 用戶/schema分離SQL Server 2000沒(méi)有schema的概念,而在ANSI SQL-99規(guī)范中將schema定義為一個(gè)數(shù)據(jù)庫(kù)對(duì)象的集合,由形成了對(duì)象的一個(gè)單獨(dú)的命名
27、空間的一個(gè)單獨(dú)的主體所有。Schema是數(shù)據(jù)庫(kù)對(duì)象的一個(gè)容器,例如表、視圖、存儲(chǔ)過(guò)程、函數(shù)、類型和觸發(fā)器。它在.NET框架中更多的是作為一個(gè)命名空間函數(shù),而XML是一種組織對(duì)象的方式,以便數(shù)據(jù)庫(kù)可以重用對(duì)象名稱,例如允許dbo.Customer和Fred.Customer存在于一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)中,并將對(duì)象分類到不同的所有者下面。注意你將需要使用目錄視圖例如sys.database_sys.principals、sys.schemas, sys.objects等等。因?yàn)槔系膕ysobjects系統(tǒng)表不支持schemas,因此不能支持U/S分離。此外,老的目錄視圖是不被支持的,所以它們?cè)赟QL S
28、erver的未來(lái)版本中將被刪除。圖9的上面部分顯示了SQL Server 2000中schemas是怎樣工作的。當(dāng)一個(gè)管理員在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)用戶Alice 時(shí),SQL Server 會(huì)自動(dòng)地創(chuàng)建一個(gè)隱藏在用戶Alice之后的schema Alice。如果Alice 登陸到一個(gè)運(yùn)行SQL Server而他沒(méi)有所有權(quán)的服務(wù)器上創(chuàng)建Table1,那么表的實(shí)際名稱是Alice.Table1。Alice 創(chuàng)建的其它對(duì)象也是一樣,例如Alice.StoredProcedure1和Alice.View1。如果Alice 是一個(gè)數(shù)據(jù)庫(kù)所有人或者是sysadmin ,那么她創(chuàng)建的對(duì)象將是dbo schema的
29、一部分。盡管我們習(xí)慣說(shuō)dbo擁有對(duì)象,但是它其實(shí)是一回事。圖 9:在SQL Server 2000和2008中的用戶/schema/對(duì)象在SQL Server 2000 中當(dāng)你需要改變對(duì)象的所有權(quán)時(shí)就會(huì)遇到用戶和schemas的統(tǒng)一問(wèn)題,例如當(dāng)Alice離開(kāi)公司而Lucinda接替了Alice的工作。那么一個(gè)系統(tǒng)管理員需要將Alice所擁有的所有對(duì)象的所有權(quán)改變?yōu)長(zhǎng)ucinda的。一個(gè)更大的問(wèn)題是在Lucinda具有了表的所有權(quán)之后你需要將所有涉及到Alice.Table1的Transact-SQL或客戶端應(yīng)用程序代碼改變?yōu)長(zhǎng)ucinda.Table1。這取決于Alice所擁有的對(duì)象的數(shù)目和有
30、多少應(yīng)用程序中內(nèi)嵌了這個(gè)名字;這是一個(gè)很大的消耗。Microsoft很久以前就建議內(nèi)置的dbo用戶擁有所有的數(shù)據(jù)庫(kù)對(duì)象來(lái)解決這些問(wèn)題。更改一個(gè)數(shù)據(jù)庫(kù)所有權(quán)比更改許多對(duì)象和客戶端應(yīng)用程序要容易得多。注意 不要被SQL Server 2000的CREATE SCHEMA語(yǔ)句混淆。這只是一個(gè)創(chuàng)建特定用戶所擁有的表和視圖和授權(quán)的簡(jiǎn)便方法。你可以使用這個(gè)語(yǔ)句來(lái)命名一個(gè)schema的所有者但是不能命名這個(gè)schema。因?yàn)橐淖兯袡?quán)的問(wèn)題,SQL Server仍然不能將所有者鏈接到schema上。SQL Server 2008通過(guò)將用戶和schema分離開(kāi)來(lái)從而解決了這個(gè)問(wèn)題并實(shí)現(xiàn)了SQL-99 sch
31、ema,如圖9的下面部分所示。當(dāng)你使用新的CREATE USER DDL創(chuàng)建一個(gè)新的用戶Alice,SQL Server不再自動(dòng)地創(chuàng)建具有相同名稱的schema。相反地,你必須顯式創(chuàng)建一個(gè)schema并將它的所有權(quán)分配給一個(gè)用戶。因?yàn)轱@示的所有數(shù)據(jù)庫(kù)對(duì)象現(xiàn)在包含在Schema1 schema中,這是Alice一開(kāi)始擁有的,因此通過(guò)簡(jiǎn)單地更改schema的所有權(quán)給Lucinda來(lái)更改所有的schema對(duì)象的所有權(quán)就很簡(jiǎn)單了。每一個(gè)用戶還可以擁有一個(gè)分配給它的默認(rèn)的schema,因此SQL Server假定在默認(rèn)的schema中,所有對(duì)象按名稱引用而沒(méi)有按schema引用。在圖9的下面部分,如果A
32、lice將Schema1作為她的默認(rèn)schema,那么她可以將這個(gè)表作為Schema1.Table1或簡(jiǎn)單地作為Table1。用戶Carol可能沒(méi)有一個(gè)默認(rèn)的與她的用戶名關(guān)聯(lián)的schema,她需要將這個(gè)表作為Schema1.Table1。任何沒(méi)有定義默認(rèn)schema的用戶默認(rèn)的schema是dbo。在SQL Server 2008中完全標(biāo)準(zhǔn)的對(duì)象名稱具有一個(gè)四部分組成的結(jié)構(gòu),這與SQL Server之前版本中的類似:server.database.schema.object如同在之前版本中的一樣,如果對(duì)象是在代碼運(yùn)行的同一臺(tái)服務(wù)器上那么你可以省略服務(wù)器名稱。如果連接打開(kāi)了同一個(gè)數(shù)據(jù)庫(kù)那么你可以忽略數(shù)據(jù)庫(kù)名稱。而如果它是當(dāng)前用戶默認(rèn)的schema或者是dbo所擁有的,那么你可以忽略schema 名稱,因?yàn)槟鞘钱?dāng)SQL S
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度農(nóng)業(yè)科技企業(yè)股權(quán)分紅及轉(zhuǎn)讓協(xié)議3篇
- 2024音樂(lè)素材版權(quán)質(zhì)押合同:視頻素材制作融資
- 2025年度新能源汽車共享平臺(tái)車輛掛靠管理合同3篇
- 2025年度智慧城市基礎(chǔ)設(shè)施建設(shè)項(xiàng)目施工合同范本3篇
- 2025年度漁船租賃與漁業(yè)產(chǎn)業(yè)鏈整合服務(wù)合同3篇
- 2024鐵路員工勞動(dòng)協(xié)議樣本一
- 2025年中國(guó)汽輪機(jī)行業(yè)市場(chǎng)供需格局及投資規(guī)劃建議報(bào)告
- 2025年度個(gè)人汽車租賃合同綠色出行附加服務(wù)4篇
- 2025年度智能機(jī)器人研發(fā)與技術(shù)服務(wù)合作協(xié)議書(shū)4篇
- 2025年陜西西安人才市場(chǎng)有限公司招聘筆試參考題庫(kù)含答案解析
- 第1本書(shū)出體旅程journeys out of the body精教版2003版
- 臺(tái)資企業(yè)A股上市相關(guān)資料
- 電 梯 工 程 預(yù) 算 書(shū)
- 羅盤超高清圖
- 參會(huì)嘉賓簽到表
- 機(jī)械車間員工績(jī)效考核表
- 2.48低危胸痛患者后繼治療評(píng)估流程圖
- 人力資源管理之績(jī)效考核 一、什么是績(jī)效 所謂績(jī)效簡(jiǎn)單的講就是對(duì)
- 山東省醫(yī)院目錄
- 云南地方本科高校部分基礎(chǔ)研究
- 廢品管理流程圖
評(píng)論
0/150
提交評(píng)論