我正在对数据库运行以下查询:
execute as user = 'domain\username'
select * from fn_my_permissions(null, 'DATABASE')
order by subentity_name, permission_name
revert;
但是会抛出以下错误:
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,当我在management studio中打开属性时,我可以看到它与该登录相关联。另一方面,运行EXECUTE AS LOGIN = 'domain\username'
会返回结果。如果我明确地运行EXECUTE AS USER = 'dbo'
,我会得到结果。我还有一个不同的数据库,其中同一场景返回EXECUTE AS USER
和EXECUTE AS LOGIN
的结果。
在另一个使用不同用户的情况下,我运行了EXECUTE AS LOGIN = 'domain\username'
但我没有得到结果,但我确实得到EXECUTE AS USER = 'domain\username'
的结果。
这些方案中的两个用户都与作为数据库db_owner
成员的登录相关联。
有人可以告诉我为什么这些查询没有返回我期望的结果吗?如果我遗漏了任何重要信息,请告诉我。谢谢!
答案 0 :(得分:11)
问题是因为登录domain\username
是数据库的dbo,也意味着该数据库中相应用户的名称是dbo
和< strong> 不 domain\username
。
答案 1 :(得分:1)
运行ALTER AUTHORIZATION ON DATABASE::[<yourdb>] TO [sa]
答案 2 :(得分:0)
我对我编写的存储过程有同样的错误。
我发现错误是由我在查询中指定数据库名称的方式引起的
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
命令。