Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Benutzerrechte für User, wie am besten (https://www.delphipraxis.net/45074-benutzerrechte-fuer-user-wie-am-besten.html)

Albi 29. Apr 2005 08:02

Datenbank: Interbase • Version: 7.1 • Zugriff über: IBX

Benutzerrechte für User, wie am besten
 
Hallo,

ich will in meiner Anwendung soetwas wie Benutzerrechte unterbringen. Nun stelle ich mir die Frage wie ich das am besten anfangen kann.

Ich habe mir gedacht, ich lege eine extra Tabelle dafür an, wo die Rechte drinstehen. Nur wie kann ich das am besten in die Anwendung einbauen.

Soll ich in die Tabelle für jede SP, View usw ein einzelnes Feld in der Tabelle einfügen oder wie löst man das am besten?

nieurig 29. Apr 2005 08:42

Re: Benutzerrechte für User, wie am besten
 
Hi Albi,
ich mache so was immer (recht einfach gestrickt) indem ich eine Tabelle mit Usernamen (Windowsuser), eine mit Usergruppen und deren Rechten und eine Verknüpfungstabelle in der DB anlege. Beim Start wird der Windowsuser ermittelt und dann die Rechte in der Tabelle abgefragt. Die einfachste Möglichkeit ist dann Sichtbarkeit der Bedienelemente im Programm von den Rechte abhängig zu machen. Wenn ein Menübaum ausgeblendet ist, KANN der User garnicht mehr die versteckten Funktionen ausführen.

Alternativ kannst Du Dir auch die Rechteverwaltung des Datenbankprogrammes anschauen. Dort kann mit GRANT Befehl für alles eingestellt werden was der User darf. Wenn der User etwas tut was für ihn nicht gedacht ist tritt im Programm eine Exception auf, auf die man reagieren kann. Das ist für meine Fälle aber immer zu aufwendig gewesen.

Niels

MagicAndre1981 29. Apr 2005 08:53

Re: Benutzerrechte für User, wie am besten
 
Zitat:

Zitat von nieurig
Hi Albi,
ich mache so was immer (recht einfach gestrickt) indem ich eine Tabelle mit Usernamen (Windowsuser), eine mit Usergruppen und deren Rechten und eine Verknüpfungstabelle in der DB anlege. Beim Start wird der Windowsuser ermittelt und dann die Rechte in der Tabelle abgefragt. Die einfachste Möglichkeit ist dann Sichtbarkeit der Bedienelemente im Programm von den Rechte abhängig zu machen. Wenn ein Menübaum ausgeblendet ist, KANN der User garnicht mehr die versteckten Funktionen ausführen.

So habe ich das auch gemacht und das funktioniert gut.

Zitat:

Zitat von nieurig
Alternativ kannst Du Dir auch die Rechteverwaltung des Datenbankprogrammes anschauen. Dort kann mit GRANT Befehl für alles eingestellt werden was der User darf. Wenn der User etwas tut was für ihn nicht gedacht ist tritt im Programm eine Exception auf, auf die man reagieren kann. Das ist für meine Fälle aber immer zu aufwendig gewesen.

Und problematisch bei den IBX-Komponenten. Die IBTable (falls die doch noch jemand nutzt :gruebel: ) kommt mit GRANTS nicht gut klar.

Albi 29. Apr 2005 09:33

Re: Benutzerrechte für User, wie am besten
 
Vielen Dank für die Antworten,

ich habe in IB schon die rechte gesetzt, ich habe ein Role angelegt und vergebe somit die Rechte. Nun ist es schon recht umständlich da ich jede Procedure in den Role aufnehmen muss. Nun könnte ich ja hunderte Role's anlegen um für jeden Benutzer die entsprechenden Rechte zuzuweisen aber das muss doch auf einfacher gehen - über eine zusätzlich Tabelle.

Mir ist aber nicht klar, wie ich diese Tabelle aufbauen soll und über diese dann eben die Rechte zuweisen. :wall: :wall: :wall:

SubData 29. Apr 2005 09:46

Re: Benutzerrechte für User, wie am besten
 
Ich hab in meiner letzten Anwendung nen 64 Zeichen String aus 0 / 1 benutzt und damit die Rechte vergeben ... Hinterher das Ding einfach als Int64 in die Datenbank gepackt und gut is... Wunderbar platzsparend -g-

Igotcha 29. Apr 2005 09:52

Re: Benutzerrechte für User, wie am besten
 
Zitat:

Zitat von Albi
Vielen Dank für die Antworten,

ich habe in IB schon die rechte gesetzt, ich habe ein Role angelegt und vergebe somit die Rechte. Nun ist es schon recht umständlich da ich jede Procedure in den Role aufnehmen muss. Nun könnte ich ja hunderte Role's anlegen um für jeden Benutzer die entsprechenden Rechte zuzuweisen aber das muss doch auf einfacher gehen - über eine zusätzlich Tabelle.

Mir ist aber nicht klar, wie ich diese Tabelle aufbauen soll und über diese dann eben die Rechte zuweisen. :wall: :wall: :wall:

Also wenn ich Dich richtig verstanden habe, dann gehst Du das Problem falsch an. Wenn Du z.B. 100 Anwender hast, dann brauchst du nicht 100 Datenbankuser, sondern genau einen ;-)

