Announcement

Collapse
No announcement yet.

SQL 2008 - Benutzernamen auslesen

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

  • SQL 2008 - Benutzernamen auslesen

    Hi,

    It's a feature!

    Ich benutze f. mein Programm die Benutzernamen, die früher unter sysusers (MS SQL 2000) hinterlegt waren.
    Früher konnten auch User mit public Rechten diese Informationen abrufen.

    Mit dem neuen Server 2008 geht das nicht mehr.
    Ich brauche aber diese Namen, da sie im Programm an verschiedenen Stellen
    angezeigt werden.

    Ich dachte, dass ich mit sys.database_principals zum gewünschten Ziel komme.
    Aber leider werden nicht alle Namen aufgelistet, wenn nur public Rechte vorhanden sind.

    Eventuell kann mir jemand helfen, wie ich entsprechend dieses SQL-Script umschreiben muss, damit es klappt.

    Code:
    SELECT sys.database_principals.principal_id, sys.database_principals.name FROM sys.database_principals
    		WHERE type LIKE 'U' AND principal_id <>  USER_ID(Current_User)
    Danke vorab.

  • #2
    Hallo deitysou,

    [highlight=SQL]SELECT principal_id, name
    FROM sys.database_principals
    WHERE type = 'S'
    AND principal_id <> USER_ID(Current_User)[/highlight]

    Aber auch damit bekommt ein User mit eingeschränkten Berechtigungen nicht alle Prinzipale zu sehen; was geht den auch an, welche es gibt (man darf alles essen, aber nicht alles wissen ...).
    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
      Es geht die User deshalb etwas an, weil sie Nachrichten an Benutzer schicken können und dazu muss ich ihm diese auflisten.

      Leider bringt der type = 'S' nicht die gewünschten Benutzerkonten. (Windows-Authentifizierung)
      Trotzdem danke.

      Comment


      • #4
        Sorry, hatte ich überlesen.
        [highlight=SQL]SELECT *
        FROM sys.database_principals
        WHERE type like 'U'
        AND principal_id <> USER_ID(SYSTEM_USER)[/highlight]

        U statt S und es muss der SYSTEM_USER sein; Current_user liefert eher "dbo".

        Wie wäre es mit einer eigenen Tabellen mit den Usern?
        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


        • #5
          Vielleicht sollte ich noch eine kurze Erklärung dazu geben.
          Ich benutze die Windowskonten zur Authentifizierung.
          Das bequeme daran ist, dass ich nur noch die UserID speichern muss.
          In der Domain kann dann jeder nach belieben den Arbeitsplatz wechseln usw.

          Im Prinzip habe ich nichts dagegen, dass bei SQL 2008 sich die Zugriffe ändern.
          Vernünftig. Aber es muss doch einen anderen Weg geben die Benutzeraccounts der Datenbank anzeigen zu lassen?

          Eine Tabelle ist auch ein Weg. Aber keinen den ich gehen möchte (sofern nicht anders möglich).
          Zuletzt editiert von deitysou; 06.05.2009, 22:04.

          Comment


          • #6
            Du könntest den User mehr Rechte geben, aber das ist nicht unbedingt im Sinne des Erfinders.

            Andere Möglichkeit ist, eine SP anzulegen, die die sysusers sozusagen lesen darf und Deinen Usern gibts Du dann das Recht, die auszuführen.
            Beispiel:
            [highlight=SQL]CREATE PROCEDURE [dbo].[spListSysUsers]
            WITH EXECUTE AS Owner
            AS
            SELECT *
            FROM sys.sysusers
            GO
            GRANT EXECUTE ON [dbo].[spListSysUsers] TO [public]
            GO[/highlight]

            Durch das EXECUTE AS OWNER wird es mit den Rechten des SP-Owners ausgeführt, also mit Deinen, wenn Du sie anlegst.

            Wenn Du das mit einem "normalen" Account ausprobierst
            [highlight=SQL]EXEC dbo.spListSysUsers

            SELECT *
            FROM sys.sysusers[/highlight]
            wirst Du sehen, das die SP alle und das Select nur bestimmte sysusers liefert.
            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


            • #7
              Danke für deine Hilfe.
              Deine Variante mit dem
              Code:
              WITH EXECUTE AS Owner
              liefert das gewünschte Ergebnis.

              Sobald ich Zeit habe, werde ich mich mal mit dem SQL Srv 2008 näher beschäftigen.

              MfG

              Comment

              Working...
              X