如何设置对MSSQL 2005数据库邮件的访问?

时间:2008-12-31 16:46:22

标签: sql-server roles database-mail

我刚刚在MSSQL 2005中设置了数据库邮件。我已经能够从服务器上的管理员帐户和SQL Server代理作业发送电子邮件。但是,当我尝试通过只能访问我们的Web应用程序的数据库的登录信息发送电子邮件时,我无法发送电子邮件。

设置数据库邮件访问权限的最佳方法是什么?

我有2个senerios,我想发送电子邮件。

  1. 通过SQL Server代理安排作业以运行执行某些处理然后发送电子邮件的存储过程。 (这不是问题)
  2. 从调用另一个可以发送电子邮件的存储过程的Web应用程序调用存储过程。 (这是我的权限问题)
  3. 可能的解决方案

    1. 我发现授予登录权限的唯一方法是将登录信息映射到 msdb 数据库并授予公开 DatabaseMailUserRole中即可。这真的让我感到担忧,因为我认为这样可以访问 msdb 数据库。

    2. 将要发送的电子邮件存储在表中,然后每隔一段时间让SQL Server代理作业查看该表,以发送任何排队的电子邮件。这样,Web应用程序的数据库登录不会执行[msdb]。[dbo]。[sp_ send _dbmail]调用,因此不需要对 msdb 数据库的任何权限。

    3. 还有其他解决方案吗?

2 个答案:

答案 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

由于