Sql 服务器代理作业无法执行存储过程

Sql Server Agent job failing to execute stored procedure

我有一个可以在 SSMS 中使用非域 SQL 服务器用户执行的存储过程。

此存储过程从一个数据库 (DB1) 中的 table 中选择数据截断并选择到 DB2 中的 table 中。

用户拥有两个数据库的数据读取器、数据写入器和数据库所有者。

问题:

当我以用户身份通过​​ SS 代理执行存储过程时,出现以下错误

The server principal [user] is not able to access the database [DB1] under the current security context.

到目前为止采取的行动:

到目前为止,我已尝试通过以下方式解决此问题:

  1. 为两个数据库打开数据库链接
  2. 从 DB1 中删除用户并重新添加
  3. 使用 EXEC sp_change_users_login @Action=’Report’ 检查用户是否孤立。因为这是一个数据库,它是一个实时数据库的恢复。但是我在恢复后添加了用户。 用户未被列为孤儿

如果您不想让所有者成为 sa,一个可能的解决方法是让用户成为 msdb 的成员并授予 msdb 中的 SQLAgentOperatorRole。看看是否有效。

不过老实说,要么用sa,要么用权限足够的专用服务账号。如果作业在该上下文下运行会更好。