sql-server - 从执行上下文中的存储过程调用 sp_send_dbmail
问题描述
使用 SQL-Server 2019;我正在尝试使用 sp_send_dbmail 并已成功从 SQL-Server 发送测试电子邮件,因此请相信配置很好。
sproc 在 SQL-Login 的执行上下文中运行,它更新数据库中的一些表,然后调用下面应该通过 msdb.dbo.sp_send_dbmail 发送电子邮件的 sproc。
CREATE PROCEDURE [dbo].[sp_SendEmail]
@emailAddress AS NVARCHAR(MAX),
@emailBody AS NVARCHAR(MAX),
@emailSubject AS NVARCHAR(150),
@attachmentPath AS NVARCHAR(255) = NULL,
@emailId AS INT OUTPUT
WITH EXECUTE AS N'Bob'
AS
BEGIN
SET NOCOUNT ON;
DECLARE @bSuccess AS INT = 0;
EXECUTE @bSuccess = [msdb].[dbo].[sp_send_dbmail]
@profile_name = N'Profile',
@recipients = @emailAddress,
@subject = @emailSubject,
@body = @emailBody,
@body_format = N'HTML',
@importance = N'High',
@file_attachments = @attachmentPath,
@mailitem_id = @emailId OUTPUT;
RETURN @bSuccess;
END
GO
当我运行存储过程时,我得到了错误:
消息 229,级别 14,状态 5,过程 msdb.dbo.sp_send_dbmail,第 1 行 [批处理开始第 2 行] 对象“sp_send_dbmail”、数据库“msdb”、架构“dbo”的执行权限被拒绝。
SQL-Login Bob 使用默认架构具有到 msdb 数据库的用户映射,并且是 DatabaseMailUserRole 角色的成员。
我已授予 Bob sp_send_dbmail securable 的执行权限,这似乎与 DatabaseMailUserRole 提供的内容重复,但仍然出现上述错误。
我很感激你能给我的任何见解。
解决方案
推荐阅读
- c# - 具有依赖注入的 DbProviderFactory
- c++ - 特征值设置为零所有接近零的值
- c# - 为什么此代码会引发 IndexOutOfBounds 错误?
- sockets - 通过侦听多个 UDP 套接字来避免数据包类型检查
- c# - 需要通过构造函数或其他方式从 Razor 过滤方法访问 HttpContext
- java - 获得焦点时如何从JSlider中删除虚线?
- javascript - 如何在没有点击事件的情况下使用 jQuery 查找具有动态更新的“活动”类的元素?
- c++ - 为什么禁止构建 istream?
- swift - 导航栏类似于项目的 Xcode/Swift 问题
- deployment - Android 设备未作为部署选项出现在 Visual Studio 2017 中