none
Zugriff auf view aber nicht dahinterliegende Tabellen RRS feed

  • Frage

  • Hi,

    Ich habe auf einem SQL-Server-2008 in der Datenbank "Personal" vertrauliche Daten liegen, aucg dort habe ich eine Tabelle in der die Berechtigunen je User vergeben werden. In einem view werden diese Daten dann (über SYSTEM_USER gefiltert) zur Verfügung gestellt. Ein halbwegs cleverer Kerl kann nun aber über die odbc-Verbindung sich die Tabellen direkt öffnen, statt die views zu verwenden.
    Wie kann ich dies verhindern?
    Ich habe schon die views in eine andere Datenbank "Zugriff_Pers" gelegt, aber auch dann braucht der User auch connect sowie select - Berechtigungen auf "Personal". Nun müsste er immerhin schon die odbc-Verbindung ändern und erraten wo die Tabellen liegen, aber 100% sicher ist das auch noch nicht.
    Wie kann ich den Zugriff auf die Tabellen einschränken, ohne dass ich beim view Probleme bekomme?

    Vielen Dank
    Max

    Dienstag, 26. Juni 2012 06:39

Antworten

  • Ich bin wohl den falschen Weg gegangen, ich habe ja die Tabellen in einer anderen Datenbank - das dürfte die Besitzkette stören.

    Hallo Max,

    dem ist so. Es gibt die Option, eine Datenbankübergreifende Besitzverkettung zu erlauben, aber das ist natürlich ein gewisses Sicherheitsrisiko und deswegen möchte ich auch nicht dazu raten.

    Warum verteilst Du den die Views und die basierenden Tabellen über mehrere Datenbanken, der Sinn erschließt sich mir nicht? Das Konstrukt solltest Du noch mal überdenken. Wegen Berechtigungsn sollte es nicht sein, wie erwähnt, ist es überhaupt nicht nötig, den Usern direkten Zugriff auf die Tabellen zu geben, sie bekommen sie dann nicht einmal "zu sehen".


    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

    • Als Antwort markiert mad.max Montag, 2. Juli 2012 10:27
    Montag, 2. Juli 2012 07:50
  • Hallo Max,

    Nein, daran liegt es nicht (und in einer Datenbankrolle ist der User immer: in "Public")

    Bis Du auch mit dem User angemeldet, auch an die richtige Datenbank, sind die Tabellen und die View(s) in der gleichen Datenbank, sind die Rechte wirklich vergeben (kannst Du in SSMS in den Eigenschaften des Datenbank Users über die "Sicherungsfähigen Elemente" im Tab "Effiktiv" unten prüfen)?


    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

    • Als Antwort markiert mad.max Montag, 2. Juli 2012 10:27
    Montag, 2. Juli 2012 09:47

