SQL Server执行模拟

JBo*_*one 8 sql impersonation sql-server-2005 sql-server-2008

......之间的差异是什么?

execute as user = 'testuser'
Run Code Online (Sandbox Code Playgroud)

execute as login = 'testuser'
Run Code Online (Sandbox Code Playgroud)

我正在这些登录下执行跨数据库过程,它使用exececute作为登录,但不作为执行用户.它说服务器主体"testuser"不能在安全上下文下访问数据库"xxx".

当我SELECT SYSTEM_USER在两个命令之后,我看到它被设置为'testuser'

gor*_*ric 11

execute as login由于登录位于服务器级别,因此会为整个服务器提供模拟.由于用户是按数据库定义的,因此execute as user模拟仅适用于特定数据库,这就是您跨数据库时看到错误的原因.