执行前检查sp_send_email权限

时间:2009-07-20 15:38:13

标签: sql-server email

在我的存储过程中,我使用sp_send_email发送电子邮件。我的存储过程将在不同的环境中运行;有些人会启用电子邮件,有些则不会。

如果我在没有启用sp_send_email的情况下运行它,我(非常正确)会收到此错误消息

  

SQL Server阻止访问组件“Database Mail XPs”的过程“dbo.sp_send_dbmail”,因为此组件已作为此服务器安全配置的一部分关闭。

我想检查是否先启用了电子邮件,因此我可以通过执行以下操作来避免错误:

IF @is_enabled
BEGIN
    EXEC sp_send_email ...
END

如何正确设置@is_enabled?

3 个答案:

答案 0 :(得分:5)

您可以查询sys.configurations

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

缺点是由于"MetaData Visibility"

,非系统管理员用户可能看不到它

答案 1 :(得分:0)

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs';
GO

sp_send_mail属于“Database Mail XPs”保护伞。您的应用程序可能无权运行sp_configureRECONFIGURE,因此如果您只是尝试调用sp_send_mail并处理错误,最终可能会更好。

答案 2 :(得分:-1)

BOL说:

要发送数据库邮件,用户必须是msdb数据库中的用户,并且是msdb数据库中DatabaseMailUserRole数据库角色的成员。要将msdb用户或组添加到此角色,请使用SQL Server Management Studio或对需要发送数据库邮件的用户或角色执行以下语句。

因此,您可以向用户提供适当的角色:

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>'; GO