共用方式為


EXECUTE AS 與 SETUSER

在 SQL Server 2005 中,可使用 EXECUTE AS 陳述式來明確地設定字串、命令或模組的執行內容。EXECUTE AS 取代了 SETUSER 陳述式。如需內容切換的詳細資訊,請參閱<瞭解內容切換>。

比較內容切換功能

與 SETUSER 陳述式相比,EXECUTE AS 具有下列優點:

  • 除了 sadbo 之外,其他的伺服器或資料庫主體都可以呼叫 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)

說明及資訊

取得 SQL Server 2005 協助