Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FIrebird Benutzerrechte Update (https://www.delphipraxis.net/163720-firebird-benutzerrechte-update.html)

Pro_RJ 13. Okt 2011 09:48

Datenbank: FIreBird • Version: 2.1 • Zugriff über: IBX

FIrebird Benutzerrechte Update
 
Einen wunderschönen guten Morgen :-)

Ich Arbeite gerade der Überarbeitung unserer Benutzerverwaltung.
Ich habe folgenden Tabellen aufbau:

Delphi-Quellcode:
Tabelle Filesystem -->
ID,
DateiNr,
Revision,
Dateiname,
Benutzername.....


View VW_Filesystem
Select * from Filesystem where Benutzername = Current_User;



Tabelle FilesList -->
ID,
DateiNr,
Revision,
Dateiname,
Benutzername


View VW_FileList
Select * from FilesList where Benutzername = Current_User;
in der Tabelle „Filesystem“ kann es innerhalb einer DateiNr viele Revisionen geben.
DateiNr Revision
1 1
1 2
1 3
1 4
2 1
2 2
...
Die View „VW_Filesystem“ soll nur die Daten anzeigen, die der User sehen darf.

In der Tabelle „FileListe“ steht lediglich zu Einer DateiNr die Letzte Revision
DateiNr Revision
1 4
2 2
Die View „VW_FileList“ soll nur die Daten anzeigen, die der User sehen darf.

Der Benutzer soll nur diese Rechte haben:
Filesystem --> nur einfügen
Vw_Filesystem --> Nur Lesen

Filelist --> einfügen, Update
Vw_FileList --> Nur Lesen

Der Hintergrund ist, das der Benutzer ausschließliche seine Daten sehen soll. und garkeines falls die eines anderen Benutzers.
Das ist soweit auch alles kein Problem in funktioniert auch alles.

Jetzt tritt nur ein Problem auf.
Wenn ein Benutzer einen Datensatz in die Tabelle "Filesystem" einfügt soll automatisch
a) ein Datensatz in die Tabelle "FileListe" eingefügt werden wenn dieser noch nicht vorhanden ist
oder
b) die neue RevisionsNr in den vorhandenen Datensatz in der Tabelle "Fileliste" geändert werden.

Das einfügen in die Tabelle "Fileliste" klappt problemlos.
Wenn ich jetzt aber ein
Delphi-Quellcode:
Update Fileliste set Revision = :NeuRevision where Id = :ID;
auf die Tabelle "Fileliste" mache bekomme ich die Fehlermeldung das ich keine Berechtigung zum Lesen habe.
Der Benutzer soll ja auch gar nicht in der Tabelle lesen er soll ja nur schreiben.
Ich habe es auch schon probiert ein Update auf die View zu machen aber hier wird ein Voll-Zugriff auf die Tabelle "Fileliste" benötigt

Gibt es eine Möglichkeit die Tabelle "FileListe" zu ändern OHNE das ich dem Benutzer leserechte geben muss?



mfg
Jens

DeddyH 13. Okt 2011 10:03

AW: FIrebird Benutzerrechte Update
 
Ohne jetzt lange nachgedacht zu haben: könnte man das Update/Insert nicht in eine SP verlagern? Der User bekommt dann Ausführungsrechte auf die SP und diese wiederum die benötigten Rechte auf die Tabelle(n). Das Ganze könnte man dann noch aus einem Einfüge-Trigger aufrufen (sofern das geht, weiß ich gerade nicht mit Sicherheit).

tsteinmaurer 13. Okt 2011 10:21

AW: FIrebird Benutzerrechte Update
 
Hallo Jens,

alt aber gut: :-D
http://tracker.firebirdsql.org/browse/CORE-136

durch die WHERE Klausel im Update braucht er auch Rechte zum Lesen. Wie DeddyH beschrieben hat, kannst das in eine Stored Procedure auslagern. Der Stored Procedure gibst dann die benötigten Rechte auf die Tabelle und der Benutzer hat Ausführungsrechte für die Procedure.

Pro_RJ 13. Okt 2011 10:40

AW: FIrebird Benutzerrechte Update
 
Ahh ok,
das man einer Procedure/Trigger auch Rechte geben kann wusste Ich nicht.
Ok dann mache ich den gesamten Vorgang in einer SP und mein Problem ist gelöst.
Vielen vielen Dank

tsteinmaurer 13. Okt 2011 12:02

AW: FIrebird Benutzerrechte Update
 
Ja, etwas in der Form

Code:
grant select, update on filelists to procedure xyz;
grant execute on xyz to myuser;
Vielleicht solltest dann gleich noch mitandenken die Rechtevergabe auf Rollenebene zu machen, weil dann ersparst dir jedem einzelnen Benutzer die entsprechenden Berechtigungen einzuräumen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:03 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