Как настроить доступ к MSSQL 2005 Database Mail? - PullRequest
2 голосов
/ 31 декабря 2008

Я только что настроил почту базы данных в MSSQL 2005. Мне удалось отправить электронное письмо из учетной записи администратора на сервере и с помощью задания агента SQL Server. Но я не смог отправить электронное письмо, когда попытался отправить электронное письмо через логин, у которого есть доступ к базе данных нашего веб-приложения.

Каков наилучший способ настроить доступ к базе данных Mail?

У меня есть 2 отправителя, которым я хочу отправить электронное письмо.

  1. Запланируйте задание с помощью агента SQL Server для запуска хранимой процедуры, которая выполняет некоторый процесс и затем отправляет электронное письмо. (это не было проблемой)
  2. Запустить хранимую процедуру из веб-приложения, которое вызывает другую хранимую процедуру, которая может отправить электронное письмо. (это моя проблема с разрешениями)

Возможные решения

  1. Единственный способ, с помощью которого я разрешил вход в систему, - сопоставить имя входа с базой данных msdb и предоставить public и DatabaseMailUserRole . Это действительно касается меня, так как я предполагаю, что это дает большой доступ к базе данных msdb .

  2. Сохраните сообщение электронной почты, которое я хочу отправить, в таблицу, а затем попросите агента SQL Server периодически просматривать эту таблицу для отправки любых сообщений электронной почты, находящихся в очереди. Таким образом, вход в базу данных для веб-приложения не выполняет вызов [msdb]. [Dbo]. [Sp_ send _dbmail] и, следовательно, не требует каких-либо разрешений для базы данных msdb .

Есть ли другие решения?

Ответы [ 2 ]

1 голос
/ 31 декабря 2008

У вас должна быть возможность создать хранимую процедуру С опцией 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
0 голосов
/ 02 июня 2009

Я пытаюсь сделать то же самое, но выполняю

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

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...