Announcement

Collapse
No announcement yet.

EXECUTE AS - Clause funktioniert nicht richtig - es werden keine Daten angezeigt

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

  • EXECUTE AS - Clause funktioniert nicht richtig - es werden keine Daten angezeigt

    Hallo!

    Wieder mal ein Problem was ich nicht hinbekomme.

    Ich habe mir in .NET ein kleines Übersichtsformular gebastelt, womit ich einen Server ein wenig überwache.
    Nun möchte ich über eine Prozedur bestimmte Daten des Servers wie
    -) installierte DB's
    -) Anzahl User
    -) Jobs etc.
    anzeigen lassen und habe dafür eine Prozedur geschrieben. Unter meinem Sicherheitskontext funktioniert auch alles wunderbar.
    Die Anwendung sollte jedoch für mehrere User zugänglich sein, welche zum Teil nicht mal am DB-Server eingerichtet sind.

    Ich versuchte somit den Ausführungskontext der Prozedur, welche mir sämtliche Daten sammelt, zu ändern...nämlich in meinen --> sysadmin bzw. versuchte ich auch die Klausel EXECUTE AS OWNER.
    Nun, zu meiner Überaschung bekam ich keine einzige Datenzeile raus... :-(

    Kann mir vielleicht jemand verraten was ich da falsch mache?
    Ich bin Mitglied einer Windows-Gruppe --> SQLAdmins und in der Prozedur habe ich

    CREATE PROCEDURE dbo.uspXXXXXX
    EXECUTE AS 'DOMAIN\LOGIN'

    geschrieben.

    Herzlichen Dank schon mal
    lg Norbert
    Beste Grüße
    Norbert

    _Code * It * Simple * and * Smile_

    Access: FAQAccess-Funktionen
    SQL: sqlfaq ° sqlservercentral ° databasejournal ° insideSQL
    C#: snippets ° C# Corner ° codeproject ° Free ebook ° Pflichtlektüre
    Was nützt die beste Informationstechnik, wenn sich die Menschen nichts zu sagen haben?”

  • #2
    Hallo Norbert,

    kann es sein, das Du um alles in .NET ein TRY/CATCH hast und die Execption nicht auswertest?
    Denn so wie Du es beschreibst, müsste es von denen hageln.
    welche zum Teil nicht mal am DB-Server eingerichtet sind
    Geht schon mal gar nicht; wenn die User nicht eingerichtet, können sie sich nicht anmelden und schon mal gar nicht die SP ausführen. Oder lässt Du es über den "Guest" laufen?

    Hast Du den User auch die Berechtigung gegeben, SP auszuführen (speziell Deine)?
    Schon mal versucht, unter dem Account eines der Users die SP im SSMS auszuführen (er kann sich ja an Deinen Rechner anmelden)?

    Wie auch immer, wenn es an fehlenden Berechtigungen liegt, sei es für den User oder den EXECUTE AS Account, sollte es eine Exception geben.
    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


    • #3
      Hallo!

      Danke erstmal für die Hilfe.
      Im Client ist ein hardcodierter SQLUser, welcher sich mit dem Server verbindet. Dieser hat nur die Ausführen Rechte auf eine bzw. mehrere Prozeduren. Meldet er sich also so am Server an, kann er praktisch nichts machen.

      Nur wenn ich die Prozedur starte, kommt kein Fehler sondern einfach nur nichts. Keine Datensätze.
      Möchte Daten aus der sys.databases View auslesen.

      Beste Grüße
      Norbert
      Beste Grüße
      Norbert

      _Code * It * Simple * and * Smile_

      Access: FAQAccess-Funktionen
      SQL: sqlfaq ° sqlservercentral ° databasejournal ° insideSQL
      C#: snippets ° C# Corner ° codeproject ° Free ebook ° Pflichtlektüre
      Was nützt die beste Informationstechnik, wenn sich die Menschen nichts zu sagen haben?”

      Comment


      • #4
        Ich würde einfach mal statt dem echten select ein pseudoselct machen, dass auf jeden Fall ein Ergebnis bringt. Also statt

        select feld1, feld2, wert1 from sys.databases where ...

        mal das schreiben:
        Code:
        select 'test_1', 'test_2', 123       -- Werte hartcodiert statt ausgelesen[
        Damit MUSS die stored proc dieses Ergebnis bringen. Und ist dies der Fall, liegt es nicht an der Anmeldung bzw. Ausführungserlaubnis für die stored proc sondern dann muss es wohl daran liegen, dass der Aufrufer keine Berechtigung für die sys.databases oder einem anderen Teil in der stored proc hat. Anderenfalls stimmt was mit dem Aufrufer und dessen Berechtigungen noch nicht. Aber irgendwie so in der Art würde ich mich hinzuarbeiten probieren.

        Ist jetzt nur mal Brainstorming gewesen

        bye,
        Helmut

        Comment


        • #5
          Also, selbst wenn ich einen Account angeben, der keine Rechte ansich hat, liefert mir so eine SP zumindest die Datenbanke "master", "temp" und die, in der die SP ist.
          [highlight=SQL]CREATE PROCEDURE dbo.uspGetdatabases
          WITH EXECUTE AS 'KMTest'
          AS
          SET NOCOUNT ON
          SELECT *
          FROM sys.databases;

          GO[/highlight]
          Der einzige Umstand, bei dem ich kein Resutset bekomme ist, wenn es einen Fehler gibt.

          Im Client ist ein hardcodierter SQLUser
          Dann melde Du Dich doch mal mit dem SQLUser im SSMS an und führe die SP aus.
          Was erhälst Du dann?
          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