【问题标题】:Sql Server Agent job failing to execute stored procedureSql Server 代理作业无法执行存储过程
【发布时间】:2015-06-25 15:18:19
【问题描述】:

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

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

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

问题:

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

服务器主体 [用户] 无法访问数据库 [DB1] 在当前的安全环境下。

目前采取的行动:

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

  1. 为两个数据库启用数据库链接
  2. 从 DB1 中删除用户并再次添加
  3. 使用EXEC sp_change_users_login @Action=’Report’ 检查用户是否孤立。因为这是一个还原实时数据库的数据库。但是我在还原后添加了用户。 用户未被列为孤立用户

【问题讨论】:

  • 你尝试作为调用者执行吗?
  • @Giorgi Nakeuri 添加了执行作为存储过程的调用者,但仍然无法通过 SSA 工作
  • 你最好在dba.stackexchange.com提问
  • @PeterCampbell,一个或另一个数据库对于登录上下文来说是不可信的。 ALTER DATABASE MyDatabase SET TRUSTWORTHY ON。
  • @PeterCampbell,唯一明显的另一件事是用户是否正确映射。用户映射应显示两个数据库。

标签: sql-server stored-procedures sql-server-2012 sql-server-agent


【解决方案1】:

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

但老实说,要么使用 sa,要么使用具有足够权限的专用服务帐户。如果作业在这种情况下运行会更好。

【讨论】:

  • 用户在 msdb 中已经有 SQLAgentOperatorRole,我同意 sa 可以工作,但是在这个实例上它被禁用了。
  • 设置一个专门的服务帐户从 SSA 作业中删除了本地用户并且该作业运行正常。
  • 试试这个.. 将 CONNECT 和 CONNECT REPLICATED 授予双方用户。
  • 很高兴专用服务帐户为您工作。它比本地用户更清洁。玩得开心,享受这一天
猜你喜欢
  • 1970-01-01
  • 2020-11-19
  • 2010-11-16
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多