![]() |
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! |
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. |
AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
Vielen Dank!
|
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? |
AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
Aus der
![]() Zitat:
|
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. |
AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
Zitat:
Code:
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.
GRANT SELECT[,UPDATE,..] ON dbo.[myTable] (Field01, Field03, Field17) TO <user|role>;
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. |
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. |
AW: SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
Zitat:
Zitat:
Fragestellung: Wie willst du die eigentliche Anforderung per Grand-Befehl genau abbilden? Gibt doch das vollständige Beispiel für die Fragestellung an. |
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 03:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz