SSRS 调用存储过程失败,找不到用户“dbo”

Kev*_*vin 2 sql-server reporting-services

我有一个 SSRS 报告正在调用我的数据库中的存储过程。

本地一切正常,我在本地连接 Windows 身份验证以访问数据库,没有任何问题。

部署 SSRS 报告后,它被设置为使用不同的登录名,并且该登录名具有正确的角色来授予对存储过程的执行权限。但是,当尝试查看 SSRS 服务器上的报告时,我收到以下消息:

找不到用户“dbo”,因为它不存在或您没有权限。

如果我删除允许授予执行权限的角色,我会收到更具体的错误,指出我没有执行存储过程的权限。但是,一旦将此角色放回到用户帐户上,SSRS 就会在返回时运行并显示错误

找不到用户“dbo”

我所拥有的被授予执行权限的角色是由“dbo”用户授予的,这是数据库所有者。我在网上发现一些内容说数据库备份可能会弄乱某些用户登录。我已经检查过,数据库所有者 sid 与 name = 'dbo' 的 sysuser sid 相同,所以我不认为这是问题所在。

有其他人知道我可以尝试什么吗?

编辑:有关存储过程的详细信息:它是一个带有一些内部联接的简单选择。存储过程的末尾如下所示,授予对我的 SSRS 用户所属角色的访问权限:

GRANT EXECUTE
    ON OBJECT::[dbo].[Application_LoadData] TO [SSRSUserRole]
    AS [dbo];
Run Code Online (Sandbox Code Playgroud)

Dav*_*oft 6

存储过程包括批处理中 CREATE PROCEDURE 之后的所有语句。所以像这样的过程

CREATE PROCEDURE USP_FOO
AS
BEGIN
  SELECT * FROM FOO
END

GRANT EXECUTE ON USP_FOO TO SOMEUSER AS DBO;
Run Code Online (Sandbox Code Playgroud)

每次运行该过程时都会尝试执行 GRANT,并且在不由 dbo 运行时会失败。

创建过程的脚本应该在授权之前有一个批分隔符。例如:

CREATE PROCEDURE USP_FOO
AS
BEGIN
  SELECT * FROM FOO
END

GO

GRANT EXECUTE ON USP_FOO TO SOMEUSER AS DBO;
Run Code Online (Sandbox Code Playgroud)