s-s-rS 调用存储过程失败,找不到用户 'dbo'
Posted
技术标签:
【中文标题】s-s-rS 调用存储过程失败,找不到用户 \'dbo\'【英文标题】:s-s-rS call to stored procedure fails, Cannot find user 'dbo's-s-rS 调用存储过程失败,找不到用户 'dbo' 【发布时间】:2020-07-09 15:06:52 【问题描述】:我有一个 s-s-rS 报告正在调用我的数据库中的存储过程。
本地一切正常,我在本地连接 Windows 身份验证以访问数据库,没有问题。
部署 s-s-rS 报告时,它设置为使用不同的登录名,并且此登录名具有正确的角色来授予对存储过程的执行权限。但是,当尝试在 s-s-rS 服务器上查看报告时,我收到以下消息:
找不到用户“dbo”,因为它不存在或者您没有权限。
如果我删除允许授予执行权限的角色,我会收到一个更具体的错误,指出我没有执行存储过程的权限。但是一旦这个角色被放回到用户帐户上,s-s-rS 就会在返回时运行,然后显示错误
找不到用户'dbo'
我拥有的被授予执行权限的角色由“dbo”用户授予,这是数据库所有者。我在网上发现了一些事情,说数据库备份可能会弄乱一些用户登录。我查了一下,数据库所有者 sid 与 name = 'dbo' 的 sysuser sid 相同,所以我认为这不是问题。
还有其他人知道我可以尝试什么吗?
编辑:存储过程的详细信息:这是一个带有一些内部连接的简单选择。 在存储过程的最后,授予对我的 s-s-rS 用户所属角色的访问权限:
GRANT EXECUTE
ON OBJECT::[dbo].[Application_LoadData] TO [s-s-rSUserRole]
AS [dbo];
【问题讨论】:
可能在存储过程中。你能简化并发布一个复制品吗? sproc 并不疯狂,在底部它授予 s-s-rS 用户使用的用户角色对该 sproc 的访问权限。 API 中使用了相同的存储过程,以相同的用户身份运行,并且在那里工作。我不确定为什么 s-s-rS 报告失败了。 “在存储过程的末尾是以下内容,授予对我的 s-s-rS 用户所属角色的访问权限:” - 此授权是否在存储过程中? 【参考方案1】:存储过程包括 CREATE PROCEDURE 之后批处理中的所有语句。所以像这样的过程
CREATE PROCEDURE USP_FOO
AS
BEGIN
SELECT * FROM FOO
END
GRANT EXECUTE ON USP_FOO TO SOMEUSER AS DBO;
每次运行过程都会尝试执行到 GRANT,如果不被 dbo 运行则会失败。
创建程序的脚本在授权之前应该有一个批处理分隔符。例如:
CREATE PROCEDURE USP_FOO
AS
BEGIN
SELECT * FROM FOO
END
GO
GRANT EXECUTE ON USP_FOO TO SOMEUSER AS DBO;
【讨论】:
我会在我的 END 之后和 Grant Execute 之前加上“GO”,看看是否可行 做到了!我在 Grant Execute 部分之前添加了“GO”,现在它可以工作了。非常感谢以上是关于s-s-rS 调用存储过程失败,找不到用户 'dbo'的主要内容,如果未能解决你的问题,请参考以下文章
Dapper 或 MySql 找不到包含句号“。”的存储过程。