存储过程权限问题

时间:2010-05-26 11:40:56

标签: sql-server sql-server-2008

我已将一组SQL 2000数据库迁移到SQL 2008.大多数都运行良好,但我有一些存储过程由SQL Server代理作业调度和运行,这给我带来了麻烦。 许多计划的存储过程都有效,但访问默认数据库以外的数据库的存储过程失败,并显示以下消息:

以用户身份执行:XYZ \ YadaYada。服务器主体:“XYZ \ YadaYada”无法访问当前安全上下文下的数据库“MyOtherDatabaseOnSameServer”。 [SQL STATE 08004](错误619)步骤失败。

显然,我更改了名字以保护有罪。

该帐户是所有相关数据库中的用户,并且是db_owner,db_datareader和db_datawriter的成员。

当我使用相同的帐户从SMS的查询窗口运行这些相同的程序时(我尝试了很多),它们工作正常。

我错过了什么?

3 个答案:

答案 0 :(得分:0)

你可能会看到的东西:

  • 谁是这份工作的老板?
  • 在哪个用户下运行sql-agent用户?

答案 1 :(得分:0)

这看起来像是跨数据库所有权链接问题。

检查:

  • SQL Server允许跨数据库所有权链接
  • 所涉及的每个数据库都启用了跨数据库所有权链接。
  • 用户XYZ \ YadaYada是MyOtherDatabaseOnSameServer的注册用户。
  • 存储过程的所有者与MyOtherDatabaseOnSameServer中保存的对象的所有者相同。

希望有所帮助。

答案 2 :(得分:0)

迁移用户时,您是再次设置用户还是只是从恢复/附加操作中获取用户?

您可能需要在相关数据库上运行exec sp_change_users_login 'Auto_Fix', '<username>',其中<username>是用户的实际名称。