澄清为什么EXECUTE AS USER/LOGIN没有返回预期的结果?

ath*_*hom 14 sql sql-server ssms sql-server-2008 sql-server-2008-r2

我正在对数据库运行以下查询:

execute as user = 'domain\username'
select * from fn_my_permissions(null, 'DATABASE')
order by subentity_name, permission_name
revert;
Run Code Online (Sandbox Code Playgroud)

但是抛出以下错误:

Cannot execute as the database principal because the principal "dev\spadmin" does not exist, this type of principal cannot be impersonated, or you do not have permission.

用户是数据库的dbo,当我打开管理工作室中的属性时,我可以看到它与该登录相关联.EXECUTE AS LOGIN = 'domain\username'另一方面,Running 确实返回结果.如果我明确地运行EXECUTE AS USER = 'dbo',我会得到结果.我也有一个不同的数据库,其中同样的场景返回带有EXECUTE AS USER和的结果EXECUTE AS LOGIN.

在另一个使用不同用户的情况下,我已经跑了EXECUTE AS LOGIN = 'domain\username'但是我没有得到结果,但我确实得到了结果EXECUTE AS USER = 'domain\username'.

这些方案中的两个用户都与db_owner作为数据库成员的登录相关联.

谁能告诉我为什么这些查询没有返回我期望的结果?如果我遗漏了任何重要信息,请告诉我.谢谢!

RBa*_*ung 11

问题是因为Login domain\username是数据库的dbo,这意味着该数据库中相应User的名称是dbo不是 domain\username.

  • 然后问题可能是您的原始执行上下文缺少模拟用户的权限. (3认同)