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'的主要内容,如果未能解决你的问题,请参考以下文章

调用PostgreSQL存储过程,找不到函数名的问题

Dapper 或 MySql 找不到包含句号“。”的存储过程。

从客户端调用 DB2 外部存储过程失败并显示 CPF9810

找不到 s-s-rS 报告的现有数据源

s-s-rS 2008 报告无法使用存储过程

调用存储过程时接收消息找不到对应的参数