Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte??? (https://www.delphipraxis.net/176816-sql-server-2012-zugriffsberechtigung-abhaengig-vom-wert-einer-spalte.html)

romber 28. Sep 2013 13:40

Datenbank: SQL Server • Version: 2012 • Zugriff über: ADO, UniDAC

SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Hallo!

Besteht eine Möglichkeit, einem SQL-Server-Benutzer die Tabellenrechte so zu einzuschränken, dass er nur auf die Datensätze Zugriff hat, die einen bestimmten Wert in einer bestimmten Spalte dieser Tabelle haben?

Z.B. es gibt TABELLE_1, auf die der SQL_USER_1 aktuell Zugriffsrechte hat. In der TABELLE_1 gibt es eine Spalte, die Standartmässig leer ist. SQL_USER_1 soll nur auf die Datensätze zugreifen können, die eine Wert in der Spalte haben. Alle anderen Datensätze sollen für den SQL_USER_1 gesperrt/unsichtbar bleiben.

Danke!

sx2008 28. Sep 2013 13:55

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Du kannst einen View anlegen in dem alle Datensätze die der User nicht sehen soll per WHERE-Bedingung ausgefiltert werden.
Der User bekommt nur Zugriff auf den View, nicht aber auf die dahinterliegende Tabelle.

romber 29. Sep 2013 16:28

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Vielen Dank!

romber 2. Okt 2013 12:37

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Ich habe nun das Problem, dass ich in die View nichts hinzufügen kann, ohne die Rechte für den User auf die Tabelle zu setzen.
Mache ich etwas falsch?

generic 2. Okt 2013 13:37

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Aus der Doku:
Zitat:

Modify Data Through a View

Permissions
Requires UPDATE, INSERT, or DELETE permissions on the target table, depending on the action being performed.

Bernhard Geyer 2. Okt 2013 13:43

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Bei so hoher Granularität der nötigen Zugriffsrechte solltest du dir eine Mehrschichtarchitektur überlegen.
Die DBMS sind nicht dafür gedacht so genau die Zugriffsrechte zu vergeben.

jobo 3. Okt 2013 07:57

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1230632)
Bei so hoher Granularität der nötigen Zugriffsrechte solltest du dir eine Mehrschichtarchitektur überlegen.
Die DBMS sind nicht dafür gedacht so genau die Zugriffsrechte zu vergeben.

Das sehe ich nicht so. Was nimmt die Zwischenschicht Dir da ab? Und was, wenn mehrere Systeme mit der DB arbeiten? DBServer sind genau dafür gedacht, es gibt schon länger Berechtigungsverfahren auf Feldebene, die das Problem des TE direkt lösen. Das kostet u.U. extra bzw. ist leider nicht unbedingt standardisiert.
Code:
GRANT SELECT[,UPDATE,..] ON dbo.[myTable] (Field01, Field03, Field17) TO <user|role>;
Im Sinne der Aufgaben eines DBServers ist die Verwendung sogar empfehlenswert, besonders(?) im Mehrschichtumfeld. Die einzige Möglichkeit, Missbrauch oder Fehlzugriff, -Programmierung systematisch zu verhindern, liegt auf DB Server Seite.
Und:
Auch wenn für die Lösung des Problems evtl. gar kein View gebraucht wird, sollte die Verwendung gerade hier eine Selbstverständlichkeit sein. Ja, man muss eine oder zwei Zeilen mehr für das Create und das Grant schreiben, aber man hat dadurch ein klares Interface.
Wenn man dann noch gegen Rollen granted, statt gegen User um so besser.

Furtbichler 3. Okt 2013 08:09

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Was macht denn der Server, wenn ich bestimmte Spalten der Query nicht sehen darf? Schlägt dann die ganze Query fehl oder werden stattdessen NULL-Werte übergeben?

