为什么我不能从正在作业中执行的存储过程中执行 msdb.dbo.send_dbmail?

Why can't I execute msdb.dbo.send_dbmail from a stored procedure being executed in a job?

我在我的服务器上安排了一项工作 运行。该作业执行一个存储过程。在该存储过程中,我正在执行 msdb.dbo.sp_send_dbmail。当我执行以管理员身份登录的存储过程时,它 运行 没问题。但是,当作业 运行s 时,它失败并出现以下错误:

Executed as user: AD\sql_server. Failed to initialize sqlcmd library with error number -2147467259. [SQLSTATE 42000](Error 22050). The step failed.

我试过修改存储过程并添加 WITH EXECUTE AS OWNER。当我这样做时,存储过程失败并出现以下错误:

Executed as user: AD\sql_server. The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'. [SQLSTATE 42000](Error 229). The step failed.

我需要做什么才能在执行 msdb.dbo.sp_send_dbmail 的作业中执行存储过程?

很遗憾,WITH EXECUTE AS OWNER 无法解决您的问题。

您可能需要将用户添加为内置数据库邮件角色的一部分,例如:

USE msdb;
EXEC sp_addrolemember 'DatabaseMailUserRole', 'AD\sql_server'

查看 this post