Alle Antworten

  • Wie kann ich den Zugriff auf die Tabellen einschränken, ohne dass ich beim view Probleme bekomme?

    Hallo Max,

    Du musst den Usern keine Lese- oder sonstige Rechte auf die Tabelle direkt geben, es reicht aus, wenn die User Rechte auf die View haben; nennt sich Besitzkette. Das ist so übrigens "Best Pratice", User sollte nie direkt auf die Tabellen zugreifen dürfen, nur über Views und Stored Procedures.


    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 Dienstag, 26. Juni 2012 06:47 Link Besutzkette
    Dienstag, 26. Juni 2012 06:45
  • Hi Raul & Olaf,

    Vielen Dank für Eure Hilfe. Tut mir leid dass ich mich so lange nicht gemeldet habe, ich dachte ich bejkomme eine email wenn heir jemand antwortet, hat aber nicht geklappt.

    Ich bin wohl den falschen Weg gegangen, ich habe ja die Tabellen in einer anderen Datenbank - das dürfte die Besitzkette stören. Denn sobald dort keine connect-Berechtigung vorhanden ist erhält der User die Meldung:

    [microsoft][odbc sql server driver][sql server]The server principal "domain\test" is not able to access the database "Personal" under the current security context. (#916)

    Aber daher eine andere Frage (bin sql-technisch nicht so firm): Wie gebe ich eine berechtigung nur für die views aber nicht die Tabellen?

    Vielen Dank

    Max

    Montag, 2. Juli 2012 07:31
  • Hallo Max,

    vermutlich ist dort etwas mit der Benachrichtigung passiert. Oben beim ersten Post gibt es die Option "Benachrichtigung anfordern / entfernen". Schau Dir dass die richtige Option gewählt ist.

    Gruss,
    Raul


    Raul Talmaciu, MICROSOFT 
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 2. Juli 2012 07:35
  • Ich bin wohl den falschen Weg gegangen, ich habe ja die Tabellen in einer anderen Datenbank - das dürfte die Besitzkette stören.

    Hallo Max,

    dem ist so. Es gibt die Option, eine Datenbankübergreifende Besitzverkettung zu erlauben, aber das ist natürlich ein gewisses Sicherheitsrisiko und deswegen möchte ich auch nicht dazu raten.

    Warum verteilst Du den die Views und die basierenden Tabellen über mehrere Datenbanken, der Sinn erschließt sich mir nicht? Das Konstrukt solltest Du noch mal überdenken. Wegen Berechtigungsn sollte es nicht sein, wie erwähnt, ist es überhaupt nicht nötig, den Usern direkten Zugriff auf die Tabellen zu geben, sie bekommen sie dann nicht einmal "zu sehen".


    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

    • Als Antwort markiert mad.max Montag, 2. Juli 2012 10:27
    Montag, 2. Juli 2012 07:50
  • danke sehr, das war's - ich hatte die Bestätigung meiner Mail-Adresse nicht ausgeführt.

    Klappt jetzt wunderbar.

    Montag, 2. Juli 2012 07:54
  • Tut mir leid für die sehr Anfänger-Frage: ich habe inzwischen herausgefunden wie ich mit transyct-sql die Berechtigung auf den view vergebe

    USE Personal;
    GRANT SELECT ON OBJECT::mein_View TO "domain\test";
    GO
    

     dann klappt die odbc-Verbindung nicht. Wenn ich auch noch "connect" vergebe

    USE Personal;
    GRANT CONNECT TO "domain\test";
    GO
    

    (beie Befehle wurden positiv bestätigt)

    kommt eine Meldung:

    The select permission was denied on the object 'mein_view', database 'Personal', schema 'dbo' (#229)

    was fehlt denn noch?

    Vielen Dank

    Max

    Montag, 2. Juli 2012 08:49
  • GRANT CONNECT TO "domain\test"; GO

    Hallo Max,

    das CONNECT TO hat einen anderen Sinn; damit kann man den Guest Account aktivieren

    Du musst Du Windows Account erst per CREATE USER als Datenbank-User anlegen.


    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

    Montag, 2. Juli 2012 09:17
  • als User ist er angelegt, aber mit einem eigenen Schema "domain\test)" (also wie der User) und kein einziges role membership aktiv - liegt es daran?

    Max

    Montag, 2. Juli 2012 09:24
  • Hallo Max,

    Nein, daran liegt es nicht (und in einer Datenbankrolle ist der User immer: in "Public")

    Bis Du auch mit dem User angemeldet, auch an die richtige Datenbank, sind die Tabellen und die View(s) in der gleichen Datenbank, sind die Rechte wirklich vergeben (kannst Du in SSMS in den Eigenschaften des Datenbank Users über die "Sicherungsfähigen Elemente" im Tab "Effiktiv" unten prüfen)?


    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

    • Als Antwort markiert mad.max Montag, 2. Juli 2012 10:27
    Montag, 2. Juli 2012 09:47
  • Hi Loaf,

    Vielen Dank für Deine Hilfe! Ich habe den User gänzlich gelöscht und neu angelegt, jetzt klappt alles!

    Liebe Grüße

    Max

    Montag, 2. Juli 2012 10:27