自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

修改SQL Server 2005執(zhí)行環(huán)境實(shí)例演示

數(shù)據(jù)庫(kù) SQL Server
以下的文章主要描述的是正確對(duì)SQL Server 2005執(zhí)行環(huán)境進(jìn)行修改是實(shí)際操作的實(shí)例演示,以下就是正文的主要內(nèi)容的詳細(xì)解析。

此文主要是介紹正確對(duì)SQL Server 2005執(zhí)行環(huán)境進(jìn)行修改是實(shí)際操作的實(shí)例演示,正如我上一篇文章里所介紹的一樣,改變存儲(chǔ)過(guò)程的SQL Server 2005數(shù)據(jù)庫(kù)的執(zhí)行環(huán)境非常有用,接下來(lái)我將通過(guò)實(shí)例來(lái)講解如何實(shí)現(xiàn)這一功能。

在這個(gè)例子中,您會(huì)看到如何使用EXECUTE AS將沒(méi)有確切權(quán)限的使用者模擬為所有者對(duì)表格進(jìn)行插入操作。

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

  1. REVERT   
  2. GO   

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

 

  1. IF OBJECT_ID('usp_InsertMyTable','P')>0   
  2. DROP PROCEDURE usp_InsertMyTable   
  3. GO   
  4. IF OBJECT_ID('TableOwnerSchema.MyTable','U')>0   
  5. DROP TABLE TableOwnerSchema.MyTable   
  6. GO   
  7. IF EXISTS   
  8. (SELECT * FROM sys.schemas WHERE name = N'TableOwnerSchema')   
  9. DROP SCHEMA [TableOwnerSchema]   
  10. IF EXISTS   
  11. (SELECT * FROM sys.database_principals WHERE name = N'BaseUser')   
  12. DROP USER BaseUser   
  13. IF EXISTS   
  14. (SELECT * FROM sys.server_principals WHERE name = N'BaseUser')   
  15. DROP LOGIN BaseUser   
  16. IF EXISTS   
  17. (SELECT * FROM sys.database_principals WHERE name = N'TableOwner')   
  18. DROP USER TableOwner   
  19. IF EXISTS   
  20. (SELECT * FROM sys.server_principals WHERE name = N'TableOwner')   
  21. DROP LOGIN TableOwner   

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

 

  1. CREATE LOGIN [BaseUser] WITH PASSWORD=N'baseuser',   
  2. DEFAULT_DATABASE=[TRS],   
  3. CHECK_EXPIRATION=OFFCHECK_POLICY=OFF   
  4. GO   
  5. CREATE USER [BaseUser] FOR LOGIN [BaseUser]   
  6. GO   
  7. CREATE LOGIN [TableOwner] WITH PASSWORD=N'tableowner',   
  8. DEFAULT_DATABASE=[TRS],   
  9. CHECK_EXPIRATION=OFFCHECK_POLICY=OFF   
  10. GO   
  11. CREATE USER TableOwner FOR LOGIN TableOwner   
  12. GO   

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

 

  1. CREATE SCHEMA [TableOwnerSchema] AUTHORIZATION [TableOwner]   
  2. GO   
  3. Now I enable logins so they can be used:   
  4. ALTER LOGIN [TableOwner] ENABLE   
  5. ALTER LOGIN [BaseUser] ENABLE   
  6. GO   
  7. GRANT CREATE TABLE TO TableOwner   
  8. GO   

首先,我使用了EXECUTE AS命令,我將當(dāng)前的SQL Server 2005執(zhí)行環(huán)境設(shè)定為T(mén)ableOwner,在運(yùn)行了這個(gè)命令之后,所有的權(quán)限評(píng)估將以TableOwner運(yùn)行,而以前的系統(tǒng)管理員權(quán)限將不再適用。

  1. EXECUTE AS USER = 'TableOwner'   
  2. GO   

運(yùn)行這個(gè)語(yǔ)句就能夠表明現(xiàn)在的SQL Server 2005執(zhí)行環(huán)境是TableOwner:

 

  1. SELECT SESSION_USER   
  2. GO   

這個(gè)腳本將在TableOwnerSchema的模式中創(chuàng)建一個(gè)名為MyTable的表格,因?yàn)槲乙呀?jīng)賦予了該用戶(hù)CREATE TABLE 的權(quán)限,所以TableOwner可以執(zhí)行這條語(yǔ)句。

 

  1. CREATE TABLE TableOwnerSchema.MyTable   
  2. (   
  3. Field1 INT   
  4. )   
  5. GO   

當(dāng)我運(yùn)行REVERT語(yǔ)句的時(shí)候,可以在SQL Server 2005執(zhí)行環(huán)境鏈中回退一步,在SQL Server 2005中,執(zhí)行環(huán)境是可以嵌套的,所以如果您在同一個(gè)數(shù)據(jù)庫(kù)連接中有很多用戶(hù)在運(yùn)行,您可能需要多次執(zhí)行該語(yǔ)句以返回到原始的登錄環(huán)境。

 

  1. REVERT   
  2. GO   
  3. SELECT SESSION_USER   
  4. GO   

