AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL Server 2012: Zugriffsberechtigung abhängig vom Wert einer Spalte???
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von romber · begonnen am 28. Sep 2013 · letzter Beitrag vom 3. Okt 2013
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

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

  Alt 2. Okt 2013, 13:37
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?
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

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

  Alt 2. Okt 2013, 14:37
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 2. Okt 2013, 14:43
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

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

  Alt 3. Okt 2013, 08:57
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

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

  Alt 3. Okt 2013, 09:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 3. Okt 2013, 09:27
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).

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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

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

  Alt 3. Okt 2013, 10:23
@ 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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#8

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

  Alt 3. Okt 2013, 11:33
@ 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.
Lesen schon, aber wie ist es mit dem schreiben wenn er nur entsprechende Datensätze auch schreiben darf?

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.
Die Aussage bezieht sich auch die obige Notwendigkeit Rechte entsprechend auf Zellenwerte zu vergeben. Da kommt man mit Grants nicht weit.
Und der Alttag (ERP und PLM's zeigens) ist ja das man die so auch benötigt.
Sachbearbeiter A darf nur Stammdaten bearbeiten die im Bereich Elektrik liegen
Sachbearbeiter B darf keine Stücklisten bearbeiten welche freigegeben sind, dies müssen dann von Sachbearbeiter C als neue Version wieder in den Zustand "in Arbeit" gesetzt werden.
Wie würden hier GRANDs auf Datenbankebene aussehen?

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.
Ich nicht. Bei SAP-Installationen wirst du oft nur direkten Tabellenzugriff (als mit Schreiben) bekommen wenn du das über die Geschäftsführung als Weisung an die IT bekommst. Die IT wird hier nicht die Gefahr eingehen das wegen eines Programmierfehlers das Werk stundenlang steht.

Es gibt sicher genügend Firmen, die selbst (eigenverantwortlich) Datenhaltung und Verarbeitung betreiben und volle Hoheit darüber haben.
Als Eigen-SW und keine Kauf-SW?

Auch Standardsoftwarehersteller haben anwendungsintern die Problemstellung, Zugriffssicherheit zu bewerkstelligen. Ein wasserdichtes Datenmodell ist auch da der beste Weg.
Haben wir. Wir haben 2-3 Usergruppen welche relativ einfache Rechtemodelle haben. Alles andere wird in der Anwendung erledigt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 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