Benutzer mit den meisten Antworten
E-Mail mit Anlage über sp_send_dbmail versenden - Berechtigungsproblem

Frage
-
Hallo Zusammen,
ich möchte gerne Mails über sp_send_dbmail versenden. Das ging auch bisher sehr gut. Bis wir nun ein NAS eingeführt haben und die Files nicht mehr auf dem Rechner lieben auf dem die Datenbank ausgeführt wird. Die OH zu Datenbankemail schreibt das auch:
"Windows lässt nicht zu, dass SQL Server Anmeldeinformationen von einem Remotecomputer für einen anderen Remotecomputer bereitstellt. Aus diesem Grund kann Datenbank-E-Mail möglicherweise Dateien aus einer Netzwerkfreigabe nicht anfügen, wenn der Befehl von einem anderen Computer als dem Computer mit SQL Server ausgeführt wird."
Aber gibt es dazu einen Workaround? Ich habe jetzt schon ne Menge Zeit investiert um dieses Datenbankemail zum Laufen zu bekommen und es wäre schon ärgerlich, wenn ich jetzt hieran scheitern würde.
Vielen Dank für Eure Hilfe.
Viele Grüße
Patrick
Antworten
-
Hallo Olaf,
ich will den SQL Server ja auch garnicht als EMailserver mißbrauchen, dazu habe ich ja Exchange. Dennoch gibt es gerade in Datenbanken - zumindest in meiner - den Bedarf E-Mails mit Anlage zu versenden. Und da SQL hierzu einen Dienst bietet, habe ich eben darauf aufgesetzt. Offensichtlich ist sp_send_dbmail aber dazu dann doch eher ungeeignet.
Wie auch immer, ich habe mir jetzt so geholfen, dass ich die entsprechenden Anlagen vorher über VBA auf ein lokales Laufwerk des SQL Servers kopiere, dann versende und anschließend wieder auf dem Server lösche. Ein Workaround eben, aber es geht.
Allerdings muss ich Dir wiedersprechen:
"Wenn hingegen die Anmeldung an den SQL Server über die Windows Authentifizierung erfolgt, dann wird (versucht) eben über diesen Windows Account auf die Netzwerkresource zuzugreifen, um die Datei als Attachment zu laden. Nur wenn der Windows Account ausreichend Rechte hierzu hat, funktioniert es."
trifft so nicht zu. Die Anmeldung an unseren SQL Server erfolgt über die WIndows Authentifizierung. Dennoch - oder gerade deshalb - klappt es nicht. Mein Account hat selbstverständlich die Reste auf das NAs zuzugreifen. Sonnst würde das kopieren über VBA ja auch nicht klappen. Aber die Rechte scheinen nicht von mir durchgereicht zu werden.l
Viele Grüße
Patrick
- Als Antwort markiert Patrick Pohlmann Mittwoch, 30. November 2011 07:25
Alle Antworten
-
"Windows lässt nicht zu, dass SQL Server Anmeldeinformationen von einem Remotecomputer für einen anderen Remotecomputer bereitstellt. Aus diesem Grund kann Datenbank-E-Mail möglicherweise Dateien aus einer Netzwerkfreigabe nicht anfügen, wenn der Befehl von einem anderen Computer als dem Computer mit SQL Server ausgeführt wird."
Hallo Patrick,wie nicht nur ich Dir im letzten Thread gesagt haben, ist der SQL Server nicht als Email-Server gedacht; sondern eben als SQL Server.
Was Du beim Zitat weg gelassen hattest, ist dieser Part: "Datenbank-E-Mail verwendet den Microsoft Windows-Sicherheitskontext des aktuellen Benutzers, um den Dateizugriff zu steuern"
Zusammen mit dem Rest bedeutet es:
Erfolgt die Anmeldung des User über eine SQL Account, kann auf kein Share etc zugegriffen werden, um Datei als Attachement anzufügen.
Wenn hingegen die Anmeldung an den SQL Server über die Windows Authentifizierung erfolgt, dann wird (versucht) eben über diesen Windows Account auf die Netzwerkresource zuzugreifen, um die Datei als Attachment zu laden. Nur wenn der Windows Account ausreichend Rechte hierzu hat, funktioniert es.Fazit: Einen "Workaround" gibt es nicht, es funktioniert nur dann, wenn man es so wie vorgegeben macht, eben das der User, der Emails versenden will, sich per Windows Account anmeldet und somit auch den Filezugriff authorisiert.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Hallo Olaf,
ich will den SQL Server ja auch garnicht als EMailserver mißbrauchen, dazu habe ich ja Exchange. Dennoch gibt es gerade in Datenbanken - zumindest in meiner - den Bedarf E-Mails mit Anlage zu versenden. Und da SQL hierzu einen Dienst bietet, habe ich eben darauf aufgesetzt. Offensichtlich ist sp_send_dbmail aber dazu dann doch eher ungeeignet.
Wie auch immer, ich habe mir jetzt so geholfen, dass ich die entsprechenden Anlagen vorher über VBA auf ein lokales Laufwerk des SQL Servers kopiere, dann versende und anschließend wieder auf dem Server lösche. Ein Workaround eben, aber es geht.
Allerdings muss ich Dir wiedersprechen:
"Wenn hingegen die Anmeldung an den SQL Server über die Windows Authentifizierung erfolgt, dann wird (versucht) eben über diesen Windows Account auf die Netzwerkresource zuzugreifen, um die Datei als Attachment zu laden. Nur wenn der Windows Account ausreichend Rechte hierzu hat, funktioniert es."
trifft so nicht zu. Die Anmeldung an unseren SQL Server erfolgt über die WIndows Authentifizierung. Dennoch - oder gerade deshalb - klappt es nicht. Mein Account hat selbstverständlich die Reste auf das NAs zuzugreifen. Sonnst würde das kopieren über VBA ja auch nicht klappen. Aber die Rechte scheinen nicht von mir durchgereicht zu werden.l
Viele Grüße
Patrick
- Als Antwort markiert Patrick Pohlmann Mittwoch, 30. November 2011 07:25
-
Hi,
ich will den SQL Server ja auch garnicht als EMailserver mißbrauchen,
Dennoch gibt es gerade in Datenbanken - zumindest in meiner - den Bedarf E-Mails mit Anlage zu versenden.
Den Bedarf gibt es zwar. Dennoch kann man nur davon abraten, das so zu machen.Und da SQL hierzu einen Dienst bietet, habe ich eben darauf aufgesetzt. Offensichtlich ist sp_send_dbmail aber dazu dann doch eher ungeeignet.
Mehr als ungeeignet. IMHO.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Patrick,
Du sollst das ja auch gar nicht aus SQL heraus nutzen. Leg dir eine Job Tabelle an, schreib einen Windows Dienst und lass den die Arbeit machen.
[Jobs]
ID
...
Status
[JobDetails]
ID
JobId
Empfaenger
Betreff
Nachricht
Anlagen
Status
Dort schreibst Du dann das rein, was per Mail versendet werden soll. Der Dienst liest die Daten aus und versendet die Emails.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Dennoch gibt es gerade in Datenbanken - zumindest in meiner - den Bedarf E-Mails mit Anlage zu versenden. Und da SQL hierzu einen Dienst bietet, habe ich eben darauf aufgesetzt. Offensichtlich ist sp_send_dbmail aber dazu dann doch eher ungeeignet.
Hallo Patrick,sp_send_dbmail ist schon ein geeignetes Mittel und zwar für das, wofür es gedacht ist; z.B. Benachrichtigungen über Jobausführungen inkl dem Ergebnis zu versenden, Mails bei Fehler oder Abfrageergebnissen und so weiter. Ich benutze es auch viel und gerne, z.B. bekomme ich jeden Morgen eine Mail mit Statusinformationen zugesendet; funktioniert hervorragend.
Nur für das, was Du wohl vorhast ist es nicht geeignet. Die anderen Einschränkungen hattest Du auch gelesen, z.B. das die Anhänge nicht größer als 1 MB sein dürfen?
P.S.: Wenn Du eh noch Dateien per VBA umkopierst, warum sendest Du die Email nicht auch mit VBA oder erstelle ein PowerShell Skript, das alles auf einmal erledigt.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Bearbeitet Olaf HelperMVP Mittwoch, 30. November 2011 15:51
-
Hallo Stefan,
ja, das würde ich gerne so lösen. Nur stoße ich da leider mit meinem Kenntnissen an Grenzen. Es fängt schon damit an, dass ich keine Ahnung habe, wie ich einen Windows Dienst schreiben kann. Ich vermute, dass ist kein Hexenwerk, aber leider fehlt mir der Ansatz. Und dann wüsste ich wiederum nicht wie ich diesem Dienst sagen kann dass der die Tabelle abarbeiten soll. Ich habe zum Thema Mailversand aus MS-SQL leider auch nichts anders im Netz gefunden als zahlreiche Hinweise auf sp_send_dbmail.
Deshalb hatte ich auch diesen Ansatz gewählt. Leider ist dies tatsächlich wohl nicht der Richtige. (Ja, Olf, die Anlagenbeschrenkung habe ich geslesen, hatte aktuell noch kein problem damit, aber sicherlich wird das irgendwann auch zu Problemen führen.)
Was ich nun bräuchte wäre eine konkrete Vorlage wie ich diese Daten - die ich ja sehr einfach in eien Tabelle schrieben könnte - über den Server versenden kann.
Es wäre super wenn mir hier jemand helfen könnte.
Viele Grüße
Patrick
-
Hallo Olaf, bei den Attachments muss ich jetzt mal einhaken. Man kann die maximal zulässige Größe konfigurieren. Standard ist 1 MB.
-- Hiermit werden 15 MB erlaubt EXECUTE msdb.dbo.sysmail_configure_sp 'MaxFileSize', '15000000' ;
Ich versende übrigens jeden Monat mehrere tausend eMails über eine Prozedur vom Server aus, allerdings haben User auch bei mir in der Regel keinen Zugriff auf diese Möglichkeit.
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
www.insidesql.org/blogs/cmu -
Man kann die maximal zulässige Größe konfigurieren. Standard ist 1 MB.
Hallo Christoph,ist bekannt, ich wollte nur niemanden dazu verleiten, das dann auch noch auszunutzen.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Was ich nun bräuchte wäre eine konkrete Vorlage wie ich diese Daten - die ich ja sehr einfach in eien Tabelle schrieben könnte - über den Server versenden kann.
Hallo Patrick,wie man Daten aus dem SQL Server selektiert, dafür gibt es reichlich Beispiele im Netz.
Wie man SMTP Mails versendet, hängt davon ab, welche Entwicklungsumgebung Du nutzt; in .NET sind es ein paar Zeilen, bei VBA bräuchste Du z.B. die vbSendMail DLL, deren Link ich schon geschickt hatte.Wie man es dann umsetzt, hängt von Deinen Kenntnissen ab. Einen Dienst entwickeln ist natürlich möglich, wenn man es aber noch nie gemacht hat, muss man sich da aber erst mal einarbeiten.
Ich würde evtl den SQL Server Service Broker zusammen mit dem External Activator einsetzen, das bringt bereits einen eigenen Dienst mit. Dafür ein kleines .NET (oder sonstiges) Programm zu schreiben, ist verhältnismäßig einfach; aber auch hier müsste man sich erst in den Service Broker einarbeiten.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing