none
Welche Berechtigungen durch VIEW SERVER STATE? RRS feed

  • Frage

  • Guten Morgen alle zusammen,

    wir haben einen MSSQL 2008 R2 im Einsatz und dort läuft die Datenbank für eine Anwendung (Prosoz).
    Bei Updates müssen sich alle Mitarbeiter aus der Software ausloggen. Manchmal vergessen das Mitarbeiter.
    Nun hat die entsprechende Fachabteilung ein Tool, mit dem sie die eingeloggten Mitarbeiter finden kann. Allerdings benötigen Sie dafür die Berechtigung "Server Status anzeigen" (GRANT VIEW SERVER STATE).

    Ich frage mich, welchen Umfang dieses Recht besitzt und welche Risiken dadurch entstehen. Kann ich das auf eine Datenbank begrenzen?

    Vielen Dank!

    Liebe Grüße

    Dienstag, 8. Oktober 2013 08:56

Antworten

  • Hallo,

    VIEW SERVER STATE ist für Verwaltungssichten notwendig, die den Server selbst betreffen. Sie erlaubt nur das "Ansehen" und gibt keine weitergehenden Änderungsrechte.

    In Deinem Falle z. B. notwendig für sys.dm_exec_sessions (etc.), über die man die aktuellen Sitzungen identifizieren kann. Diese Sichten werden nicht auf Datenbankebene verwaltet - das sind andere Berechtigungen wie VIEW DATABASE STATE.

    Einen Überblick über das (ziemlich komplizierte) findet man unter Berechtigungen (Datenbankmodul),
    ein Poster dazu SQL Server Database Engine Permission Posters

    Gruß Elmar

    Dienstag, 8. Oktober 2013 09:32
  • Nur als Ergänzung, zu dem bereits gesagten:

    Ja, man kann nichts ändern, aber mann kann wirklich alles "sehen", das heisst auch den Query Cache auslesen, mit allem, was dort so drinnen steckt.

    Alternativ könnte man auch eine Prozedur anlegen, die nur diese dm_exec_sessions und weitere ausliest, und diese Proc entsprechend berechtigen. Zugegeben, dafür muss man sich recht gut in der Berechtigungsarchitektur auskennen, da man damit den Datenbank-Kontext verlässt.


    Andreas Wolter | Microsoft Certified Master SQL Server

    Blog: www.insidesql.org/blogs/andreaswolter
    Web: www.andreas-wolter.com | www.SarpedonQualityLab.com

    • Als Antwort markiert dasichs Freitag, 11. Oktober 2013 13:46
    Dienstag, 8. Oktober 2013 09:56
  • Hallo,

    man kann aufgrund Deiner Beschreibung nur vermuten, welche Sichten abgefragt werden. Um offene Verbindungen zu erkennen, benötigt man die oben angeführte Sicht bzw. weitere aus sys.dm_exec_.... Die benötigen VIEW SERVER STATE, da sie keinen Datenbankbezug haben - denn eine Verbindung kann den Datenbankkontext wechseln wie z. B. USE Database.

    Mit der Berechtigung alleine kann man nur Meta-Daten des Servers auslesen. An Daten der Datenbank kommt damit alleine nicht. Gibt man die Berechtigung einem Konto, das ausschließlich für die Installation verwendet wird, kann man den Zugriff darauf überwachen.

    Reicht Dir das nicht - wie Andreas schon schrieb: Möglich wäre eine Prozedur, die die Rechte hat und nur genau die benötigten Daten liefert. Dazu müsstest Du aber mit dem Hersteller reden, was er genau vorhat. Und ob er damit überhaupt klarkommt - bei Standardsoftware müsste so etwas allgemein realisiert werden.

    Als andere Alternative: Lasse die Datenbank in einer eigenen SQL Server Instanz laufen, dann sieht man bei VIEW SERVER STATE nur die Daten der Instanz.

    Gruß Elmar

    Dienstag, 8. Oktober 2013 18:34

