成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server 2008的元數(shù)據(jù)安全

數(shù)據(jù)庫 SQL Server
SQL Server 2008 仔細(xì)檢查數(shù)據(jù)庫中主體所擁有的各種權(quán)限,僅當(dāng)主體具有所有者身份或擁有對象的某些權(quán)限時,才會顯示該對象的元數(shù)據(jù)。還有一種 VIEW DEFINITION 權(quán)限,即使沒有該對象的其他權(quán)限,利用它也能查看元數(shù)據(jù)信息。

細(xì)粒度權(quán)限架構(gòu)的一個優(yōu)點就是 SQL Server不僅保護(hù)元數(shù)據(jù),也保護(hù)數(shù)據(jù)。在 SQL Server 2005之前,能夠訪問數(shù)據(jù)庫的用戶可以看到數(shù)據(jù)庫中所有對象的元數(shù)據(jù),無論該用戶是否可以訪問其中的數(shù)據(jù)或是否能夠執(zhí)行存儲過程。

SQL Server 2008 仔細(xì)檢查數(shù)據(jù)庫中主體所擁有的各種權(quán)限,僅當(dāng)主體具有所有者身份或擁有對象的某些權(quán)限時,才會顯示該對象的元數(shù)據(jù)。還有一種 VIEW DEFINITION 權(quán)限,即使沒有該對象的其他權(quán)限,利用它也能查看元數(shù)據(jù)信息。

這種保護(hù)擴(kuò)展到了某些操作返回的出錯消息,這些操作試圖訪問或更新用戶無權(quán)訪問的對象。SQL Server  不會確認(rèn)確實存在一份名為 Address 的表,使攻擊者確信自己的方向是正確的,而是返回提示各種可能性的出錯消息。例如,如果用戶無權(quán)訪問數(shù)據(jù)庫中的對象,并且試圖訪問 Address 表,則 SQL Server 將顯示下列出錯消息:

Msg 3701, Level 14, State 20, Line 1
Cannot drop the table 'Address', because it does not exist or you do not have permission.

通過這種方式,攻擊者無法確認(rèn)是否真的存在 Address 表。但是,通過排查問題,仍然有很小的攻擊可能性。

SQL Server Agent 代理

關(guān)于 SQL Server 2008 中的授權(quán)模型,一個最佳示例就是 SQL Server Agent。可以定義往往與 Windows 登錄相關(guān)的各種憑證,且它們將鏈接到具有必要權(quán)限以執(zhí)行一個或多個 SQL Server Agent 步驟的用戶。然后,SQL Server Agent 代理將憑證與工作步驟鏈接到一起,以提供必要的權(quán)限。

這就以顆粒方式實現(xiàn)了“最少特權(quán)”原則:只授予工作步驟必要的權(quán)限,僅此而已。可以隨意創(chuàng)建代理,并使其與一個或多個 SQL Server Agent 子系統(tǒng)相關(guān)聯(lián)。這與 SQL Server 2000中的全能式代理帳戶截然不同,后者允許用戶在 SQL Server Agent 的任何子系統(tǒng)中創(chuàng)建工作步驟。

注釋   在 SQL Server 2000中升級服務(wù)器時,將創(chuàng)建單代理帳戶,而且所有的子系統(tǒng)都將被分配這個單代理帳戶,以使現(xiàn)有的工作繼續(xù)運(yùn)行。升級完成后,將創(chuàng)建憑證和代理帳戶,通過實施更安全、粒度更細(xì)的代理集,以保護(hù)服務(wù)器資源。

圖6為 Management Studio 中的 Object Explorer,它顯示了 SQL Server Agent 中可用的子系統(tǒng)列表。每個子系統(tǒng)都可以擁有一個或多個與之相關(guān)的代理,以為工作步驟分配適當(dāng)?shù)臋?quán)限。該架構(gòu)有一個例外,即 Transact-SQL 子系統(tǒng)需要在模塊所有者的權(quán)限下執(zhí)行,這與 SQL Server 2000 中的方式相同。

圖1

圖1:可與代理相關(guān)聯(lián)的 SQL Server Agent 子系統(tǒng)

