Sql 澄清为什么“以用户身份执行/登录”未返回预期结果?
我正在对数据库运行以下查询:Sql 澄清为什么“以用户身份执行/登录”未返回预期结果?,sql,sql-server,sql-server-2008,sql-server-2008-r2,ssms,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,Ssms,我正在对数据库运行以下查询: execute as user = 'domain\username' select * from fn_my_permissions(null, 'DATABASE') order by subentity_name, permission_name revert; 但会引发以下错误: 无法作为数据库主体执行,因为主体“dev\spadmin”不存在,无法模拟此类型的主体,或者您没有权限。 用户是数据库的dbo,当我在ManagementStudio中打开属性时
execute as user = 'domain\username'
select * from fn_my_permissions(null, 'DATABASE')
order by subentity_name, permission_name
revert;
但会引发以下错误:
无法作为数据库主体执行,因为主体“dev\spadmin”不存在,无法模拟此类型的主体,或者您没有权限。
用户是数据库的dbo,当我在ManagementStudio中打开属性时,我可以看到它与该登录关联。另一方面,运行executeaslogin='domain\username'
会返回结果。如果我显式运行executeasuser='dbo'
,就会得到结果。我还有一个不同的数据库,在这个数据库中,相同的场景会返回executeasuser
和executeaslogin
的结果
在另一个使用不同用户的场景中,我运行了executeaslogin='domain\username'
,没有得到结果,但我确实使用executeasuser='domain\username'
得到了结果
这些场景中的两个用户都与数据库的db\u owner
成员的登录关联
有人能告诉我为什么这些查询没有返回我期望的结果吗?如果我遗漏了任何重要信息,请告诉我。谢谢 在数据库上运行
ALTER AUTHORIZATION::[]到[sa]
问题在于,因为登录名域\用户名
是数据库的dbo,这也意味着数据库中相应用户的名称是dbo
和而不是domain\username
我编写的存储过程也有相同的错误
我发现错误是由我在查询中指定数据库名称的方式引起的
SELECT emp_no
FROM db_name.employee
WHERE emp_no = 1234
当我从脚本中删除数据库名称时,我正在执行db_name2
上的过程
SELECT emp_no
FROM employee
WHERE emp_no = 1234
它工作得很好
我认为日志访问权限的减少不允许使用其他数据库或
use db_name
命令 我不希望更改数据库的任何内容,因为运行此查询的应用程序最终将在客户机上使用。我只想获得特定用户/登录名的权限,以确定其配置是否正确。除非我误解了这个查询实际上在做什么。让我困惑的是,executeasuser='domain\username'
在另一个数据库上工作,其中用户是dbo,而不是这个数据库。知道为什么吗?我猜他们以前是非DBO用户,后来成为数据库的所有者,但他们的旧用户条目被留下了。这是不应该发生的,但我确实看到了。我检查了两个用户之间的区别。executeasuser
查询未工作的用户的服务器角色为dbcreator、public和securityadmin。查询所在的用户具有所有服务器角色。一旦我赋予它与另一个用户相同的角色,我就得到了与另一个用户相同的结果。然后问题可能是您的原始执行上下文缺少模拟该用户的权限。