中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

修改SQL Server 2005執(zhí)行環(huán)境

2018-06-11    來(lái)源:

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

執(zhí)行環(huán)境是SQL Server中設(shè)定用戶權(quán)限的認(rèn)證方式,例如,當(dāng)您登錄到SQL Server的時(shí)候,登錄賬戶就被賦予了一定的權(quán)限,其中可能包括登錄的功能、訪問(wèn)數(shù)據(jù)庫(kù)以及在數(shù)據(jù)庫(kù)中執(zhí)行某些操作的功能。

SQL Server 2005包含了EXECUTE AS語(yǔ)句,通過(guò)使用EXECUTE AS語(yǔ)句,您可以為批處理和過(guò)程轉(zhuǎn)換執(zhí)行環(huán)境,這樣,調(diào)用該批處理或過(guò)程的用戶就可以使用不同的權(quán)限來(lái)操作了。

所有權(quán)鏈

在我正式講解SQL Server 2005中執(zhí)行環(huán)境的問(wèn)題之前,先來(lái)簡(jiǎn)單地說(shuō)說(shuō)所有權(quán)鏈的工作原理。

當(dāng)用戶執(zhí)行一個(gè)存儲(chǔ)過(guò)程的時(shí)候(假定該用戶擁有執(zhí)行該存儲(chǔ)過(guò)程的權(quán)限),SQL Server將該存儲(chǔ)過(guò)程的所有者與這個(gè)存儲(chǔ)過(guò)程所涉及到的對(duì)象的所有者進(jìn)行對(duì)比,如果他們的所有者相同,那么就不必對(duì)這些引用對(duì)象的權(quán)限進(jìn)行評(píng)估了。

所以,如果用戶Tim獲得了存儲(chǔ)過(guò)程usp_ProcedureChain的權(quán)限,而usp_ProcedureChain存儲(chǔ)過(guò)程的所有者是dbo,那么,如果dbo還同時(shí)擁有usp_ProcedureChain所調(diào)用的其他存儲(chǔ)過(guò)程,那么Tim在執(zhí)行這個(gè)存儲(chǔ)過(guò)程的時(shí)候就不會(huì)出現(xiàn)錯(cuò)誤。

執(zhí)行環(huán)境的轉(zhuǎn)換

在SQL Server 2000中,您可以使用SETUSER命令來(lái)模擬SQL用戶的執(zhí)行環(huán)境,但問(wèn)題在于,只有系統(tǒng)管理員或者數(shù)據(jù)庫(kù)的所有者才能使用這個(gè)命令,而且Windows賬戶也不能使用該命令。

在SQL Server 2005中,EXECUTE AS語(yǔ)句可以替代SETUSER來(lái)改變存儲(chǔ)過(guò)程、觸發(fā)器、批處理或者函數(shù)的執(zhí)行環(huán)境。如果執(zhí)行環(huán)境變成了另外一個(gè)用戶,那么SQL Server將檢查該用戶的權(quán)限。如果您需要在創(chuàng)建或修改一個(gè)存儲(chǔ)過(guò)程或函數(shù)的時(shí)候指定EXECUTE AS語(yǔ)句,您需要具備IMPERSONATE的權(quán)限,以及創(chuàng)建該對(duì)象的權(quán)限。

實(shí)例

正如我剛才所介紹的一樣,改變存儲(chǔ)過(guò)程的執(zhí)行環(huán)境非常有用,接下來(lái)我將通過(guò)實(shí)例來(lái)講解如何實(shí)現(xiàn)這一功能。在這個(gè)例子中,您會(huì)看到如何使用EXECUTE AS將沒有確切權(quán)限的使用者模擬為所有者對(duì)表格進(jìn)行插入操作。

在第一行語(yǔ)句中,我使用了REVERT命令,這樣,您就可以完整地返回到例子中,而不必?fù)?dān)心需要清除任何對(duì)象。

REVERT

GO

在下面的代碼的第七行,我使用了清除語(yǔ)句,這樣可以檢查我在隨后的例子中要使用的對(duì)象是否已經(jīng)存在,如果已經(jīng)存在,就將其清除。

IF OBJECT_ID('usp_InsertMyTable','P')>0

DROP PROCEDURE usp_InsertMyTable

GO

IF OBJECT_ID('TableOwnerSchema.MyTable','U')>0

DROP TABLE TableOwnerSchema.MyTable

GO

IF EXISTS

(SELECT * FROM sys.schemas WHERE name = N'TableOwnerSchema')

DROP SCHEMA [TableOwnerSchema]

IF EXISTS

(SELECT * FROM sys.database_principals WHERE name = N'BaseUser')

DROP USER BaseUser

IF EXISTS

(SELECT * FROM sys.server_principals WHERE name = N'BaseUser')

DROP LOGIN BaseUser

IF EXISTS

(SELECT * FROM sys.database_principals WHERE name = N'TableOwner')

DROP USER TableOwner

IF EXISTS

(SELECT * FROM sys.server_principals WHERE name = N'TableOwner')

DROP LOGIN TableOwner

以下的腳本語(yǔ)句創(chuàng)建了兩個(gè)登錄名和數(shù)據(jù)庫(kù)的用戶賬戶,注意,CHECK_EXPIRATION和CHECK_POLICY語(yǔ)句,這兩條語(yǔ)句是SQL Server 2005中新出現(xiàn)的。這些語(yǔ)句告訴SQL Server不要對(duì)這個(gè)用戶賬戶強(qiáng)制執(zhí)行密碼截止期限策略,同時(shí)也不要進(jìn)行任何類型的密碼策略檢查,對(duì)于強(qiáng)制安全策略而言,這些是非常有效的方法。

CREATE LOGIN [BaseUser] WITH PASSWORD=N'baseuser',

DEFAULT_DATABASE=[TRS],

CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

CREATE USER [BaseUser] FOR LOGIN [BaseUser]

GO

CREATE LOGIN [TableOwner] WITH PASSWORD=N'tableowner',

DEFAULT_DATABASE=[TRS],

CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

CREATE USER TableOwner FOR LOGIN TableOwner

GO

在SQL Server 2005中,模式不再是和數(shù)據(jù)庫(kù)用戶相同的事情了,對(duì)于所包含的對(duì)象而言,它處于完全不同的名稱空間。用戶和模式的分離是SQL Server 2005中的一大進(jìn)步,這樣做使對(duì)象的所有權(quán)可以分離,而且比SQL Server 2000更易于管理,以下的語(yǔ)句創(chuàng)建了我們將要使用的數(shù)據(jù)庫(kù)模式:

CREATE SCHEMA [TableOwnerSchema] AUTHORIZATION [TableOwner]

GO

Now I enable logins so they can be used:

ALTER LOGIN [TableOwner] ENABLE

ALTER LOGIN [BaseUser] ENABLE

GO

GRANT CREATE TABLE TO TableOwner

GO

標(biāo)簽: 安全 代碼 腳本 權(quán)限 數(shù)據(jù)庫(kù) 問(wèn)題 用戶

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:Data Domain與昆騰就重復(fù)數(shù)據(jù)刪除展開合作

下一篇:微軟:要在網(wǎng)絡(luò)廣告領(lǐng)域獲成功