Announcement

Collapse
No announcement yet.

EXEC msdb.dbo.sp_send_dbmail aus Weboberfläche aufrufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EXEC msdb.dbo.sp_send_dbmail aus Weboberfläche aufrufen

    Hallo,

    ich versuche die Prozedur "sp_send_dbmail" aus einer Webanwendung heraus aufzurufen. Die Anwendung meldet sich bei der DB als User an der ja standardmäßig keine Rechte hat diese Prozedur auszuführen.

    Nun möchte ich aus Sicherheitsgründen dem Webuser ungern Rechte auf die Systemprozedur geben. Gibt es eine Möglichkeit wie ich das bewerkstelligen kann?

    Klappt das evtl. irgendwie mit EXECUTE AS.....?

    Danke und Gruß,
    Andre

  • #2
    Gibt es gottseidank ab 2005: packe das sp_send_dbmail in eine stored proc und verwende beim create der Procedur das EXECUTE AS. Den Rest übergibst du per Parameter.

    bye,
    Helmut

    Comment


    • #3
      Hallo Helmut,

      hatte ich schon versucht, klappt irgendwie nicht.

      EXECUTE AS ????

      Was trage ich da ein?
      Einfach einen User der in der msdb vorhanden ist und Execute Rechte auf die Prozedur hat?
      Nur noch mal zum Verständnis, ich will die sp_send_dbmail von einer vorhandenen Prozedur aus einer anderen Datenbank aufrufen. Der aufrufende User hat in der msdb keine Rechte.

      Gruß,
      Andre

      Comment


      • #4
        war irgendwie so gedacht:

        in server 1 steht

        create procedure sende_mail(@pRecipients varchar(500), @pBody varchar(500), @pSubject varchar(500), ... )
        with execute as 'dbo'
        AS
        begin
        sp_send_dbmail @recipients = @pRecipients, @body = @pBody, @subject = @pSubject, ...
        end

        und server 2 erteilst du execute-Rechte für procedur sende_mail ...

        ... oder habe ich das falsch verstanden?

        bye,
        Helmut

        Comment


        • #5
          Moin Helmut,

          so hatte ich es auch versucht.
          Habe es gerade noch mal getestet und bekomme immer noch folgende Fehlermeldung:

          "Die EXECUTE-Berechtigung wurde für das 'sp_send_dbmail'-Objekt, 'msdb'-Datenbank, 'dbo'-Schema verweigert."

          Die Prozedur sieht so aus:

          Code:
          CREATE procedure [dbo].[A_sende_mail](@pRecipients varchar(500), @pBody varchar(500), @pSubject varchar(500) )
          with execute as 'dbo'
          AS
          begin
          EXEC msdb.dbo.sp_send_dbmail @recipients = @pRecipients, @body = @pBody, @subject = @pSubject
          end

          ..und der Aufruf wird dann von einem User gemacht der in der msdb keine Execute Rechte hat und sihet so aus:

          Code:
          EXEC dbo.A_sende_mail 'Mailadresse', 'test', 'test'

          Comment


          • #6
            Hast du mal das dbmail als dbo direkt in der Datenbank probiert? Vielleicht fehlt noch eine andere Berechtigung. Schaue mal, inwieweit das mit deinen Einstellungen zusammenstimmt:
            http://www.databasejournal.com/featu...erver-2005.htm

            bye,
            Helmut

            Comment


            • #7
              Hallo zusammen,

              nicht das es Missverständnisse gibt:
              Ein DBO = Database Owner hatte alle Rechte in der jeweiligen Datenbank; mehr aber auch nicht, also keine zusätzlichen Rechte auf andere Datenbanken.

              Du könntest dem Account, der DBO ist, zusätzlich noch in der "msdb" in die Datenbankrolle "DatabaseMailUser" stecken, dann hätte er ausreichend Rechte.
              Olaf Helper

              <Blog> <Xing>
              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

              Comment


              • #8
                Hallo Zusammen,

                wenn ich versuche den "dbo" in die Datenbankrolle "DatabaseMailUser" zu stecken bekomme ich folgende Fehlermeldung:

                "Der Spezialprinzipal 'dbo kann nicht verwendet werden"


                Müsste es nicht so gehen:


                Code:
                Create procedure [dbo].[p_mail](@pRecipients varchar(500), @pBody varchar(500), @pSubject varchar(500) )
                with execute as 'dbo'
                AS
                begin
                EXEC msdb.dbo.sp_send_dbmail @recipients = @pRecipients, @body = @pBody, @subject = @pSubject
                end

                Zitat aus der Doku:
                Beim Identitätswechsel eines Prinzipals durch Ausführen der EXECUTE AS LOGIN-Anweisung oder in einem Modul des Serverbereichs durch Verwenden der EXECUTE AS-Klausel gilt der Identitätswechsel für den gesamten Server. Das bedeutet, dass nach dem Kontextwechsel der Zugriff auf alle Ressourcen innerhalb des Servers möglich ist, für die der Anmeldename Berechtigungen besitzt, für den der Identitätswechsel erfolgt ist.

                Leider kommt damit die Fehlermeldung:

                Die Ausführung als Datenbankprinzipal ist nicht möglich, weil der Prinzipal "dbo" nicht vorhanden ist, für diesen Typ von Prinzipal kein Identitätswechsel möglich ist, oder Sie nicht die erforderliche Berechtigung haben.

                Comment


                • #9
                  DBO ist ein gern genutzte Abkürzung und stellt eigentlich die Datenbankrolle "DB_Owner" dar. Dazu gibt es noch das Schema "dbo".
                  Du könntest dem Account, der DBO ist
                  Dem Account!!!, nicht der Datenbankrolle, zumal es mit der Anweisung dann die Rolle "DB_Owner" in der msdb wäre.

                  Also, wenn Du DBA bist (wäre damit Serverrolle SysAdmin) und Du die SP anlegst, könntest Du auch EXECUTE AS OWNER angeben, dann wird die SP mit Deiner Identität ausgeführt.

                  Wenn Du der DBO bist, dann musst Du Deinen Account in die Rolle "DatabaseMailUser" in der msdb stecken.
                  Olaf Helper

                  <Blog> <Xing>
                  * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                  Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                  Comment

                  Working...
                  X