新安裝了 SQL Server 之后,只有 System Administrator 角色有權(quán)維護(hù) SQL Server Agent工作,而且只有 sysadmins  能夠使用 Management Studio Object Explorer 中的管理窗格。SQL Server 2008 允許用戶利用其它一些角色授予各種級別的權(quán)限。可以分配用戶 SQLAgentUserSQLAgentReaderRoleSQLAgentOperator 角色,其中每一個角色都會分配級別逐漸提高的權(quán)限,以創(chuàng)建、管理及運(yùn)行工作,也可分配 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 分配多個主體,這里包括一位用戶和一個角色。代理帳戶使用憑證,將其鏈接到帳戶,通常是鏈接到域帳戶,并且擁有在操作系統(tǒng)中執(zhí)行各種任務(wù)的權(quán)限,這些權(quán)限也是子系統(tǒng)所必需的。每個代理都擁有一個或多個與之相關(guān)的子系統(tǒng),它們使主體能夠運(yùn)行這些子系統(tǒng)。

圖2

圖2:用于各種子系統(tǒng)的 SQL Server Agent 代理帳戶

下列代碼就是實施圖7所示架構(gòu)所需的 Transact-SQL 代碼。首先創(chuàng)建憑證和一個數(shù)據(jù)庫對象,后者將提供操作系統(tǒng)帳戶鏈接,該帳戶有權(quán)在子系統(tǒng)中執(zhí)行所需動作。然后它添加 MyProxy 代理帳戶,該帳戶其實只是憑證的友好名稱。接著,它將代理分配兩個主體,就是 SQL Server 登錄和定制角色。最后,它使代理與4個 SQL Server Agent 子系統(tǒng)相關(guān)聯(lián)。

CREATE CREDENTIAL MyCredential WITH IDENTITY = 'MyDOMAIN\user1'
GO
msdb..sp_add_proxy @proxy_name = 'MyProxy',
@credential_name = 'MyCredential'
GO
msdb..sp_grant_login_to_proxy @login_name = 'MyLogin',
@proxy_name = 'MyProxy'
GO
msdb..sp_grant_login_to_proxy @login_name = 'MyRole',
@proxy_name = 'MyProxy'
GO

sp_grant_proxy_to_subsystem @proxy_name = 'MyProxy',
@subsystem_name = 'ActiveScripting'
GO
sp_grant_proxy_to_subsystem @proxy_name = 'MyProxy',
@subsystem_name = 'CmdExec'
GO
sp_grant_proxy_to_subsystem @proxy_name = 'MyProxy',
@subsystem_name = 'ANALYSISQUERY'
GO
sp_grant_proxy_to_subsystem @proxy_name = 'MyProxy',
@subsystem_name = 'DTS'
GO

 

SQL Server Management Studio 完全支持憑證和代理的創(chuàng)建,如圖8所示。這將創(chuàng)建與上一段代碼相同的代理。

圖3

圖3:SQL Server Management Studio 中的SQL Server Agent 新代理

代理不只是操作系統(tǒng)中杜絕安全問題的一種方式。如果與代理一起使用的憑證沒有 Windows 權(quán)限,如通過網(wǎng)絡(luò)寫入目錄的權(quán)限,則該代理也不會有此權(quán)限。也可利用代理為xp_cmdshell 授予有限的執(zhí)行權(quán)限,因為它是黑客最喜歡利用的工具,只要他們能夠成功威脅到 SQL Server 計算機(jī)的安全,就會進(jìn)一步利用該工具將其威脅范圍擴(kuò)展到網(wǎng)絡(luò)空間。代理提供了該領(lǐng)域的保護(hù)機(jī)制,因為縱使主體在網(wǎng)絡(luò)上不受任何限制,例如域管理員主體,通過代理執(zhí)行的任何命令也只擁有憑證帳戶的有限權(quán)限。

#p#

執(zhí)行上下文

一直以來,SQL Server 都支持所有權(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)鏈被打斷,SQL Server 將按照調(diào)用者的安全上下文檢查權(quán)限。如果調(diào)用者擁有訪問對象的權(quán)限,SQL Server 將返回數(shù)據(jù)。如果沒有此權(quán)限,SQL Server 將提示出錯。

所有權(quán)鏈有一些局限性:它只適用于數(shù)據(jù)操作,而不適用于動態(tài) SQL。而且,如要跨越所有權(quán)邊界訪問對象,就不可能實現(xiàn)所有權(quán)鏈。因此,權(quán)限提前檢查行為只適用于某些場合。

