共用方式為


EXECUTE AS 與 SETUSER

在 SQL Server 中,可使用 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 陳述式,但不要指定使用者名稱。