2009-07-20 10 views
0

In meiner gespeicherten Prozedur sende ich E-Mails mit sp_send_email. Meine gespeicherte Prozedur wird in verschiedenen Umgebungen ausgeführt. Einige werden E-Mail aktiviert haben, andere nicht.Überprüfung der sp_send_email-Berechtigung vor der Ausführung

Wenn ich laufen sp_send_email ohne es aktiviert ist, ich (zu recht)

SQL Server Zugriff auf Prozedur ‚dbo.sp_send_dbmail‘ blockiert der Komponente ‚Database Mail XPs‘ diese Fehlermeldung erhalten, weil diese Komponente deaktiviert als Teil der Sicherheitskonfiguration für diesen Server.

Ich möchte überprüfen, ob E-Mailing zuerst aktiviert ist, so kann ich den Fehler vermeiden, indem Sie folgendermaßen vorgehen:

IF @is_enabled 
BEGIN 
    EXEC sp_send_email ... 
END 

Wie kann ich richtig @is_enabled eingestellt?

Antwort

4

können Sie abfragen sys.configurations

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

Der Nachteil ist, dass es nicht zu nicht-Sysadmin-Benutzer sichtbar sein können wegen "MetaData Visibility"

+0

+1 ja, eigentlich sys.configurations ist besser als sp_configure Ausgabe –

+0

BTW das Systemadministrator Problem kann durch Code-Signing der Prüfung angesprochen werden. –

+0

Oder entladen zu einer Startprozedur, die ein Flag in einer Benutzertabelle in einer Benutzerdatenbank setzt. Die Code-Signing-Idee ist jedoch nützlich. – gbn

-1

BOL sagt:

Database Mail zu senden, müssen die Benutzer ein Benutzer in der msdb-Datenbank und ein Mitglied der Databasedatenbankrolle in der msdb-Datenbank. Um msdb-Benutzer oder -Gruppen zu dieser Rolle hinzuzufügen, verwenden Sie SQL Server Management Studio oder führen Sie die folgende Anweisung für den Benutzer oder die Rolle aus, die Datenbank-Mail senden muss.

So können Sie Benutzer geben die entsprechende Rolle:

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

Das ist nicht, was, fragte ich. Ich möchte überprüfen, ob es aktiviert ist, und nur versuchen, zu senden, wenn es ist. Ich muss nicht wissen, wie ich es einrichten soll, da dies bereits auf den entsprechenden Servern geschehen wird. – harriyott

+0

aber es ist der erste Teil der Lösung. mit SELECT CURRENT_USER können Sie aktuellen Benutzernamen abrufen, und überprüfen Sie die Rolle dieses Benutzers mit sp_helpuser. Wenn er die Rolle DatabaseMailUserRole hat, kann dieser Benutzer E-Mails senden. –

+0

@Alex_L: das ist keine Antwort auf die Frage überhaupt. – gbn

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

Die sp_send_mail unter dem 'Database Mail XPs' Dach fällt. Ihre Anwendung verfügt möglicherweise nicht über die Rechte zum Ausführen von sp_configure und RECONFIGURE, so dass Sie am Ende möglicherweise besser sind, wenn Sie einfach versuchen, die sp_send_mail aufzurufen und den Fehler zu behandeln.

Verwandte Themen