SQL Server 2008 能夠利用執(zhí)行上下文標(biāo)記模塊,這樣模塊中的語句即可供與調(diào)用用戶并列的特殊用戶執(zhí)行。通過這種方式,調(diào)用用戶仍然需要模塊的執(zhí)行權(quán)限,而SQL Server 將按照模塊的執(zhí)行上下文檢查模塊中語句的權(quán)限。可以利用此行為客服所有權(quán)鏈的某些缺陷,因為它適用于模塊中的所有語句。想要執(zhí)行權(quán)限提前檢查的管理員可以利用執(zhí)行上下文達(dá)到這一目的。

在定義用戶定義函數(shù)(除了內(nèi)聯(lián)的表值)、存儲過程和觸發(fā)器時,可以利用 EXECUTE AS 子句指定SQL Server 要使用哪個用戶的權(quán)限驗證對對象以及過程引用數(shù)據(jù)的訪問:

CREATE PROCEDURE GetData(@Table varchar(40))
WITH EXECUTE AS 'User1'

SQL Server 2008 提供了4種 EXECUTE AS 選項。

EXECUTE AS CALLER 指定代碼在模塊調(diào)用者的安全上下文中執(zhí)行。不會出現(xiàn)假冒的現(xiàn)象。調(diào)用者必須擁有所有被引用對象的訪問權(quán)限。但是,SQL Server 只檢查被打斷的所有權(quán)鏈的權(quán)限,假如代碼的所有者也擁有基本對象的所有權(quán),則只檢查該模塊的執(zhí)行權(quán)限。這就是向后兼容性的默認(rèn)執(zhí)行上下文。

EXECUTE AS 'user_name'  指定代碼在指定用戶的安全上下文中執(zhí)行。如果不想使用所有權(quán)鏈,這就是一個不錯的選項。否則,可以創(chuàng)建擁有運(yùn)行代碼以及創(chuàng)建定制權(quán)限集所需權(quán)限的用戶。

EXECUTE AS SELF 是一個快捷符號,用于為創(chuàng)建或更改模塊的用戶指定安全上下文。在內(nèi)部,SQL Server 將保存與模塊關(guān)聯(lián)的實際用戶名,而不是保存“SELF”。

EXECUTE AS OWNER 指定安全上下文就是模塊執(zhí)行時模塊當(dāng)前所有者的安全上下文。如果模塊沒有所有者,則將使用包含架構(gòu)所有者的上下文。如想修改模塊的所有者,而且不想修改模塊本身,這就是一個絕佳選項。

利用 EXECUTE AS 選項更改用戶上下文時,模塊的創(chuàng)建者和更改者必須擁有指定用戶的IMPERSONATE 權(quán)限。不能從數(shù)據(jù)庫中刪除指定用戶,除非將所有模塊的執(zhí)行上下文更改為其他用戶。

用戶/架構(gòu)分離

SQL Server 2000 沒有架構(gòu)的概念,而 ANSI SQL-99 規(guī)范將架構(gòu)定義為單個主體所擁有的所有數(shù)據(jù)庫對象集合,而且該主體形成了對象的一個命名空間。架構(gòu)就是數(shù)據(jù)庫對象的容器(如表、視圖、存儲過程、函數(shù)、類型和觸發(fā)器等)。它的功能與.NTE Framework 和 XML 中的命名空間函數(shù)非常類似,該函數(shù)可將對象進(jìn)行分組,以便數(shù)據(jù)庫能夠重用對象名稱,如允許在一個數(shù)據(jù)庫中同時存在 dbo.Customer 和 Fred.Customer,也可對不同所有者的對象進(jìn)行分組。

注意:需要用到目錄視圖,如 sys.database_sys.principalssys.schemas sys.objects 等。原因在于 sysobjects 舊系統(tǒng)表不支持架構(gòu),因此不支持U/S分離。此外,不贊成使用舊目錄視圖,在 SQL Server 的未來版本中它們將被刪除。

圖9的頂端就是 SQL Server 2000中的架構(gòu)工作原理。當(dāng)管理員在數(shù)據(jù)庫中創(chuàng)建 Alice 用戶時, SQL Server 將自動創(chuàng)建 Alice 架構(gòu),它隱藏于 Alice 用戶后面。如果 Alice 登錄了正在運(yùn)行 SQL Server 但沒有數(shù)據(jù)庫所有權(quán)的服務(wù)器,而且創(chuàng)建了表1,則該表單實際名稱為 Alice.Table1。這也適用于 Alice 創(chuàng)建的其他對象,如 Alice.StoredProcedure1 和 Alice.View1。如果 Alice 是數(shù)據(jù)庫所有者或 sysadmin,她創(chuàng)建的對象將成為 dbo 架構(gòu)的一部分。雖然我們習(xí)慣說 dbo 擁有對象,但這是同一碼事。