Alle Antworten

  • Hallo,

    VIEW SERVER STATE ist für Verwaltungssichten notwendig, die den Server selbst betreffen. Sie erlaubt nur das "Ansehen" und gibt keine weitergehenden Änderungsrechte.

    In Deinem Falle z. B. notwendig für sys.dm_exec_sessions (etc.), über die man die aktuellen Sitzungen identifizieren kann. Diese Sichten werden nicht auf Datenbankebene verwaltet - das sind andere Berechtigungen wie VIEW DATABASE STATE.

    Einen Überblick über das (ziemlich komplizierte) findet man unter Berechtigungen (Datenbankmodul),
    ein Poster dazu SQL Server Database Engine Permission Posters

    Gruß Elmar

    Dienstag, 8. Oktober 2013 09:32
  • Nur als Ergänzung, zu dem bereits gesagten:

    Ja, man kann nichts ändern, aber mann kann wirklich alles "sehen", das heisst auch den Query Cache auslesen, mit allem, was dort so drinnen steckt.

    Alternativ könnte man auch eine Prozedur anlegen, die nur diese dm_exec_sessions und weitere ausliest, und diese Proc entsprechend berechtigen. Zugegeben, dafür muss man sich recht gut in der Berechtigungsarchitektur auskennen, da man damit den Datenbank-Kontext verlässt.


    Andreas Wolter | Microsoft Certified Master SQL Server

    Blog: www.insidesql.org/blogs/andreaswolter
    Web: www.andreas-wolter.com | www.SarpedonQualityLab.com

    • Als Antwort markiert dasichs Freitag, 11. Oktober 2013 13:46
    Dienstag, 8. Oktober 2013 09:56
  • Danke schonmal euch beiden!

    Könnte VIEW DATABASE STATE ausreichen, um die Nutzer anzuzeigen, die speziell auf diese Datenbank zugreifen?
    Anmeldungen werden ja auf Serverebene verwaltet. Gibt es etwas Vergleichbares auch heruntergebrochen auf die Datenbankebene?

    Dienstag, 8. Oktober 2013 15:55
  • Hallo,

    man kann aufgrund Deiner Beschreibung nur vermuten, welche Sichten abgefragt werden. Um offene Verbindungen zu erkennen, benötigt man die oben angeführte Sicht bzw. weitere aus sys.dm_exec_.... Die benötigen VIEW SERVER STATE, da sie keinen Datenbankbezug haben - denn eine Verbindung kann den Datenbankkontext wechseln wie z. B. USE Database.

    Mit der Berechtigung alleine kann man nur Meta-Daten des Servers auslesen. An Daten der Datenbank kommt damit alleine nicht. Gibt man die Berechtigung einem Konto, das ausschließlich für die Installation verwendet wird, kann man den Zugriff darauf überwachen.

    Reicht Dir das nicht - wie Andreas schon schrieb: Möglich wäre eine Prozedur, die die Rechte hat und nur genau die benötigten Daten liefert. Dazu müsstest Du aber mit dem Hersteller reden, was er genau vorhat. Und ob er damit überhaupt klarkommt - bei Standardsoftware müsste so etwas allgemein realisiert werden.

    Als andere Alternative: Lasse die Datenbank in einer eigenen SQL Server Instanz laufen, dann sieht man bei VIEW SERVER STATE nur die Daten der Instanz.

    Gruß Elmar

    Dienstag, 8. Oktober 2013 18:34
  • So, danke euch allen :-)

    Die VIEW SERVER STATE Berechtigungen halte ich für etwas zu stark.

    Dafür haben wir herausgefunden, dass die Fachanwendung die entsprechenden Benutzer herausfinden kann. Sie geht glaube ich über das letzte Anmeldedatum o.Ä. was direkt in der Datenbank gespeichert wird.

    Gut, dass wir das mit den VIEW SERVER STATE Berechtigungen umgehen können. Wahrscheinlich müssen wir uns das aber noch einmal in einem anderen Kontext überlegen.
    Deshalb vielen Dank für die Infos!

    Freitag, 11. Oktober 2013 13:45