AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Frage zur Rechtevergabe in der Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zur Rechtevergabe in der Datenbank

Ein Thema von Frickler · begonnen am 17. Jun 2020 · letzter Beitrag vom 18. Jun 2020
Antwort Antwort
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
599 Beiträge
 
Delphi XE6 Enterprise
 
#1

Frage zur Rechtevergabe in der Datenbank

  Alt 17. Jun 2020, 16:28
Datenbank: Firebird • Version: 3.0 • Zugriff über: UniDAC
Ich habe einen User in der Datenbank, dessen Zugriff stark eingeschränkt ist. Er darf einen View anschauen und eine SP ausführen. Dementsprechend hat er nirgendwo Rechte in der Datenbank, bis auf ein Leserecht auf den View und ein Ausführungsrecht auf die SP. Beim View gibt es keine Probleme, wohl aber bei der SP.

Diese SP updatet einen Wert in einer Tabelle. Dafür habe ich der SP die Lese- und Update-Rechte für diese Tabelle gegeben.

An der Tabelle hängt ein AfterUpdate Trigger, der in eine Logdatei schreibt. Dafür ruft der Trigger eine SP ("LogSP") auf. Ich habe dem Trigger dafür das Ausführungsrecht für die LogSP gegeben.

Jetzt das Problem: versuche ich mit dem User die SP aufzurufen, meckert Firebird, dass der User kein Recht hat, die LogSP auszuführen. Aber warum?

Gebe ich dem User die Ausführungsrechte für die LogSP, dann gehts. Aber die soll er gar nicht direkt aufrufen dürfen.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Frage zur Rechtevergabe in der Datenbank

  Alt 17. Jun 2020, 17:26
Weil nicht der Trigger das Recht benötigt, sondern der User.

Letztlich wird der Trigger ja durch den User ausgeführt (wenn auch indirekt). Das DBMS prüft aber immer gegen die Berechtigungen des Users.
Dabei spielt die Art und Weise des Aufrufs keine Rolle.

Das er die SP nicht direkt aufrufen dürfen soll, ist eigentliche Sache des Programms, nicht des DBMS. Wenn ich dem User im Programm gar nicht erst die Möglichkeit gebe, direkt eine SP aus zu führen, ist das Problem gelöst
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
599 Beiträge
 
Delphi XE6 Enterprise
 
#3

AW: Frage zur Rechtevergabe in der Datenbank

  Alt 17. Jun 2020, 19:41
Weil nicht der Trigger das Recht benötigt, sondern der User.

Letztlich wird der Trigger ja durch den User ausgeführt (wenn auch indirekt). Das DBMS prüft aber immer gegen die Berechtigungen des Users.
Dabei spielt die Art und Weise des Aufrufs keine Rolle.

Das er die SP nicht direkt aufrufen dürfen soll, ist eigentliche Sache des Programms, nicht des DBMS. Wenn ich dem User im Programm gar nicht erst die Möglichkeit gebe, direkt eine SP aus zu führen, ist das Problem gelöst
Der "User" ist niemand, der sich am Programm anmeldet oder so. Das Programm hat eine eigene Nutzerverwaltung, die mit den Datenbankusern nichts zu tun hat.
Der "User" ist ein Programm, welches von "außen" auf die Datenbank zugreift. Deswegen hat der auch so wenig Rechte wie möglich.
  Mit Zitat antworten Zitat
jobo

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

AW: Frage zur Rechtevergabe in der Datenbank

  Alt 17. Jun 2020, 19:47
Nur zum Vergleich, weiß nicht wie es bei Firebird ist:
In Oracle wird zwischen Owner und Invoker unterschieden. Ist eine SP Owner orientiert definiert, so reicht es dem Invoker das Recht auf die SP allein zu geben. Die SP arbeitet dann intern mit Owner Privileges.
Ist die SP als Invoker SP angelegt, so muss ein Verfahren ähnlich wie von Frickler beschrieben verwendet werden, um alle verwendeten Objekte an den Invoker zu berechtigen, damit er letztlich die SP ausführen darf.