圖4

圖4:SQL Server 2000 and 2008中的用戶/架構(gòu)/對象

需要修改對象的所有權(quán)時,例如 Alice 離開公司而 Lucinda 接手了 Alice 的工作,此時SQL Server 2000 中用戶和架構(gòu)的融合會產(chǎn)生一個問題。系統(tǒng)管理員必須將 Alice 擁有的所有對象的所有者改為Lucinda。更成問題的是,則 Lucinda 擁有了表的所有權(quán)后,還必須將任何引用 Alice.Table1 的Transact-SQL 或客戶端應(yīng)用程序代碼改為引用 Lucinda.Table1。根據(jù) Alice 擁有的對象數(shù)量以及內(nèi)部嵌有該名稱的應(yīng)用程序數(shù)量,這可能是一項繁重的工作。Microsoft 公司一直建議內(nèi)置的 dbo 用戶要擁有所有的數(shù)據(jù)庫對象,以避免產(chǎn)生這些問題。與修改許多對象和客戶端應(yīng)用程序相比,修改數(shù)據(jù)庫的所有權(quán)要容易得多。

注意:不要被 SQL Server 2000 CREATE SCHEMA 語句迷惑。它只是一種簡單的方法,用以創(chuàng)建特殊用戶擁有的表和視圖,以及授予權(quán)限。可以利用該語句命名架構(gòu)的所有者,但不能命名架構(gòu)。SQL Server 仍不可避免地將所有者鏈接到架構(gòu),這要面對修改所有權(quán)帶來的所有問題。

SQL Server 2008 通過分離用戶和架構(gòu)克服了這些問題,并實施了 SQL-99 架構(gòu),如圖9底部所示。利用新增的 CREATE USER DDL 創(chuàng)建 Alice 新用戶時,SQL Server 不再自動創(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),這樣 SQL Server 將假定沒有架構(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),必須將該表命名為 Schema1.Table1。沒有默認(rèn)預(yù)定義架構(gòu)的任何用戶都使用 dbo 作為默認(rèn)架構(gòu)。

在 SQL Server 2008 中,完全合格的對象名稱由4部分組成,這與舊版SQL Server 中的對象名稱類似:

server.database.schema.object

與舊版類似,如果對象所在服務(wù)器與運(yùn)行代碼的服務(wù)器同名,則可忽略服務(wù)器名稱。如果連接打開了同名數(shù)據(jù)庫,則可忽略數(shù)據(jù)庫名稱。如果使用當(dāng)前用戶的默認(rèn)架構(gòu)或架構(gòu)為 dbo 所擁有,則可忽略架構(gòu)名稱,因為這是 SQL Server 嘗試消除對象名稱歧義時最后用過的架構(gòu)。

可以利用 CREATE USER 語句而非 sp_adduser 語句創(chuàng)建新用戶。此系統(tǒng)存儲過程仍然是為了實現(xiàn)向后兼容性,但已進(jìn)行了少許修改,以遵循用戶與架構(gòu)分離的新原則。sp_adduser 創(chuàng)建的架構(gòu)與新用戶名或應(yīng)用程序角色同名,并將該架構(gòu)作為用戶的默認(rèn)架構(gòu),這與 SQL Server 2000 的行為類似,但提供了分離的架構(gòu)。

注意:使用 ALTER AUTHORIZATION 語句時,可能會產(chǎn)生這種情況:“您”擁有“我的”架構(gòu)中的表(或反之)。這個問題具有重大的隱含意義。例如,誰擁有該表的觸發(fā)器,您還是我?底部的代碼行可以設(shè)計得非常巧妙,以發(fā)現(xiàn)架構(gòu)范圍對象或類型的真正所有者。有兩種方式可以避開此問題:

利用 OBJECTPROPERTY(id,”O(jiān)wnerId”)發(fā)現(xiàn)對象的真正所有者。

利用 TYPEPROPERTY(type,”O(jiān)wnerId”)發(fā)現(xiàn)類型的真正所有者。

