




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。SQLServer2008安全性概述面向數(shù)據(jù)庫管理員的SQLServer2008安全性概述SQLServer技術(shù)文章作者:DonKiely更新:GeoffAllix(內(nèi)容主管)技術(shù)審查:SethuKalavukar、SameerTejani、AlComeau、RobWalters和NirajNagrani出版日期:2007年10月適用產(chǎn)品:SQLServer2008摘要:SQLServer2008在設(shè)計、默認(rèn)和部署方面均提供了保護(hù)措施。Microsoft承諾在必要時將交換有關(guān)線程、對策和安全增強的信息,
2、以盡量保證數(shù)據(jù)安全。本文涉及SQLServer2008的一些最重要的安全特性。它將告訴管理員如何安全地安裝SQLServer,以及如何在應(yīng)用程序和用戶使用其中存儲的數(shù)據(jù)時,仍能保證其安全。版權(quán)這是一份預(yù)備文檔,在本文檔中所述軟件的最終商業(yè)版本發(fā)布之前,該文檔的內(nèi)容可能會發(fā)生重大變化。本文檔中提供的信息代表了MicrosoftCorporation當(dāng)前(軟件發(fā)布之前)對所討論問題持有的觀點。因為Microsoft必須響應(yīng)不斷變化的市場條件,所以其當(dāng)前的觀點不應(yīng)被解釋為是一種承諾,軟件發(fā)布之后,Microsoft不能保證現(xiàn)在所提供的所有信息準(zhǔn)確無誤。這份白皮書僅供參考。Microsoft對本文檔中
3、提供的信息不做任何擔(dān)保、明示、暗示或法律方面的承諾。用戶有責(zé)任遵守所有適用的版權(quán)法。在版權(quán)權(quán)利限制下,未經(jīng)Microsoft公司明確的書面許可,本文檔的任何內(nèi)容不能被復(fù)制、存儲或放進(jìn)檢索系統(tǒng),或者以任何形式或任何手段(電子、機械、復(fù)印、錄制或其他)或為達(dá)到任何目的進(jìn)行轉(zhuǎn)換。Microsoft對本文檔涵蓋的主題內(nèi)容可能擁有專利、專利申請、商標(biāo)、版權(quán)或其他知識產(chǎn)權(quán)。沒有來自Microsoft的任何書面許可協(xié)議的明確表示,本文檔不賦予您對這些專利、商標(biāo)、版權(quán)或其他知識產(chǎn)權(quán)的任何許可。2007MicrosoftCorporation。保留所有權(quán)利。Microsoft、Windows和SQLServer
4、是MicrosoftCorporation在美國和/或其他國家的注冊商標(biāo)或商標(biāo)。本文檔中提及的真實的公司和產(chǎn)品名稱可能是其各自所有者的商標(biāo)。目錄TOChztHeading4,1,Heading5,2,Heading6,3HYPERLINKl_Toc179010303簡介PAGEREF_Toc179010303h1HYPERLINKl_Toc179010304安全配置PAGEREF_Toc179010304h1HYPERLINKl_Toc179010305WindowsUpadePAGEREF_Toc179010305h2外圍應(yīng)用配置HYPERLINKl_Toc179010306PAGEREF_
5、Toc179010306h2HYPERLINKl_Toc179010307驗證PAGEREF_Toc179010307h3口令策略強化HYPERLINKl_Toc179010308PAGEREF_Toc179010308h3HYPERLINKl_Toc179010309端點驗證PAGEREF_Toc179010309h5HYPERLINKl_Toc179010310授權(quán)PAGEREF_Toc179010310h6細(xì)HYPERLINKl_Toc179010311粒度權(quán)限PAGEREF_Toc179010311h7主體和安全實體HYPERLINKl_Toc179010312PAGEREF_Toc1
6、79010312h7角色和權(quán)限HYPERLINKl_Toc179010313PAGEREF_Toc179010313h8元數(shù)據(jù)安全HYPERLINKl_Toc179010314PAGEREF_Toc179010314h10HYPERLINKl_Toc179010315SQLServerAgent代理PAGEREF_Toc179010315h10執(zhí)行上下文HYPERLINKl_Toc179010316PAGEREF_Toc179010316h14用戶/架構(gòu)分離HYPERLINKl_Toc179010317PAGEREF_Toc179010317h15加密和密鑰管理HYPERLINKl_Toc17
7、9010318PAGEREF_Toc179010318h18數(shù)據(jù)加密HYPERLINKl_Toc179010319PAGEREF_Toc179010319h18透明數(shù)據(jù)加密HYPERLINKl_Toc179010320PAGEREF_Toc179010320h20可擴(kuò)展的密鑰管理HYPERLINKl_Toc179010321PAGEREF_Toc179010321h21代碼模塊簽名HYPERLINKl_Toc179010322PAGEREF_Toc179010322h21HYPERLINKl_Toc179010323SQLServer2008中的審核PAGEREF_Toc179010323h2
8、2所有動作審核HYPERLINKl_Toc179010324PAGEREF_Toc179010324h22HYPERLINKl_Toc179010325DDL觸發(fā)器PAGEREF_Toc179010325h24結(jié)束語HYPERLINKl_Toc179010326PAGEREF_Toc179010326h25導(dǎo)言隨著越來越多的網(wǎng)絡(luò)相互連接,安全性也變得日益重要。公司的資產(chǎn)必須受到保護(hù),尤其是數(shù)據(jù)庫,它們存儲著公司的寶貴信息。安全是數(shù)據(jù)引擎的關(guān)鍵特性之一,保護(hù)企業(yè)免受各種威脅。MicrosoftSQLServer2008安全特性的宗旨是使其更加安全,且使數(shù)據(jù)保護(hù)人員能夠更方便地使用和理解安全。在過
9、去幾年中,世界各地的人們對于安全的、基于計算機的系統(tǒng)有了更深刻的理解。Microsoft在此過程中一直處于前沿,而SQLServer就是落實這種理解的首批產(chǎn)品之一。它實現(xiàn)了重要的“最少特權(quán)”原則,因此不必授予用戶超出工作所需的權(quán)限。它提供了深層次的防御工具,可以采取措施防御最危險黑客的攻擊。關(guān)于Microsoft首創(chuàng)的TrustworthyComputing技術(shù),已經(jīng)有了很多文獻(xiàn)和討論,它可指導(dǎo)公司的所有軟件開發(fā)。有關(guān)更多信息,請參閱TrustworthyComputing網(wǎng)站:(HYPERLINK/mscorp/twc/default.mspx/mscorp/twc/default.mspx
10、)。該首創(chuàng)技術(shù)的4個核心組件為:Securebydesign。作為抵御黑客及保護(hù)數(shù)據(jù)的基礎(chǔ),軟件需要進(jìn)行安全設(shè)計。Securebydefault。系統(tǒng)管理員不必操心新安裝的安全,默認(rèn)設(shè)置即可保證。Secureindeployment。軟件自身應(yīng)能更新最新的安全補丁,并能協(xié)助維護(hù)。Communications。交流最佳實踐和不斷發(fā)展的威脅信息,以使管理員能夠主動地保護(hù)系統(tǒng)。這些指導(dǎo)準(zhǔn)則在SQLServer2008中均得到了體現(xiàn),它提供了保護(hù)數(shù)據(jù)庫所需的所有工具。本文介紹了系統(tǒng)和數(shù)據(jù)庫管理員需要掌握的最重要的安全特性。首先介紹如何安全地安裝和配置SQLServer2008。它討論了驗證和授權(quán)特性,
11、這些特性用以控制對服務(wù)器的訪問,并規(guī)定用戶一旦通過驗證就可以執(zhí)行的操作。最后介紹管理員需要理解的數(shù)據(jù)庫安全特性,以便為數(shù)據(jù)庫以及訪問這些數(shù)據(jù)庫的應(yīng)用程序提供安全的環(huán)境。安全配置要安全地安裝SQLServer,必須有一個安全的環(huán)境。對于運行SQLServer2008的服務(wù)器,其外部安全要求沒有太多改變。需要保護(hù)服務(wù)器的物理安全,并要定期備份數(shù)據(jù),如果聯(lián)網(wǎng),還須將其放到一個或多個防火墻后面,避免在運行其他服務(wù)器應(yīng)用程序的計算機上安裝SQLServer,且要盡可能減少必要的網(wǎng)絡(luò)協(xié)議數(shù)量。要在MicrosoftWindowsServer2003或MicrosoftWindowsServer2008計算
12、機上安裝SQLServer,以使它能充分利用操作系統(tǒng)級的安全保護(hù)措施。此外,最安全的方案就是安裝到一個或多個NTFS分區(qū)上。有了安全的環(huán)境,接下來最關(guān)鍵的就是安全地安裝SQLServer2008。安裝程序執(zhí)行所有的常規(guī)安裝任務(wù),其自帶的SystemConfigurationChecker將通知用戶可能導(dǎo)致問題的任何不足之處。默認(rèn)情況下,安裝SQLServer2008并不能啟用所有特性。而是只安裝核心組件以及常用特性。生產(chǎn)環(huán)境中可能用不到的其他特性默認(rèn)是關(guān)閉的??梢允褂迷摦a(chǎn)品支持的工具啟用所需特性。這些都是TrustworthyComputing技術(shù)中securebydefault特性的一部分。
13、這表示在安裝時,SQLServer2008可利用默認(rèn)的安全設(shè)置集實現(xiàn)開箱即用的安全性。基本數(shù)據(jù)庫服務(wù)器不需要的特性并未被安裝,目的是為了減少外圍應(yīng)用。由于默認(rèn)情形下并未在所有系統(tǒng)中啟用所有特性,因此在安裝系統(tǒng)鏡像時引入了異質(zhì)性。這一點限制了啟用易受潛在攻擊的特性的系統(tǒng)數(shù)量,因此有助于防御大規(guī)模攻擊或蠕蟲病毒。WindowsUpdate在企業(yè)中部署SQLServer之后,就能發(fā)現(xiàn)新的威脅和漏洞。WindowsUpdate旨在確保及時下載并應(yīng)用能夠顯著減少特定安全問題的補丁。可以利用WindowsUpdate自動應(yīng)用SQLServer2008補丁,并減少由于已知的軟件漏洞所導(dǎo)致的威脅。在大多數(shù)企業(yè)
14、環(huán)境中,應(yīng)使用WindowsServerUpdateService(WSUS)管理補丁在組織內(nèi)部的分發(fā)和更新。外圍應(yīng)用配置SQLServer2008具有大量特性,其中有許多在安裝時處于禁用狀態(tài)。例如,CLR集成、數(shù)據(jù)庫鏡像、調(diào)試、ServiceBroker以及郵件功能雖被安裝,但未運行且不可用,除非顯式地啟用或?qū)ζ溥M(jìn)行配置。該設(shè)計與SQLServer“默認(rèn)保證安全”思路的“減少外圍應(yīng)用”原則保持一致,可以減小攻擊表面。如果特性不可用或未被啟用,攻擊者就不能利用它。這樣做的代價就是,要花些時間搜尋啟用特性的所有Transact-SQL語句。即使發(fā)現(xiàn)sp_configuresystem存儲過程可以
15、滿足很多需要,仍須編寫并不直觀的如下代碼:sp_configureshowadvancedoptions,1reconfigurewithoverridesp_configureclrenabled,1由于配置選項過多,編寫此類代碼很耗時間,尤其是在組織中部署了多個SQLServer實例時更是如此。SQLServer2008帶有基于策略的管理技術(shù),名為DeclarativeManagementFramework(聲明管理框架,DMF)。DMF提供了大量的配置facet,其中的每一個都定義了一組相關(guān)的配置設(shè)置或?qū)傩?。可以利用這些facet創(chuàng)建一些為配置選項指定所需設(shè)置的“條件”,并將這些條件作為
16、“策略”應(yīng)用給企業(yè)中的SQLServer實例。SQLServer2008自帶的一個facet就是SurfaceArea,可以利用該facet定義用以控制各種SQLServer2008特性狀態(tài)的策略。通過創(chuàng)建為服務(wù)器定義所需外圍應(yīng)用設(shè)置的策略,可以方便地在組織中所有的SQLServer上配置最小的外圍應(yīng)用,并減小惡意攻擊的可能性。驗證在數(shù)據(jù)和服務(wù)器都需要保護(hù),而且不想承受如今互聯(lián)網(wǎng)上常見的無情攻擊之際,Microsoft開發(fā)了SQLServer2000?;镜尿炞C問題依然存在:您是誰?您如何證明自己的身份?但是,SQLServer2008提供了更健壯的驗證特性,對服務(wù)器的安全便捷有著更好的支持,
17、放行好人并阻止壞人。SQLServerAuthentication利用包含用戶id和口令的簡單連接字符串,為基于非Windows的客戶端或應(yīng)用程序提供了驗證機制。這種登錄易于使用,很受應(yīng)用程序開發(fā)人員的歡迎,它的安全性不如Windows驗證機制,因此在驗證機制中不推薦使用。SQLServer2008改進(jìn)了SQLServerAuthentication選項。首先,默認(rèn)情形下它利用SQL生成的證書支持通道的加密。管理員不必獲取或安裝有效的SLL證書,以確保SQL憑證流經(jīng)的通道是安全的。由于SQLServer2008自動生成這些證書,因此在傳送登錄數(shù)據(jù)包時,默認(rèn)情形下它將自動加密通道。如果客戶端使用
18、SQLServer2005或更新版本,即可使用該特性。注意:SQLServer生成的本地證書可保護(hù)被動的中間人攻擊,其中的攻擊者會嗅探網(wǎng)絡(luò)。要更有效地系統(tǒng)免受被動中間人攻擊,應(yīng)部署并使用客戶端也信任的證書。SQLServer2008進(jìn)一步增強了SQLServerAuthentication,因為在與Windows2003服務(wù)器或更新版本一起使用時,默認(rèn)情形下數(shù)據(jù)庫引擎將利用WindowsGroupPolicy檢查SQL登錄的口令復(fù)雜度、口令過期日以及帳戶鎖定狀態(tài)。這表示可以對SQLServer帳戶強行應(yīng)用Windows口令策略??诹畈呗詮娭朴辛薙QLServer2008,口令策略強制特性被內(nèi)置
19、到服務(wù)器中。作為WindowsServer2003NetAPI32庫的一部分,SQLServer利用NetValidatePasswordPolicy()API根據(jù)Windows的口令強度、過期日和帳戶鎖定狀態(tài)策略,在驗證以及口令設(shè)置、重置期間驗證口令的有效性。表3列出來構(gòu)成該策略的各種設(shè)置。表3WindowsServer2003口令策略組件類別名稱注釋口令策略強行應(yīng)用口令歷史記錄防止用戶重用舊口令,如交替使用兩個口令。最短的口令長度口令必須滿足復(fù)雜度要求參見下文。利用可逆加密存儲口令允許在Windows中檢索口令。絕對不要啟用該選項,除非應(yīng)用程序的要求優(yōu)先于安全口令的要求。(該策略不適用于S
20、QLServer。)口令過期日口令的最長存在時間口令的最短存在時間帳戶鎖定策略帳戶鎖定持續(xù)時間帳戶鎖定的持續(xù)時間(以分鐘計)。當(dāng)鎖定閾值0時,Windows將啟用該策略。帳戶鎖定閾值不成功登錄嘗試的最大次數(shù)。時間到后即可重置帳戶鎖定計數(shù)器多久之后Windows將重置不成功嘗試的計數(shù)器。當(dāng)鎖定閾值0時,Windows將啟用該選項。如未運行WindowsServer2003或更新版本,SQLServer仍利用簡單的檢查方法,強行應(yīng)用口令強度,以阻止以下口令:Null或空口令與計算機或登錄名相同Password、admin、administrator、sa、sysadmin等口令相同的復(fù)雜度標(biāo)準(zhǔn)被應(yīng)
21、用給在SQLServer中創(chuàng)建及使用的所有口令,包括sa登錄的口令、應(yīng)用程序角色、用于加密的數(shù)據(jù)庫主密鑰以及對稱加密密鑰。SQLServer默認(rèn)情形下總會檢查口令策略,但利用CREATELOGIN或ALTERLOGIN語句,可取消對個別登錄的強行應(yīng)用,代碼如下:CREATELOGINbobWITHPASSWORD=S%V7Vlv3c9Es8,CHECK_EXPIRATION=OFF,CHECK_POLICY=OFFCHECK_EXPIRATION使用WindowsServer2003策略的“口令最大和最小年齡”部分,而CHECK_POLICY使用其他的策略設(shè)置。管理設(shè)置還允許啟用或關(guān)閉口令策略
22、檢查、啟用或關(guān)閉口令過期檢查,并在用戶第一次登錄時強行修改口令。CREATELOGIN中的MUST_CHANGE選項強行讓用戶修改下次登錄時的口令。在客戶端,它允許在登錄時修改口令。所有新型客戶端數(shù)據(jù)訪問技術(shù)都支持該特性,包括OLEDB和ADO.NET以及客戶端工具,如ManagementStudio。如果用戶的不成功登錄次數(shù)過多,超出了口令策略允許的嘗試次數(shù),SQLServer將根據(jù)Windows策略中的設(shè)置鎖定該帳戶。管理員可利用ALTERLOGIN語句取消鎖定該帳戶:ALTERLOGINaliceWITHPASSWORD=3x1Tq#POYIAzUNLOCK端點驗證SQLServer20
23、08支持傳統(tǒng)的二進(jìn)制TabularDataStream(表格數(shù)據(jù)流),客戶端利用該數(shù)據(jù)流通過HTTP訪問數(shù)據(jù),也可通過HTTP訪問本地XMLWeb服務(wù)。允許通過HTTP進(jìn)行訪問的主要好處就是,任何理解Web服務(wù)協(xié)議的客戶端軟件和開發(fā)工具都可訪問存儲在SQLServer中的數(shù)據(jù)。這表示SQLServer2008可以提供獨立的Web服務(wù)方法,它也是ServiceOrientedArchitecture(面向服務(wù)的體系結(jié)構(gòu),SOA)中的一個完整端點。將SQLServer2008用作Web服務(wù)主機需要兩步通用操作,每一步都有很多變化:定義存儲過程和用戶定義的函數(shù),以提供Web服務(wù)方法;定義HTTP端點
24、,以通過HTTP接收方法調(diào)用,并將其轉(zhuǎn)給適當(dāng)?shù)倪^程。本文主要介紹其中涉及到安全問題。有關(guān)配置及使用HTTP端點的詳情,請參閱SQLServerBooksOnline中的CREATEENDPOINT(Transact-SQL)部分。由于默認(rèn)情形下SQLServer中的XMLWeb服務(wù)使用HTTP和80端口,因此大多數(shù)防火墻都允許流量通過。但是,不受保護(hù)的端點其實是潛在的攻擊載體,必須對其施加保護(hù),因此SQLServer提供了強大的驗證和授權(quán)機制。默認(rèn)情形下,SQLServer沒有任何端點,用戶必須擁有高級權(quán)限,以創(chuàng)建、更改及啟用HTTP端點。SQLServer2008提供了五種不同的驗證類型,與
25、IIS用于網(wǎng)站驗證的方法類似。Basic驗證基本驗證是HTTP1.1協(xié)議的一部分,它以base-64編碼的明文傳送登錄憑證。憑證必須映射到Windows登錄,然后SQLServer利用該憑證授權(quán)給對數(shù)據(jù)庫資源的訪問。如果使用Basic驗證,就無法將PORTS自變量設(shè)為CLEAR,反之必須將其設(shè)為SSL,并通過SSL利用數(shù)字證書加密與客戶端軟件的通信。Digest驗證Digest驗證也是HTTP1.1的一部分。在將憑證發(fā)送給服務(wù)器之前,它利用MD5對憑證進(jìn)行雜散化,這樣就無法通過電線發(fā)送它們,即使采用加密形式也是如此。憑證必須映射到有效的Windows域帳戶,且不能使用本地的用戶帳戶。NTLM驗
26、證NTLM使用的是挑戰(zhàn)響應(yīng)協(xié)議,該協(xié)議最初是在MicrosoftWindowsNT中最先得到應(yīng)用的,自此之后得到了Windows所有版本客戶端和服務(wù)器的支持。當(dāng)客戶端和服務(wù)器都使用Windows系統(tǒng)時,它提供了安全驗證機制,而且需要有效的域帳戶。Kerberos驗證Kerberos驗證是Windows2000及更新版本才有的特性,它以許多操作系統(tǒng)中都有的行業(yè)標(biāo)準(zhǔn)協(xié)議為基礎(chǔ)。它允許執(zhí)行相互驗證,其中客戶端和服務(wù)器都有理由相信對方的身份,并提供高級別的驗證形式。為利用WindowsServer2003中的Kerberos特性,必須通過HTTP.sys以及作為WindowsSupportToos一部
27、分的SetSPN.exe實用工具,注冊KerberosServicePrincipalName(Kerberos服務(wù)主體名,SPN)。Integrated驗證Integrated驗證提供了最好的NTLM和Kerberos驗證。服務(wù)器將使用其中的一種驗證類型并輸入客戶端請求,允許執(zhí)行客戶端支持的最安全驗證,同時使舊版Windows也能使用該服務(wù)??稍赪indows2003中配置Http.sys,使之與客戶端協(xié)商要采用的協(xié)議。用于端點的驗證方法是通過CREATE或ALTERENDPOINT語句的AUTHENTICATION屬性設(shè)置的。例如,下列代碼將創(chuàng)建利用Kerberos執(zhí)行驗證的端點:CREA
28、TEENDPOINTmyEndpointSTATE=STARTEDASHTTP(PATH=/MyHttpEndpoint,AUTHENTICATION=(KERBEROS),PORTS=(CLEAR),SITE=MySqlServer)FORSOAP(WSDL=DEFAULT,DATABASE=myDB,NAMESPACE=/MySqlServer/myDB/WebService)SQLServer2008支持偵聽HTTP和用戶定義的TCP端口的端點。也可對請求進(jìn)行各種格式化:SOAP、Transact-SQL、ServiceBroker專用格式以及數(shù)據(jù)庫鏡像專用格式。使用SOA時,可利用WS
29、-Security標(biāo)題驗證SQLServer登錄。Microsoft已實現(xiàn)了WebService端點驗證,以支持各種協(xié)議和規(guī)范,本文只介紹其中幾種。需要顯式地啟用驗證選項,并確??蛻舳四軌蛱峁┍匾膽{證類型。一旦SQLServer完成對客戶端的驗證,就可以為登錄有權(quán)訪問的資源授權(quán),如下節(jié)所述。授權(quán)驗證完成后,就該考慮已驗證登錄可以執(zhí)行的操作了。在這個方面,SQLServer2008和SQLServer2005比舊版更靈活。權(quán)限的粒度更細(xì),這樣即可授予必要的特定權(quán)限,而不是授予固定角色的成員,以免其權(quán)限超出需要?,F(xiàn)在有了更多的實體和安全實體,因此可為其分配粒度更細(xì)的權(quán)限。除了增強對用戶數(shù)據(jù)的保護(hù)
30、,與特定安全實體有關(guān)的結(jié)構(gòu)信息和元數(shù)據(jù)現(xiàn)在只能供擁有訪問該安全實體權(quán)限的主體使用。進(jìn)一步而言,可以利用某種機制創(chuàng)建定制的權(quán)限集,該機制允許定義可運行存儲過程的安全上下文。此外,SQLAgent利用靈活地代理方案允許工作步驟運行以及訪問必要的資源。所有這些特性都使得SQLServer更加靈活、更加安全。細(xì)粒度權(quán)限SQLServer2008和SQLServer2005比舊版安全的諸多方面之一就是改進(jìn)了權(quán)限的粒度。以前,管理員必須授予用戶固定服務(wù)器角色或固定數(shù)據(jù)庫角色的成員,以執(zhí)行特定的操作,但這些角色的權(quán)限通常會遠(yuǎn)遠(yuǎn)超出簡單任務(wù)的需要?!白钌偬貦?quán)”的原則要求用戶只能擁有完成工作所需的最低權(quán)限,因此
31、為達(dá)到小目標(biāo)而分配用戶高級角色就違背了該原則。從SQLServer2000開始,固定服務(wù)器和數(shù)據(jù)庫角色集已發(fā)生了巨大變化,當(dāng)用戶或應(yīng)用程序需要所有或大多數(shù)已定義的權(quán)限時,仍可利用這些預(yù)定義的權(quán)限?;蛟S最大的變化就是添加了public服務(wù)器角色。但是,“最少特權(quán)”的原則要求用戶不能使用無法恰好提供主體完成工作所需權(quán)限的角色。雖然為發(fā)現(xiàn)及分配主體所需權(quán)限需要更多工作,但這會帶來更加安全的數(shù)據(jù)庫環(huán)境。主體和安全實體在SQLServer2008中,“主體”就是可以訪問受保護(hù)資源且能獲得訪問資源所需權(quán)限的任何個人、組或流程。與舊版SQLServer一樣,可以在Windows中定義主體,也可將沒有對應(yīng)Wi
32、ndows主體的SQLServer登錄作為其基礎(chǔ)。下面的列表顯示了SQLServer2008主體的層次結(jié)構(gòu),但不包括固定服務(wù)器和數(shù)據(jù)庫角色,還顯示了將登錄和數(shù)據(jù)庫用戶映射為安全對象的方法。主體的影響范圍取決于它的定義范圍,這樣Windows級別的主體就比SQLServer級別的主體擁有更大的影響范圍,而后者的影響范圍又大于數(shù)據(jù)庫級別的主體。每個數(shù)據(jù)庫用戶都會自動隸屬于固定的public角色。Windows級別的主體Windows域登錄Windows本地登錄Windows組SQLServer級別的主體SQLServer登錄映射為Windows登錄的SQLServer登錄映射為證書的SQLServ
33、er登錄映射為不對稱密鑰的SQLServer登錄數(shù)據(jù)庫級別的主體數(shù)據(jù)庫用戶映射為SQLServer登錄的數(shù)據(jù)庫用戶映射為Windows登錄的數(shù)據(jù)庫用戶映射為證書的數(shù)據(jù)庫用戶映射為不對稱密鑰的數(shù)據(jù)庫用戶數(shù)據(jù)庫角色應(yīng)用程序角色公共角色授權(quán)的另一部分就是可用以保護(hù)權(quán)限授予操作或拒絕授予操作的對象。圖4列出了SQLServer2008中安全實體對象的層次結(jié)構(gòu)。在服務(wù)器級別,可以保護(hù)網(wǎng)絡(luò)端點,以控制進(jìn)出服務(wù)器的通信通道,以及數(shù)據(jù)庫、綁定角色和登錄。在數(shù)據(jù)庫和架構(gòu)級別,用戶創(chuàng)建的每一個對象都被當(dāng)作安全主體,包括那些駐留在架構(gòu)中的對象。服務(wù)器數(shù)據(jù)庫端點遠(yuǎn)程綁定路由SQLServer登錄數(shù)據(jù)庫應(yīng)用程序角色程序
34、集不對稱密鑰證書數(shù)據(jù)庫用戶固定數(shù)據(jù)庫角色全文目錄消息類型服務(wù)服務(wù)合同對稱密鑰架構(gòu)默認(rèn)函數(shù)過程查詢狀態(tài)隊列規(guī)則同義詞表觸發(fā)器類型視圖XML架構(gòu)集合圖4:SQLServer2008中的安全實體對象層次結(jié)構(gòu)角色和權(quán)限要了解可在SQLServer中可用的權(quán)限數(shù)量,可以調(diào)用fn_builtin_permissions系統(tǒng)函數(shù):SELECT*FROMsys.fn_builtin_permissions(default)下面是SQLServer2005中的新權(quán)限類型:CONTROL。授予與所有者類似的權(quán)限,可有效地將所有已定義的權(quán)限授予對象及其范圍內(nèi)的所有對象,包括能夠授予其他被授予者任何權(quán)限。CONTRO
35、LSERVER相當(dāng)于授予sysadmin特權(quán)。ALTER。授予權(quán)限以更改安全實體對象的任何屬性,但修改所有權(quán)除外。從本質(zhì)上講,它將為同一范圍內(nèi)的ALTER、CREATE或DROP安全實體對象授予權(quán)限。例如,為數(shù)據(jù)庫授予ALTER權(quán)限就可以修改它的表。ALTERANY。授予權(quán)限以修改指定類型的任何安全實體對象。例如,授予ALTERANYASSEMBLY就可以修改數(shù)據(jù)庫中的任何.NET程序集,而在服務(wù)器級別授予ALTERANYLOGIN,則用戶將可修改該服務(wù)器上的任何登錄。IMPERSONATEON。授予權(quán)限以扮演特定用戶或登錄。本章稍后將講到,該權(quán)限是為存儲過程切換執(zhí)行上下文所必需的。在以批處理
36、方式執(zhí)行扮演時也需要該權(quán)限。TAKEOWNERSHIP。授予權(quán)限以保證獲得對安全實體的所有權(quán),使用的是ALTERAUTHORIZATION語句。SQLServer2008仍然使用大家熟悉的GRANT、DENY和REVOKE架構(gòu),將安全實體對象的權(quán)限分配或拒絕分配主體。GRANT語句現(xiàn)在提供了所有的新權(quán)限選項,如授予范圍以及主體是否能夠向其他主體授予權(quán)限等。SQLServer不允許使用跨數(shù)據(jù)庫權(quán)限。要授予此類權(quán)限,要在每個數(shù)據(jù)庫中創(chuàng)建復(fù)制用戶,并分別為各個數(shù)據(jù)庫的用戶分配該權(quán)限。與舊版SQLServer類似,激活應(yīng)用程序角色時,其他權(quán)限在角色激活期間內(nèi)都會被暫時取消。然后,在SQLServer2
37、008和SQLServer2005中,可以取消設(shè)置應(yīng)用程序角色。SQLServer2000與新版本之間的另一個區(qū)別就是,在激活應(yīng)用程序角色時,角色也會暫時取消任何服務(wù)器特權(quán),包括public。例如,如為public授予VIEWANYDEFINITION,則應(yīng)用程序角色將不會允許使用該權(quán)限。在應(yīng)用程序角色上下文中訪問服務(wù)器級元數(shù)據(jù)時,這一點最明顯。注釋應(yīng)用程序角色的新首選替代方法就是在代碼模塊中使用執(zhí)行上下文。有關(guān)更多信息,請參閱本文的“HYPERLINKl_Execution_context執(zhí)行上下文”部分。i授予特定權(quán)限隱含地可以傳送其他權(quán)限的權(quán)利。例如,架構(gòu)的ALTER權(quán)限“涵蓋”更細(xì)的粒
38、度和低級權(quán)限,這些都是隱式定義的。圖5為ALTERSCHEMA的隱含權(quán)限。請參閱SQLServerBooksOnline上的“Covering/ImpliedPermissions(DatabaseEngine)”,以了解ImplyingPermissions用戶定義函數(shù)的Transact-SQL代碼,該函數(shù)從sys.fn_builtin_permissions目錄視圖中收集層次結(jié)構(gòu)列表,并識別層次結(jié)構(gòu)中每種權(quán)限的深度。在主數(shù)據(jù)庫中添加ImplyingPermissions后,執(zhí)行該語句將產(chǎn)生圖5的結(jié)果,傳入對象和權(quán)限類型:SELECT*FROMmaster.dbo.ImplyingPermi
39、ssions(schema,alter)ORDERBYheight,rank這是瀏覽SQLServer2008權(quán)限層次結(jié)構(gòu)的理想方法。圖5:ALTERSCHEMA的隱含權(quán)限層次結(jié)構(gòu)考慮可用的主體數(shù)量和類型、服務(wù)器和典型數(shù)據(jù)庫中的安全實體對象數(shù)量,以及可用權(quán)限、涵蓋權(quán)限、隱含權(quán)限的數(shù)量時,會很容易發(fā)現(xiàn)SQLServer2008中的權(quán)限的粒度非常細(xì)。創(chuàng)建數(shù)據(jù)庫需要對其安全需要進(jìn)行更詳細(xì)的分析,并謹(jǐn)慎控制所有對象的權(quán)限。不過,這種分析工作是值得做的,使用SQLServer2008中的這些功能會使數(shù)據(jù)庫更加安全。元數(shù)據(jù)安全細(xì)粒度權(quán)限架構(gòu)的一個優(yōu)點就是SQLServer不僅保護(hù)元數(shù)據(jù),也保護(hù)數(shù)據(jù)。在SQ
40、LServer2005之前,能夠訪問數(shù)據(jù)庫的用戶可以看到數(shù)據(jù)庫中所有對象的元數(shù)據(jù),無論該用戶是否可以訪問其中的數(shù)據(jù)或是否能夠執(zhí)行存儲過程。SQLServer2008仔細(xì)檢查數(shù)據(jù)庫中主體所擁有的各種權(quán)限,僅當(dāng)主體具有所有者身份或擁有對象的某些權(quán)限時,才會顯示該對象的元數(shù)據(jù)。還有一種VIEWDEFINITION權(quán)限,即使沒有該對象的其他權(quán)限,利用它也能查看元數(shù)據(jù)信息。這種保護(hù)擴(kuò)展到了某些操作返回的出錯消息,這些操作試圖訪問或更新用戶無權(quán)訪問的對象。SQLServer不會確認(rèn)確實存在一份名為Address的表,使攻擊者確信自己的方向是正確的,而是返回提示各種可能性的出錯消息。例如,如果用戶無權(quán)訪問數(shù)
41、據(jù)庫中的對象,并且試圖訪問Address表,則SQLServer將顯示下列出錯消息:Msg3701,Level14,State20,Line1CannotdropthetableAddress,becauseitdoesnotexistoryoudonothavepermission.通過這種方式,攻擊者無法確認(rèn)是否真的存在Address表。但是,通過排查問題,仍然有很小的攻擊可能性。SQLServerAgent代理關(guān)于SQLServer2008中的授權(quán)模型,一個最佳示例就是SQLServerAgent??梢远x往往與Windows登錄相關(guān)的各種憑證,且它們將鏈接到具有必要權(quán)限以執(zhí)行一個或多個
42、SQLServerAgent步驟的用戶。然后,SQLServerAgent代理將憑證與工作步驟鏈接到一起,以提供必要的權(quán)限。這就以顆粒方式實現(xiàn)了“最少特權(quán)”原則:只授予工作步驟必要的權(quán)限,僅此而已。可以隨意創(chuàng)建代理,并使其與一個或多個SQLServerAgent子系統(tǒng)相關(guān)聯(lián)。這與SQLServer2000中的全能式代理帳戶截然不同,后者允許用戶在SQLServerAgent的任何子系統(tǒng)中創(chuàng)建工作步驟。注釋在SQLServer2000中升級服務(wù)器時,將創(chuàng)建單代理帳戶,而且所有的子系統(tǒng)都將被分配這個單代理帳戶,以使現(xiàn)有的工作繼續(xù)運行。升級完成后,將創(chuàng)建憑證和代理帳戶,通過實施更安全、粒度更細(xì)的代理
43、集,以保護(hù)服務(wù)器資源。圖6為ManagementStudio中的ObjectExplorer,它顯示了SQLServerAgent中可用的子系統(tǒng)列表。每個子系統(tǒng)都可以擁有一個或多個與之相關(guān)的代理,以為工作步驟分配適當(dāng)?shù)臋?quán)限。該架構(gòu)有一個例外,即Transact-SQL子系統(tǒng)需要在模塊所有者的權(quán)限下執(zhí)行,這與SQLServer2000中的方式相同。圖6:可與代理相關(guān)聯(lián)的SQLServerAgent子系統(tǒng)新安裝了SQLServer之后,只有SystemAdministrator角色有權(quán)維護(hù)SQLServerAgent工作,而且只有sysadmins能夠使用ManagementStudioObjec
44、tExplorer中的管理窗格。SQLServer2008允許用戶利用其它一些角色授予各種級別的權(quán)限??梢苑峙溆脩鬝QLAgentUser、SQLAgentReaderRole或SQLAgentOperator角色,其中每一個角色都會分配級別逐漸提高的權(quán)限,以創(chuàng)建、管理及運行工作,也可分配MaintenanceUser角色,它擁有SQLAgentUser的所有權(quán)限,還能創(chuàng)建維護(hù)計劃。當(dāng)然,sysadmin角色的成員可以在任何子系統(tǒng)中隨意執(zhí)行任何操作。要授予其他任何用戶使用子系統(tǒng)到權(quán)限,需要創(chuàng)建至少一個代理帳戶,這可授予訪問一個或多個子系統(tǒng)的權(quán)利。圖7顯示了如何將代理帳戶MyProxy分配多個主
45、體,這里包括一位用戶和一個角色。代理帳戶使用憑證,將其鏈接到帳戶,通常是鏈接到域帳戶,并且擁有在操作系統(tǒng)中執(zhí)行各種任務(wù)的權(quán)限,這些權(quán)限也是子系統(tǒng)所必需的。每個代理都擁有一個或多個與之相關(guān)的子系統(tǒng),它們使主體能夠運行這些子系統(tǒng)。圖7:用于各種子系統(tǒng)的SQLServerAgent代理帳戶下列代碼就是實施圖7所示架構(gòu)所需的Transact-SQL代碼。首先創(chuàng)建憑證和一個數(shù)據(jù)庫對象,后者將提供操作系統(tǒng)帳戶鏈接,該帳戶有權(quán)在子系統(tǒng)中執(zhí)行所需動作。然后它添加MyProxy代理帳戶,該帳戶其實只是憑證的友好名稱。接著,它將代理分配兩個主體,就是SQLServer登錄和定制角色。最后,它使代理與4個SQLSe
46、rverAgent子系統(tǒng)相關(guān)聯(lián)。.CREATECREDENTIALMyCredentialWITHIDENTITY=MyDOMAINuser1GOmsdb.sp_add_proxyproxy_name=MyProxy,credential_name=MyCredentialGOmsdb.sp_grant_login_to_proxylogin_name=MyLogin,proxy_name=MyProxyGOmsdb.sp_grant_login_to_proxylogin_name=MyRole,proxy_name=MyProxyGOsp_grant_proxy_to_subsystemp
47、roxy_name=MyProxy,subsystem_name=ActiveScriptingGOsp_grant_proxy_to_subsystemproxy_name=MyProxy,subsystem_name=CmdExecGOsp_grant_proxy_to_subsystemproxy_name=MyProxy,subsystem_name=ANALYSISQUERYGOsp_grant_proxy_to_subsystemproxy_name=MyProxy,subsystem_name=DTSGOSQLServerManagementStudio完全支持憑證和代理的創(chuàng)建,
48、如圖8所示。這將創(chuàng)建與上一段代碼相同的代理。圖8:SQLServerManagementStudio中的SQLServerAgent新代理代理不只是操作系統(tǒng)中杜絕安全問題的一種方式。如果與代理一起使用的憑證沒有Windows權(quán)限,如通過網(wǎng)絡(luò)寫入目錄的權(quán)限,則該代理也不會有此權(quán)限。也可利用代理為xp_cmdshell授予有限的執(zhí)行權(quán)限,因為它是黑客最喜歡利用的工具,只要他們能夠成功威脅到SQLServer計算機的安全,就會進(jìn)一步利用該工具將其威脅范圍擴(kuò)展到網(wǎng)絡(luò)空間。代理提供了該領(lǐng)域的保護(hù)機制,因為縱使主體在網(wǎng)絡(luò)上不受任何限制,例如域管理員主體,通過代理執(zhí)行的任何命令也只擁有憑證帳戶的有限權(quán)限。執(zhí)
49、行上下文一直以來,SQLServer都支持所有權(quán)鏈的概念,它可確保管理員和應(yīng)用程序開發(fā)人員能夠在數(shù)據(jù)庫的入口點提前檢查權(quán)限,而不是用來提供所有被訪問對象的權(quán)限。只要調(diào)用模塊(存儲過程或函數(shù))或視圖的用戶擁有模塊的執(zhí)行權(quán)限或視圖的選擇權(quán)限,而且模塊或視圖的所有者曾是被訪問對象的所有者(所有權(quán)鏈),則不會檢查基本對象的任何權(quán)限,而且調(diào)用者將收到請求的數(shù)據(jù)。假如因為代碼的所有者沒有被引用對象的所有權(quán),而導(dǎo)致所有權(quán)鏈被打斷,SQLServer將按照調(diào)用者的安全上下文檢查權(quán)限。如果調(diào)用者擁有訪問對象的權(quán)限,SQLServer將返回數(shù)據(jù)。如果沒有此權(quán)限,SQLServer將提示出錯。所有權(quán)鏈有一些局限性:
50、它只適用于數(shù)據(jù)操作,而不適用于動態(tài)SQL。而且,如要跨越所有權(quán)邊界訪問對象,就不可能實現(xiàn)所有權(quán)鏈。因此,權(quán)限提前檢查行為只適用于某些場合。SQLServer2008能夠利用執(zhí)行上下文標(biāo)記模塊,這樣模塊中的語句即可供與調(diào)用用戶并列的特殊用戶執(zhí)行。通過這種方式,調(diào)用用戶仍然需要模塊的執(zhí)行權(quán)限,而SQLServer將按照模塊的執(zhí)行上下文檢查模塊中語句的權(quán)限??梢岳么诵袨榭头袡?quán)鏈的某些缺陷,因為它適用于模塊中的所有語句。想要執(zhí)行權(quán)限提前檢查的管理員可以利用執(zhí)行上下文達(dá)到這一目的。在定義用戶定義函數(shù)(除了內(nèi)聯(lián)的表值)、存儲過程和觸發(fā)器時,可以利用EXECUTEAS子句指定SQLServer要使用哪
51、個用戶的權(quán)限驗證對對象以及過程引用數(shù)據(jù)的訪問:CREATEPROCEDUREGetData(Tablevarchar(40)WITHEXECUTEASUser1SQLServer2008提供了4種EXECUTEAS選項。EXECUTEASCALLER指定代碼在模塊調(diào)用者的安全上下文中執(zhí)行。不會出現(xiàn)假冒的現(xiàn)象。調(diào)用者必須擁有所有被引用對象的訪問權(quán)限。但是,SQLServer只檢查被打斷的所有權(quán)鏈的權(quán)限,假如代碼的所有者也擁有基本對象的所有權(quán),則只檢查該模塊的執(zhí)行權(quán)限。這就是向后兼容性的默認(rèn)執(zhí)行上下文。EXECUTEASuser_name指定代碼在指定用戶的安全上下文中執(zhí)行。如果不想使用所有權(quán)鏈,
52、這就是一個不錯的選項。否則,可以創(chuàng)建擁有運行代碼以及創(chuàng)建定制權(quán)限集所需權(quán)限的用戶。EXECUTEASSELF是一個快捷符號,用于為創(chuàng)建或更改模塊的用戶指定安全上下文。在內(nèi)部,SQLServer將保存與模塊關(guān)聯(lián)的實際用戶名,而不是保存“SELF”。EXECUTEASOWNER指定安全上下文就是模塊執(zhí)行時模塊當(dāng)前所有者的安全上下文。如果模塊沒有所有者,則將使用包含架構(gòu)所有者的上下文。如想修改模塊的所有者,而且不想修改模塊本身,這就是一個絕佳選項。利用EXECUTEAS選項更改用戶上下文時,模塊的創(chuàng)建者和更改者必須擁有指定用戶的IMPERSONATE權(quán)限。不能從數(shù)據(jù)庫中刪除指定用戶,除非將所有模塊的
53、執(zhí)行上下文更改為其他用戶。用戶/架構(gòu)分離SQLServer2000沒有架構(gòu)的概念,而ANSISQL-99規(guī)范將架構(gòu)定義為單個主體所擁有的所有數(shù)據(jù)庫對象集合,而且該主體形成了對象的一個命名空間。架構(gòu)就是數(shù)據(jù)庫對象的容器(如表、視圖、存儲過程、函數(shù)、類型和觸發(fā)器等)。它的功能與.NTEFramework和XML中的命名空間函數(shù)非常類似,該函數(shù)可將對象進(jìn)行分組,以便數(shù)據(jù)庫能夠重用對象名稱,如允許在一個數(shù)據(jù)庫中同時存在dbo.Customer和Fred.Customer,也可對不同所有者的對象進(jìn)行分組。注意:需要用到目錄視圖,如sys.database_sys.principals、sys.schem
54、as和sys.objects等。原因在于sysobjects舊系統(tǒng)表不支持架構(gòu),因此不支持U/S分離。此外,不贊成使用舊目錄視圖,在SQLServer的未來版本中它們將被刪除。圖9的頂端就是SQLServer2000中的架構(gòu)工作原理。當(dāng)管理員在數(shù)據(jù)庫中創(chuàng)建Alice用戶時,SQLServer將自動創(chuàng)建Alice架構(gòu),它隱藏于Alice用戶后面。如果Alice登錄了正在運行SQLServer但沒有數(shù)據(jù)庫所有權(quán)的服務(wù)器,而且創(chuàng)建了表1,則該表單實際名稱為Alice.Table1。這也適用于Alice創(chuàng)建的其他對象,如Alice.StoredProcedure1和Alice.View1。如果Alic
55、e是數(shù)據(jù)庫所有者或sysadmin,她創(chuàng)建的對象將成為dbo架構(gòu)的一部分。雖然我們習(xí)慣說dbo擁有對象,但這是同一碼事。圖9:SQLServer2000and2008中的用戶/架構(gòu)/對象需要修改對象的所有權(quán)時,例如Alice離開公司而Lucinda接手了Alice的工作,此時SQLServer2000中用戶和架構(gòu)的融合會產(chǎn)生一個問題。系統(tǒng)管理員必須將Alice擁有的所有對象的所有者改為Lucinda。更成問題的是,則Lucinda擁有了表的所有權(quán)后,還必須將任何引用Alice.Table1的Transact-SQL或客戶端應(yīng)用程序代碼改為引用Lucinda.Table1。根據(jù)Alice擁有的對
56、象數(shù)量以及內(nèi)部嵌有該名稱的應(yīng)用程序數(shù)量,這可能是一項繁重的工作。Microsoft公司一直建議內(nèi)置的dbo用戶要擁有所有的數(shù)據(jù)庫對象,以避免產(chǎn)生這些問題。與修改許多對象和客戶端應(yīng)用程序相比,修改數(shù)據(jù)庫的所有權(quán)要容易得多。注意:不要被SQLServer2000CREATESCHEMA語句迷惑。它只是一種簡單的方法,用以創(chuàng)建特殊用戶擁有的表和視圖,以及授予權(quán)限。可以利用該語句命名架構(gòu)的所有者,但不能命名架構(gòu)。SQLServer仍不可避免地將所有者鏈接到架構(gòu),這要面對修改所有權(quán)帶來的所有問題。SQLServer2008通過分離用戶和架構(gòu)克服了這些問題,并實施了SQL-99架構(gòu),如圖9底部所示。利用新
57、增的CREATEUSERDDL創(chuàng)建Alice新用戶時,SQLServer不再自動創(chuàng)建使用相同名稱的架構(gòu)。反之,必須顯式創(chuàng)建架構(gòu),并將其所有權(quán)分配用戶。由于圖示的所有的數(shù)據(jù)庫對象都包含于Schema1架構(gòu)中,就是Alice最初擁有的架構(gòu),因此只須將架構(gòu)的所有者改為Lucinda,就可以方便地修改所有架構(gòu)對象的所有權(quán)。每位用戶也都被分配默認(rèn)架構(gòu),這樣SQLServer將假定沒有架構(gòu)引用且按照名稱引用的任何對象都位于默認(rèn)架構(gòu)中。在圖9的底部,如果Alice使用Schema1作為默認(rèn)架構(gòu),她就可將該表命名為Schema1.Table1或Table1。Carol用戶可能沒有與其名字關(guān)聯(lián)的默認(rèn)架構(gòu),必須將
58、該表命名為Schema1.Table1。沒有默認(rèn)預(yù)定義架構(gòu)的任何用戶都使用dbo作為默認(rèn)架構(gòu)。在SQLServer2008中,完全合格的對象名稱由4部分組成,這與舊版SQLServer中的對象名稱類似:server.database.schema.object與舊版類似,如果對象所在服務(wù)器與運行代碼的服務(wù)器同名,則可忽略服務(wù)器名稱。如果連接打開了同名數(shù)據(jù)庫,則可忽略數(shù)據(jù)庫名稱。如果使用當(dāng)前用戶的默認(rèn)架構(gòu)或架構(gòu)為dbo所擁有,則可忽略架構(gòu)名稱,因為這是SQLServer嘗試消除對象名稱歧義時最后用過的架構(gòu)。可以利用CREATEUSER語句而非sp_adduser語句創(chuàng)建新用戶。此系統(tǒng)存儲過程仍然
59、是為了實現(xiàn)向后兼容性,但已進(jìn)行了少許修改,以遵循用戶與架構(gòu)分離的新原則。sp_adduser創(chuàng)建的架構(gòu)與新用戶名或應(yīng)用程序角色同名,并將該架構(gòu)作為用戶的默認(rèn)架構(gòu),這與SQLServer2000的行為類似,但提供了分離的架構(gòu)。注意:使用ALTERAUTHORIZATION語句時,可能會產(chǎn)生這種情況:“您”擁有“我的”架構(gòu)中的表(或反之)。這個問題具有重大的隱含意義。例如,誰擁有該表的觸發(fā)器,您還是我?底部的代碼行可以設(shè)計得非常巧妙,以發(fā)現(xiàn)架構(gòu)范圍對象或類型的真正所有者。有兩種方式可以避開此問題:利用OBJECTPROPERTY(id,”O(jiān)wnerId”)發(fā)現(xiàn)對象的真正所有者。利用TYPEPROP
60、ERTY(type,”O(jiān)wnerId”)發(fā)現(xiàn)類型的真正所有者。SQLServer2008利用同義詞幫助減少擊鍵次數(shù)??梢岳脙刹糠帧⑷糠只蛩牟糠滞暾麑ο竺麨槿魏螌ο髣?chuàng)建同義詞。SQLServer使用同義詞訪問已定義的對象。在下列代碼中,“History”同義詞表示在AdventureWorks數(shù)據(jù)庫中指定的schema.table。SELECT語句返回EmployeeDepartmentHistory表的內(nèi)容。USEAdventureWorksGOCREATESYNONYMHistoryFORHumanResources.EmployeeDepartmentHistorySELECT*FRO
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年貴州省畢節(jié)地區(qū)單招職業(yè)傾向性測試題庫新版
- 2025年廣西科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫匯編
- 藥學(xué)模擬練習(xí)題+參考答案
- 2025年Γ-FE2O3項目發(fā)展計劃
- 2025年地(水)面效應(yīng)飛機項目合作計劃書
- 2025年貴州航空職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫帶答案
- 第15課 向世界介紹我的學(xué)校-創(chuàng)作與發(fā)布-教學(xué)設(shè)計 2024-2025學(xué)年浙教版(2023)初中信息技術(shù)七年級上冊
- 2025年聚光太陽灶項目發(fā)展計劃
- 2025年湖南電子科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫一套
- 2025年廣西工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫一套
- “源網(wǎng)荷儲”一體化項目(儲能+光伏+風(fēng)電)規(guī)劃報告
- 100以內(nèi)加法減法口算練習(xí)題100題有答案
- 少兒美術(shù)課件- 9-12歲 素描班《感知力素描》
- 《靜心的力量》課件
- 續(xù)命湯系列-千金要方治療中風(fēng)
- 沖壓模具治具壽命管制表
- 《兒科學(xué)》課件第15章第四節(jié) 先天性甲狀腺功能減退癥
- 安全管理組織結(jié)構(gòu)分工圖
- GB/T 2965-2023鈦及鈦合金棒材
- 2023年《植物保護(hù)》專業(yè)考試題庫
- 六西格瑪(6Sigma)詳解及實際案例分析
評論
0/150
提交評論