Zumindest mache ich es so, dass es einen Datenbank-User gibt, nämlich mein Programm. Die Rechte der einzelnen User hinterlegst Du in der Datenbank - nicht in einer DB-User-System-Tabelle, sondern in deiner Rechtetabelle (wie auch immer die aussehen mag).

Über einen selbstgeschriebenen Login-Dialog stellst Du daraufhin die Rechte des Users in der Anwendung fest.

Ein Beispiel:

Ich entwickle eine modulare Anwendung, wo die einzelnen Module fachlich voneinander abgegrenzt sind. Über meine eigene Rechteverwaltung wird beim Login des Anwenders geprüft, für welche Module dieser berechtigt ist und dementsprechend ein Menü-Treeview aufgebaut, über den durch Doppelklick auf einen Eintrag das entsprechende Modul gestartet wird.

Gruß Igotcha

Albi 29. Apr 2005 10:14

Re: Benutzerrechte für User, wie am besten
 
Igotcha, genau so habe ich mir das vorgestellt. Der User Log sich ein, beim Einloggen wird in Rechte Tabelle nachgeschaut welche Rechte der jeweilige User hat.

Und genau da liegt mein Problem. Ich habe keinen Plan wie ich die Tabelle aufbauen soll und dann über die Tabelle den User die Rechte zuweise.

shmia 29. Apr 2005 10:37

Re: Benutzerrechte für User, wie am besten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ist eine Access-Datenbank, in der Benutzerrechte für eine Anwendung abgebildet werden.
Also mit User / Gruppen / Rechte (=Permissions).

Albi 29. Apr 2005 11:15

Re: Benutzerrechte für User, wie am besten
 
Hallo shmia,

vielen Dank für den Anhang. Und bei der Anmeldung erfolgt dann die Überprüfung was der User darf und was nicht, indem Du einfach die Tabelle GroupAcces abfragst.

Habe ich das so richtig verstanden?

shmia 29. Apr 2005 12:20

Re: Benutzerrechte für User, wie am besten
 
Zitat:

Zitat von Albi
vielen Dank für den Anhang. Und bei der Anmeldung erfolgt dann die Überprüfung was der User darf und was nicht, indem Du einfach die Tabelle GroupAcces abfragst.

Bei der Anmeldung wird zuerst in der Tabelle Users nachgeschaut und das Passwort geprüft.
Bei erfolgreicher & bei erfolgloser Anmeldung wird in die Tabelle Users geschrieben.
Mit LoginFailedCount und LoginFailedDate kann der User beim nächsten Login von evtl. Fehlversuchen gewarnt werden.
Danach wird in die Tabelle GroupMembers geschaut, um zu sehen in welchen Gruppen der User enthalten ist.
Der User erhält dann alle Rechte aus UserAccess PLUS alle Rechte aus GroupAccess für alle Gruppen in denen er Mitglied ist.
Alle gesammelten Permissions werden in einer Stringliste gesammelt.

Um diese Datenbank perfekt zu machen, müsste man über die Tabellen UserAccess und GroupAccess nicht nur Rechte
erteilen, sondern auch gezielt entziehen (revoke) können.
Wenn einem User oder einer Gruppe eine Permission entzogen wurde, kann er diese Permission auch nicht über die Mitgliedschaft in Gruppen erhalten, die dieses Recht haben.
REVOKE ist vorrangig vor GRANT.


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