SQL Server 2008 利用同義詞幫助減少擊鍵次數(shù)。可以利用兩部分、三部分或四部分完整對象名為任何對象創(chuàng)建同義詞。SQL Server 使用同義詞訪問已定義的對象。在下列代碼中,“History”同義詞表示在AdventureWorks 數(shù)據(jù)庫中指定的 schema.table。SELECT 語句返回EmployeeDepartmentHistory 表的內(nèi)容。

USE AdventureWorks
GO

CREATE SYNONYM History FOR HumanResources.EmployeeDepartmentHistory

SELECT * FROM History

注意:如果其他人準(zhǔn)備使用同義詞,則管理員或所有者必須為其授予權(quán)限。針對視圖、表或表值函數(shù),可對同義詞應(yīng)用GRANT SELECT。針對過程或標(biāo)量函數(shù),可對同義詞應(yīng)用 GRANT EXECUTE,諸如此類。

也可通過以下代碼,為完整的四部分名稱定義“History”同義詞:

CREATE  SYNONYM History
FOR MyServer.AdventureWorks.HumanResources.EmployeeDepartmentHistory

 

假設(shè)當(dāng)前的用戶擁有使用同義詞的權(quán)限以及讀取表的權(quán)限,則使用類似的四部分全名即可在其他數(shù)據(jù)庫上下文中使用同義詞:

USE pubs
SELECT * FROM AdventureWorks..History

 

還要注意,如果不提供架構(gòu)名稱作為新同義詞名稱的一部分,它將成為默認(rèn)架構(gòu)的一部分。

【編輯推薦】

  1. SQL Server 2008數(shù)據(jù)集成服務(wù)簡介
  2. 在SQL Server 2008中管理報表服務(wù)
  3. 利用SQL Server 2008進(jìn)行自動化管理
責(zé)任編輯:yangsai 來源: MSDN
相關(guān)推薦

2009-04-16 17:34:19

2012-08-29 09:29:28

SQL Server

2009-02-16 13:21:25

數(shù)據(jù)挖掘SQL Server SQL Server

2009-02-16 16:10:49

安全審計安裝SQL Server

2011-03-18 10:27:00

SQL Server目錄索引

2011-08-19 11:26:41

SQL Server 主密鑰

2011-04-06 16:51:59

Windows Ser數(shù)據(jù)安全

2009-03-05 14:43:39

元數(shù)據(jù)管理SQL Server

2011-08-01 09:09:07

SQL Server SQL Server 數(shù)據(jù)庫

2013-03-13 09:53:50

SQL Server

2011-03-14 15:06:49

SQL Server 安全

2010-07-14 14:07:50

SQL Server

2010-09-13 10:21:26

sql server2

2011-08-16 18:29:45

SQL Server 數(shù)據(jù)貨場

2010-07-20 09:26:17

SQL Server

2010-07-02 14:52:21

SQL Server元

2009-04-16 18:15:19

動作審核審核活動SQL Server

2009-04-16 17:44:31

2011-03-29 12:42:25

SQL Server 高效性

2009-11-03 14:20:11

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91亚洲精品久久久电影 | 一级国产精品一级国产精品片 | 欧美一区二区三区在线观看 | 亚洲人人 | 日韩欧美一区二区三区四区 | 久久国产视频播放 | 999在线精品 | 国产精品成人一区 | 一区二区国产精品 | 黄色精品 | 天天爽天天操 | 91福利网址 | 国产欧美一区二区三区日本久久久 | 欧美一级一 | 黑人巨大精品欧美黑白配亚洲 | 亚洲欧美日韩精品久久亚洲区 | 东京久久 | 一级片免费在线观看 | 国产一区二区欧美 | 国产精品毛片 | 伊人在线视频 | 日本成人在线播放 | 福利精品 | 国产久| 欧美一区二区成人 | 黄色欧美在线 | 亚洲精品一区中文字幕乱码 | 欧美精品一区二区三区在线播放 | 91精品久久久久久久久久入口 | 成人在线视频免费观看 | 黄色一级免费 | 午夜视频网 | 亚洲视频一区在线观看 | 国产一区二区 | 亚洲精品一区久久久久久 | 国产精品久久久久无码av | 婷婷开心激情综合五月天 | 欧美精品一区二区在线观看 | 蜜桃精品视频在线 | 九九在线视频 | 欧美男人天堂 |