日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
修改SQLServer2005執(zhí)行環(huán)境實例演示

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

成都創(chuàng)新互聯(lián)公司是一家專注于網站設計制作、成都網站設計與策劃設計,蕉嶺網站建設哪家好?成都創(chuàng)新互聯(lián)公司做網站,專注于網站建設10年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:蕉嶺等地區(qū)。蕉嶺做網站價格咨詢:13518219792

在這個例子中,您會看到如何使用EXECUTE AS將沒有確切權限的使用者模擬為所有者對表格進行插入操作。

在第一行語句中,我使用了REVERT命令,這樣,您就可以完整地返回到例子中,而不必擔心需要清除任何對象。

 
 
 
  1. REVERT 
  2. GO 

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

 
 
 
  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 

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

 
 
 
  1. CREATE LOGIN [BaseUser] WITH PASSWORD=N'baseuser', 
  2. DEFAULT_DATABASE=[TRS], 
  3. CHECK_EXPIRATION=OFF, CHECK_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=OFF, CHECK_POLICY=OFF 
  10. GO 
  11. CREATE USER TableOwner FOR LOGIN TableOwner 
  12. GO 

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

 
 
 
  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命令,我將當前的SQL Server 2005執(zhí)行環(huán)境設定為TableOwner,在運行了這個命令之后,所有的權限評估將以TableOwner運行,而以前的系統(tǒng)管理員權限將不再適用。

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

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

 
 
 
  1. SELECT SESSION_USER 
  2. GO 

這個腳本將在TableOwnerSchema的模式中創(chuàng)建一個名為MyTable的表格,因為我已經賦予了該用戶CREATE TABLE 的權限,所以TableOwner可以執(zhí)行這條語句。

 
 
 
  1. CREATE TABLE TableOwnerSchema.MyTable 
  2. Field1 INT 
  3. GO 

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

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

現在我要對新的表格進行快速選擇以確認它的存在:

 
 
 
  1. SELECT * FROM TableOwnerSchema.MyTable 
  2. GO

以下的腳本創(chuàng)建了一個過程可以插入新的TableOwnerSchema.MyTable表格,注意我在過程定義中使用了WITH EXECUTE AS 'TableOwner'語句,這意味著該過程被執(zhí)行的時候,它將在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í)行權限賦予一個用戶賬戶,在這種情況下,我使用以前創(chuàng)建的名為BaseUser的用戶。

 
 
 
  1. GRANT EXEC ON usp_InsertMyTable TO BaseUser 
  2. GO 

接下來,我將SQL Server 2005執(zhí)行環(huán)境轉換為BaseUser并嘗試運行存儲過程:

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

現在我可以向TableSchema.MyTable表格中添加記錄了,因為在這個過程中TableOwner允許我這樣做,而BaseOwner并沒有明確的權限可以向該表格添加記錄,所以該用戶的任何嘗試都會導致錯誤的發(fā)生。為了演示這個問題,可以運行以下的腳本,該腳本改變了我們剛才的過程,改為運行在調用者的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

開發(fā)者和數據庫管理員會發(fā)現在執(zhí)行存儲過程的時候轉換權限非常有用,尤其是您處理TRUNCATE TABLE語句的時候,這個方法能幫上大忙,因為TRUNCATE TABLE并沒有可以指定的權限。您可以將權限賦予將要進行截取表格操作的用戶,然后在操作結束的時候再將原有的權限設定恢復就可以了。


分享名稱:修改SQLServer2005執(zhí)行環(huán)境實例演示
轉載來源:http://www.5511xx.com/article/cdjsgsi.html