Owner privileged SP bzw. Objekte sind der Standard. Demnach werden idR immer nur direkte Rechte auf die benötigten SP weitergegeben.

Dieser Standard scheint mir auch sinnvoll, weil er ziemlich lebensnah am Bedarf ausgerichtet ist.

Das Invoker Verfahren scheint mir eher was für Hochsicherheits-SP.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
679 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Frage zur Rechtevergabe in der Datenbank

  Alt 17. Jun 2020, 20:09
klingt irgendwie alles unvollständig, kannst du eine mini db machen, die den gleichen fehler hat
und dann entweder hier oder mir direkt die metadaten senden?
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Frage zur Rechtevergabe in der Datenbank

  Alt 18. Jun 2020, 05:59
Weil nicht der Trigger das Recht benötigt, sondern der User.

Letztlich wird der Trigger ja durch den User ausgeführt (wenn auch indirekt). Das DBMS prüft aber immer gegen die Berechtigungen des Users.
Dabei spielt die Art und Weise des Aufrufs keine Rolle.

Das er die SP nicht direkt aufrufen dürfen soll, ist eigentliche Sache des Programms, nicht des DBMS. Wenn ich dem User im Programm gar nicht erst die Möglichkeit gebe, direkt eine SP aus zu führen, ist das Problem gelöst
Der "User" ist niemand, der sich am Programm anmeldet oder so. Das Programm hat eine eigene Nutzerverwaltung, die mit den Datenbankusern nichts zu tun hat.
Der "User" ist ein Programm, welches von "außen" auf die Datenbank zugreift. Deswegen hat der auch so wenig Rechte wie möglich.
Ok, das macht die Sache schwieriger, ändert aber auch nix. Denn auch das Programm wird sich mit einem User am DBMS anmelden, wenn es die Connection aufbaut.
Aus Sicht der DB ist es egal, ob der "User" jetzt ein Mensch, ein Programm oder der Ionenfluss ist

So wie es aussieht, prüft die "LogSP" nicht nur die Berechtigung der Aufrufenden Instanz, sondern auch die Berechtigungen des Users.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
599 Beiträge
 
Delphi XE6 Enterprise
 
#7

AW: Frage zur Rechtevergabe in der Datenbank

  Alt 18. Jun 2020, 09:44
Nur zum Vergleich, weiß nicht wie es bei Firebird ist:
In Oracle wird zwischen Owner und Invoker unterschieden. Ist eine SP Owner orientiert definiert, so reicht es dem Invoker das Recht auf die SP allein zu geben. Die SP arbeitet dann intern mit Owner Privileges.
Ist die SP als Invoker SP angelegt, so muss ein Verfahren ähnlich wie von Frickler beschrieben verwendet werden, um alle verwendeten Objekte an den Invoker zu berechtigen, damit er letztlich die SP ausführen darf.
Die Geschichte mit den Ownern (heißt da "DEFINER") und Invokern wird es meines Wissens nach mit der nächsten Firebird Version 4 geben.

klingt irgendwie alles unvollständig, kannst du eine mini db machen, die den gleichen fehler hat
und dann entweder hier oder mir direkt die metadaten senden?
Ich probiers.

EDIT: Ich konnte das Verhalten in einer kleinen Demo nicht nachstellen.

Nach längerem Rumgraben fand ich dann heraus, dass beim Ausführen meines Scriptes, welches die ursprüngliche Datenbank erzeugt, manche GRANT-Anweisungen übersprungen wurden. Das hat was mit Kommentaren im Script und einem alten UniDAC Bug zu tun, der wohl inzwischen beseitigt wurde.

Langer Rede kurzer Sinn: es funktioniert, so wies soll!

Geändert von Frickler (18. Jun 2020 um 14:53 Uhr)
  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 14:27 Uhr.
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