現(xiàn)在我要對(duì)新的表格進(jìn)行快速選擇以確認(rèn)它的存在:

 

  1. SELECT * FROM TableOwnerSchema.MyTable   
  2. GO  

以下的腳本創(chuàng)建了一個(gè)過(guò)程可以插入新的TableOwnerSchema.MyTable表格,注意我在過(guò)程定義中使用了WITH EXECUTE AS 'TableOwner'語(yǔ)句,這意味著該過(guò)程被執(zhí)行的時(shí)候,它將在TableOwner的執(zhí)行環(huán)境中被執(zhí)行。

 

  1. CREATE PROCEDURE usp_InsertMyTable   
  2. WITH EXECUTE AS 'TableOwner'   
  3. AS   
  4. BEGIN   
  5. INSERT INTO TableOwnerSchema.MyTable(Field1)VALUES(8)   
  6. END   
  7. GO   

我還可以將執(zhí)行權(quán)限賦予一個(gè)用戶(hù)賬戶(hù),在這種情況下,我使用以前創(chuàng)建的名為BaseUser的用戶(hù)。

 

  1. GRANT EXEC ON usp_InsertMyTable TO BaseUser   
  2. GO   

接下來(lái),我將SQL Server 2005執(zhí)行環(huán)境轉(zhuǎn)換為BaseUser并嘗試運(yùn)行存儲(chǔ)過(guò)程:

 

  1. EXECUTE AS USER = 'BaseUser'   
  2. GO   
  3. EXEC usp_InsertMyTable   
  4. GO   

現(xiàn)在我可以向TableSchema.MyTable表格中添加記錄了,因?yàn)樵谶@個(gè)過(guò)程中TableOwner允許我這樣做,而B(niǎo)aseOwner并沒(méi)有明確的權(quán)限可以向該表格添加記錄,所以該用戶(hù)的任何嘗試都會(huì)導(dǎo)致錯(cuò)誤的發(fā)生。為了演示這個(gè)問(wèn)題,可以運(yùn)行以下的腳本,該腳本改變了我們剛才的過(guò)程,改為運(yùn)行在調(diào)用者的SQL Server 2005執(zhí)行環(huán)境中。

 

  1. REVERT   
  2. GO   
  3. ALTER PROCEDURE usp_InsertMyTable   
  4. AS   
  5. BEGIN   
  6. INSERT INTO TableOwnerSchema.MyTable(Field1)VALUES(8)   
  7. END   
  8. GO   
  9. EXECUTE AS USER = 'BaseUser'   
  10. GO   
  11. EXEC usp_InsertMyTable   
  12. GO   
  13. REVERT  

開(kāi)發(fā)者和數(shù)據(jù)庫(kù)管理員會(huì)發(fā)現(xiàn)在執(zhí)行存儲(chǔ)過(guò)程的時(shí)候轉(zhuǎn)換權(quán)限非常有用,尤其是您處理TRUNCATE TABLE語(yǔ)句的時(shí)候,這個(gè)方法能幫上大忙,因?yàn)門(mén)RUNCATE TABLE并沒(méi)有可以指定的權(quán)限。您可以將權(quán)限賦予將要進(jìn)行截取表格操作的用戶(hù),然后在操作結(jié)束的時(shí)候再將原有的權(quán)限設(shè)定恢復(fù)就可以了。

【編輯推薦】

  1. SQL Server選擇索引之查詢(xún)VS 的性能修改
  2. SQL Server非聚集索引概述
  3. 用SQL Server索引密度對(duì)行數(shù)進(jìn)行評(píng)估
  4. 關(guān)于SQL Server索引密度的知識(shí)
  5. SQL Server索引直方圖的內(nèi)容描述
責(zé)任編輯:佚名 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2010-06-30 13:19:17

SQL Server

2010-07-16 14:17:18

SQL Server

2010-07-20 17:36:55

SQL Server

2010-07-06 15:22:00

SQL Server

2010-07-16 09:57:44

SQL Server

2010-09-03 10:40:30

SQL刪除

2010-07-05 15:04:36

SQL Server刪

2010-07-21 09:50:12

SQL Server子

2010-06-18 10:25:49

SQL Server

2011-07-06 13:09:11

SQL Server

2010-09-09 16:10:57

sql server2循環(huán)

2010-07-14 10:03:40

SQL Server

2010-06-28 11:00:46

SQL Server

2010-07-09 14:30:56

SQL Server

2010-07-22 09:33:45

SQL Server全

2009-10-23 10:08:29

SQL SERVER

2011-08-22 09:55:30

SQL Server 排序

2009-12-02 16:41:33

Visual Stud

2011-04-06 13:04:35

SQL Server 密碼修改

2010-07-09 15:31:25

SQL Server
點(diǎn)贊
收藏

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