Wenn ersteres der Fall ist, müsste man ja bei vielen Aufgaben in der Mittelschicht die Queries individuell zusammenbauen, wobei dann ja irgendwie der Sinn dieser im Server angesiedelten Rechtevergabe nicht gegeben ist.

Bernhard Geyer 3. Okt 2013 08:27

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
Zitat:

Zitat von jobo (Beitrag 1230706)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1230632)
Bei so hoher Granularität der nötigen Zugriffsrechte solltest du dir eine Mehrschichtarchitektur überlegen.
Die DBMS sind nicht dafür gedacht so genau die Zugriffsrechte zu vergeben.

Das sehe ich nicht so. Was nimmt die Zwischenschicht Dir da ab? Und was, wenn mehrere Systeme mit der DB arbeiten?

I.d.R. wird immer nur die SW von einem Hersteller auf der DB arbeiten. Und diese bietet dann ein API zum Zugriff an. Ein direkter Zugriff von "Hilfsanwendungen" wird nicht unterstützt (Garantie/Gewährleistung/Support).

Zitat:

Zitat von jobo (Beitrag 1230706)
DBServer sind genau dafür gedacht, es gibt schon länger Berechtigungsverfahren auf Feldebene, die das Problem des TE direkt lösen. Das kostet u.U. extra bzw. ist leider nicht unbedingt standardisiert.
Code:
GRANT SELECT[,UPDATE,..] ON dbo.[myTable] (Field01, Field03, Field17) TO <user|role>;

Hast du die Problemstellung gelesen? Dein GRAND-Befehl löst sein Problem nicht vollständig, da die Sicherheit maximal auf Spaltenebene erfolgt. Er braucht es aber auf Zellenebene!

Fragestellung: Wie willst du die eigentliche Anforderung per Grand-Befehl genau abbilden? Gibt doch das vollständige Beispiel für die Fragestellung an.

jobo 3. Okt 2013 09:23

AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
 
@ Bernhard: Ok, da hab ich etwas geschlampt, die eigentliche Antwort hat ja bereits generic geliefert. Man benötigt Grant Angaben für den View.
Der View ermöglicht die spaltenabhängige Filterung und löst das Problem.
Meine Aussage zu der Spaltenberechtigungen, die darüber hinaus direkt auf Tabellenebene möglich sind, ist lediglich eine Entgeegnung zu Deiner Aussage, dass DB dafür (".. so hohe Granularität der Zugriffsrechte..") nicht gemacht sein sollen.
Zugriffs-API, Lizenzbestimmungen und Herstellergarantie sind natürlich zu berücksichtigen, wenn man ein System gekauft hat. Ob das die Regel ist, wage ich zu bezweifeln. Es gibt sicher genügend Firmen, die selbst (eigenverantwortlich) Datenhaltung und Verarbeitung betreiben und volle Hoheit darüber haben. Auch Standardsoftwarehersteller haben anwendungsintern die Problemstellung, Zugriffssicherheit zu bewerkstelligen. Ein wasserdichtes Datenmodell ist auch da der beste Weg.
@Furtbichler: Die Wahrung der definierten Rechte ist genau eine der Hauptaufgaben eines DB Servers. Er muss es garantieren (können, ob der Entwickler es nutzt ist eine andere Frage), dazu sind die Berechtigungsverfahren einer professionellen DB ja da und zwar vollkommen unabhängig davon, wer wie darauf zugreift. Mir ist nicht klar, warum das Konzept, dass es tabellenseitig (oder View, oder Stored Procedure) gibt, auf Spaltenebene nicht geben sollte. Das Argument, die Zugriffsschicht muss dann erhöhten Aufwand treiben, ist die logische Konsequenz der Anforderung, aber kein Gegenargument. (Wasch mich, aber mach mich nicht nass?)
Standardfall: Wird programtisch ein Update auf eine Tabelle ausgeführt, für das keine Erlaubnis besteht, muss die Zugriffsschicht ja auch damit klar kommen, sprich der Programmierer entsprechende Maßnahmen ergreifen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz