你的位置:首页 > 数据库

[数据库]MSSQL_20160719_在作业步骤中使用sp_send_dbmail遇到的问题


需求:

在作业步骤中使用sp_send_dbmail发出邮件, 并将数据库中的日志表通过@query参数导出文本作为邮件附件

 

遇到错误:

服务器 DB-DWH-1,第 1 行  服务器主体 "NT AUTHORITY\SYSTEM" 无法在当前安全上下文下访问数据库 "DW"。 [SQLSTATE 42000] (错误 14661).  该步骤失败。

 

马上查了一下这个安全上下文的资料, 建议打开数据库trustworthy选项

 

到官网查了一下这个参数的资料, 该参数设定是否让实例信任数据库, 官方建议不打开因为防止数据库的恶意组件可以做出不安全的操作. 如下

 

Alter database set trustworthy on

 

https://support.microsoft.com/en-us/kb/2183687

 

由于我们是在自己的数据仓库服务器, 觉得打开也没太大问题, 就打开了试一下, 还是报同样的错误, 证明与给设置无关

开始查看sp_send_dbmail的参数指定好执行语句的数据库, 如下

 

 

 

还找到了一个声称可以让sp_send_dbmail在作业步骤中运行的人的记录

https://www.brentozar.com/archive/2014/10/send-query-results-sql-server-agent-job/

 

 

最终还是在stackoverflow中找到了解决办法, 是执行sp_send_dbmail的运行身份问题, 在执行前加上execute as login = 'sa' 还是指定一个系统管理员用户即可

 http://stackoverflow.com/questions/15112849/sp-send-dbmail-executed-from-job-fails-with-query-result-attached-as-file