我刚刚在MSSQL 2005中设置了数据库邮件。我已经能够从服务器上的管理员帐户和SQL Server代理作业发送电子邮件。但是,当我尝试通过只能访问我们的Web应用程序的数据库的登录信息发送电子邮件时,我无法发送电子邮件。
设置数据库邮件访问权限的最佳方法是什么?
我有2个senerios,我想发送电子邮件。
可能的解决方案
我发现授予登录权限的唯一方法是将登录信息映射到 msdb 数据库并授予公开和 DatabaseMailUserRole中即可。这真的让我感到担忧,因为我认为这样可以访问 msdb 数据库。
将要发送的电子邮件存储在表中,然后每隔一段时间让SQL Server代理作业查看该表,以发送任何排队的电子邮件。这样,Web应用程序的数据库登录不会执行[msdb]。[dbo]。[sp_ send _dbmail]调用,因此不需要对 msdb 数据库的任何权限。
还有其他解决方案吗?
答案 0 :(得分:1)
您应该能够创建存储过程 WITH EXECUTE AS OWNER 选项,以便它在所有者而不是调用者的上下文中运行。
CREATE PROCEDURE [dbo].[sp_SendMail]
(
@To nvarchar(1000),
@Subject nvarchar(100),
@Body nvarchar(max)
)
WITH EXECUTE AS OWNER
AS
BEGIN
exec msdb.dbo.sp_send_dbmail @profile_name = 'MailProfile',
@recipients = @To,
@subject = @Subject,
@body = @Body
END
答案 1 :(得分:0)
我正在尝试执行相同的操作
GRANT EXECUTE ON dbo.sp_SendMail TO User1
并未解决此问题。只有让这个程序工作的东西才不是添加
EXECUTE AS OWNER
(我只使用“WITH ENCRYPTION”创建它)并将运行此过程的用户添加到msdb DatabaseMailUserRole角色:
USE msdb
GO
EXEC sp_adduser @loginame='USERNAME', @grpname='DatabaseMailUserRole'
GO
由于