![]() |
[MySQL] Datenbankstruktur
Hi,
Ich habe vor ein komplexes Userverwaltungssystem zu schreiben, zum Anmelden wird das ganze in einer DB gespeichert. Ungefähr so:
SQL-Code:
Nun habe ich noch eine 2 Tabelle mit Serverdaten, womit der User dann auf den
id | NAME | EMAIL | PASSWORD | EXPIRATION | LOGINS | SETTINGS
freigeschaltete Server connecten darf.
SQL-Code:
id | SERVERNAME | SERVER | USER | PASSWORD | PORT | DATABASE | MAXUSER
Nun zu meinem Problem bzw. ob es sinnvoll wäre es so zu machen: In der Spallte SETTINGS möchte ich die Rechte von jedem User bestimmen, das habe ich mir so überlegt (XML-mäßig):
Code:
Zuerst wollte ich INI Strukturen verwenden, jedoch käme ich mit dem Platz für die Rechte nicht aus.
<SERVER_DATABASE> // Server A
<GROUP>Administrator</GROUP> <RIGHTS></RIGHTS> </SERVER_DATABASE> <SERVER_DATABASE> // Server B <GROUP>User</GROUP> <RIGHTS></RIGHTS> </SERVER_DATABASE> <SERVER_DATABASE> // Server C <GROUP>Manager</GROUP> <RIGHTS></RIGHTS> </SERVER_DATABASE> Ich wollte halt mal fragen ob es Sinn macht die Benutzer/Serverrechte so zu speichern oder ob es eine bessere Lösung gibt. Ich bin gespannt auf eure Anworten, ich möchte aber ungern eine weitere Tabelle erstellen. Gruß |
Re: [MySQL] Datenbankstruktur
Für eine gute User- und Rechteverwaltung brauchst du min. 6 Tabellen:
* User-Tabelle * Rechte-Tabelle (welche Rechte gibt es überhaupt) * Gruppen-Tabelle (Benutzergruppen) * UserGruppen-Tabelle (welcher User ist Mitglied bei welcher Gruppe) * Gruppenrechte-Tabelle (Welche Gruppe hat welches Recht) * UserRechte-Tabelle (welcher User hat welches Recht) Ein User kann Mitglied in mehreren Gruppen sein. Jede Gruppe kann 0, 1 oder mehr Rechte haben. Der User bekommt die Summe aller Rechte aus allen Gruppen zugeteilt. Zusätzlich kann der User auch direkt Rechte erteilt (engl. grant) oder verweigert (engl. deny) bekommen. Wenn einen User ein Recht explizit verweigert wurde, dann kann er es auch dann nicht mehr erhalten, wenn er es aus einer anderen Gruppe erhalten würde. Du kannst natürlich die Gruppen ganz weglassen, aber dann wird die Sache bei vielen Usern völlig unpraktikabel. Man kann auch User und Gruppen zu einer Tabelle zusammenfassen, was den Vorteil hat, dass Gruppen Mitglied in anderen Gruppen werden können. Man braucht dann weniger Tabellen, aber einfacher wird's nicht. |
Re: [MySQL] Datenbankstruktur
Wobei man die GruppenRechte und UserRechte zusammenfassen kann. Man könnte u.U. auch User/Gruppen in eine Tabelle ablegen.
|
Re: [MySQL] Datenbankstruktur
Ich glaube ich habe das ganze etwas falsch erklärt,
dass Userverwaltungssytem ist für ein Programm mit einer DB Anbindung. Das Programm an sich gibt es in mehreren Ausführungen, welcher User welches Feature benutzen dürfen muss man in dem System verwalten können. Unabhängig davon gibt es eine DB Anbindung, die mit dem Programm selber nichts zu tun hat, Der DB Besitzer darf dort Regeln welcher User welche Rechte in der DB hat, also wer Daten hinzufügen, löschen etc. darf. Deshalb ist es besser, wenn ich eine Spalte hinzufüge, wo ich die "reinen Programmrechte" hineinschreibe. Die Programmrechte kann man noch ein Zahlen ausdrücken, da es nicht so viele sind.
SQL-Code:
Jedoch finde ich es noch problematisch die Serverrechte zu verwalten da es ja mehere Server/DB
id | NAME | EMAIL | PASSWORD | EXPIRATION | LOGINS | PROGRAM-RIGHTS | SERVER-SIDE
gibt. In den Server Rechten könnte dann z.b. so etwas stehten (Boolean Werte):
XML-Code:
So ein Eintrag könnte dann natürlich sehr lang werden, wenn eine DB z.b. 6 Tabellen hat
<SERVER_DATABASE> // Server A
<GROUP>Administrator</GROUP> <RIGHTS> <CAN_READ> <TABLE_A>1</TABLE_A> <TABLE_A>1</TABLE_A> </CAN_READ> <CAN_ADD> <TABLE_A>1</TABLE_A> <TABLE_B>1</TABLE_B> </CAN_ADD> <CAN_EDIT_OWN>1</CAN_EDIT_OWN> <CAN_EDIT> <TABLE_A> <COLUMN_1>1<COLUMN_1> <COLUMN_2>1<COLUMN_2> </TABLE_A> </CAN_EDIT> <CAN_REMOVE> <TABLE_A>1</TABLE_A> <TABLE_B>1</TABLE_B> <CAN_REMOVE> </RIGHTS> </SERVER_DATABASE> und jede Tabelle dann nochmal 10 Spalten! Und das ganze ist nur ein Beispiel von einem Server wenn sich dem System noch weitere Anschließen 10-20 dann will ich mir gar nicht vorstellen wie lang dieser Eintrag pro User werden kann. Jedoch brauche ich diese Kontrolle und so ist es auch erwünscht. Deshalb frage ich mich ob man dies nicht in die "angedockte" DB einträgt. Damit meine ich, dass in der User Tabelle "SERVER-SIDE" komplett wegfällt und dies dem Server gespeichert wird. Das ganze steht aber in Abhängigkeit mit dem Usern, dann müsste ich in der neuen DB eine neue Tabelle anlegen die dann so aussieht:
SQL-Code:
Problematisch ist es dann wieder, wenn jemand die EMail-Adresse ändert, und das Problem der Verwaltung würde
NAME | EMAIL | SERVER-SIDE
ich nur auf einen anderen Server oder eine andere DB verschieben :(. |
Re: [MySQL] Datenbankstruktur
Warum machst du das nicht auch in der DB?
|
Re: [MySQL] Datenbankstruktur
Zitat:
Die XML Struktur? Klar könnte ich machen, dann hätte ich eine Tabelle a la:
SQL-Code:
dort müsste ich dann bei CAN_READ,CAN_ADD,CAN_EDIT,CAN_REMOVE eintragen welche Tabelle,
NAME | EMAIL | GROUP | CAN_READ | CAN_ADD | CAN_EDIT_OWN | CAN_EDIT | CAN_REMOVE
z.b. so:
Code:
oder ich würde eine sehr lange Tabelle erzeugen z.b. so:
TABLE_A=1
TABLE_B=0 TABLE_C=1
SQL-Code:
den Rest kann man sich ja denken ...
NAME | EMAIL | GROUP | CAN_READ_TABLE_A | CAN_READ_TABLE_B | CAN_READ_TABLE_C
Die erste Variante finde ich gar nicht mal so schlecht, da würde man einiges Sparen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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