需求:
在作业步骤中使用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' 还是指定一个系统管理员用户即可