Проверка разрешения sp_send_email перед выполнением - PullRequest
0 голосов
/ 20 июля 2009

В своей хранимой процедуре я отправляю электронные письма с sp_send_email. Моя хранимая процедура будет выполняться в разных средах; для некоторых будет включена электронная почта, для некоторых - нет.

Если я запускаю sp_send_email без его включения, я (совершенно правильно) получаю это сообщение об ошибке

SQL Server заблокировал доступ к процедуре 'dbo.sp_send_dbmail' компонента 'Database Mail XPs', поскольку этот компонент отключен как часть конфигурации безопасности для этого сервера.

Я хочу сначала проверить, включена ли электронная почта, чтобы избежать ошибки, выполнив следующие действия:

IF @is_enabled
BEGIN
    EXEC sp_send_email ...
END

Как правильно установить @is_enabled?

Ответы [ 3 ]

5 голосов
/ 20 июля 2009

Вы можете запросить sys.configurations

IF EXISTS (SELECT *
       FROM sys.configurations
       WHERE name = 'Database Mail XPs' AND value_in_use = 1)
    PRINT 'enabled'
ELSE
    PRINT 'no luck'

Недостатком является то, что он может быть невидим для пользователей, не являющихся системными администраторами, из-за «Видимость метаданных»

0 голосов
/ 20 июля 2009
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs';
GO

sp_send_mail находится под зонтиком ' Database Mail XPs '. Ваше приложение может не иметь прав на запуск sp_configure и RECONFIGURE, поэтому в итоге вам может быть лучше, если вы просто попытаетесь вызвать sp_send_mail и обработать ошибку.

0 голосов
/ 20 июля 2009

BOL говорит:

Для отправки почты базы данных пользователи должны быть пользователем в базе данных msdb и членом роли базы данных DatabaseMailUserRole в базе данных msdb. Чтобы добавить пользователей или группы msdb в эту роль, используйте SQL Server Management Studio или выполните следующую инструкцию для пользователя или роли, которым требуется отправить Database Mail.

Итак, вы можете дать пользователю соответствующую роль:

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>'; GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...