EXECUTE AS 與 SETUSER
在 SQL Server 2005 中,可使用 EXECUTE AS 陳述式來明確地設定字串、命令或模組的執行內容。EXECUTE AS 取代了 SETUSER 陳述式。如需內容切換的詳細資訊,請參閱<瞭解內容切換>。
比較內容切換功能
與 SETUSER 陳述式相比,EXECUTE AS 具有下列優點:
- 除了 sa 或 dbo 之外,其他的伺服器或資料庫主體都可以呼叫 EXECUTE AS。
呼叫 EXECUTE AS 陳述式的使用者,必須要有目標主體的 IMPERSONATE 權限。
而 SETUSER 則侷限在系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色的成員。 - 模擬的範圍明確地定義在陳述式中。
所指定的主體可以指定成 LOGIN (伺服器層級模擬) 或指定成 USER (資料庫層級模擬)。
SETUSER 陳述式中的模擬範圍則不明確。如果系統管理員 (sysadmin) 的成員呼叫該陳述式,會使用伺服器層級模擬。而如果 dbo 帳戶呼叫該陳述式,則使用資料庫層級模擬。 - 該模擬會持續有效,直到發生下列其中一種情形:
- 工作階段已卸除。
- 內容被切換成其他登入或使用者。
- 內容被還原成先前的執行內容。
若是使用 SETUSER,則該模擬會持續有效,直到發生下列其中一種情形: - 發出另一個 SETUSER 陳述式。
- dbo 帳戶或系統管理員 (sysadmin) 固定伺服器角色的成員,使用 USE 陳述式變更了目前資料庫。
- 您可以跨越多重主體多次呼叫 EXECUTE AS 陳述式,以建立執行內容堆疊。呼叫此堆疊時,REVERT 陳述式會將內容切換成內容堆疊中,上一個層級的登入或使用者。如需詳細資訊,請參閱<EXECUTE AS (Transact-SQL)>。
SETUSER 則不容許建立執行內容堆疊。
還原至先前的內容
EXECUTE AS
使用 REVERT 陳述式即可返回先前的內容。REVERT 陳述式的呼叫者,必須位在發生模擬的相同資料庫中。
SETUSER
若要返回先前的內容,請使用 SETUSER 陳述式,但不要指定使用者名稱。
請參閱
概念
其他資源
內容切換
EXECUTE AS (Transact-SQL)
REVERT (Transact-SQL)
SETUSER (Transact-SQL)
sys.database_principals (Transact-SQL)
sys.server_principals (Transact-SQL)