AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[MySQL] Datenbankstruktur

Ein Thema von geskill · begonnen am 8. Jul 2008 · letzter Beitrag vom 9. Jul 2008
Antwort Antwort
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#1

[MySQL] Datenbankstruktur

  Alt 8. Jul 2008, 19:08
Hi,
Ich habe vor ein komplexes Userverwaltungssystem zu schreiben, zum Anmelden wird das ganze in einer DB gespeichert.
Ungefähr so:

id | NAME | EMAIL | PASSWORD | EXPIRATION | LOGINS | SETTINGS Nun habe ich noch eine 2 Tabelle mit Serverdaten, womit der User dann auf den
freigeschaltete Server connecten darf.

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:
<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>
Zuerst wollte ich INI Strukturen verwenden, jedoch käme ich mit dem Platz für die Rechte nicht aus.
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ß
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: [MySQL] Datenbankstruktur

  Alt 8. Jul 2008, 23:48
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: [MySQL] Datenbankstruktur

  Alt 9. Jul 2008, 07:40
Wobei man die GruppenRechte und UserRechte zusammenfassen kann. Man könnte u.U. auch User/Gruppen in eine Tabelle ablegen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#4

Re: [MySQL] Datenbankstruktur

  Alt 9. Jul 2008, 13:11
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.

id   | NAME | EMAIL | PASSWORD | EXPIRATION | LOGINS | PROGRAM-RIGHTS | SERVER-SIDE Jedoch finde ich es noch problematisch die Serverrechte zu verwalten da es ja mehere Server/DB
gibt.
In den Server Rechten könnte dann z.b. so etwas stehten (Boolean Werte):

XML-Code:
<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>
So ein Eintrag könnte dann natürlich sehr lang werden, wenn eine DB z.b. 6 Tabellen hat
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:
NAME | EMAIL | SERVER-SIDE Problematisch ist es dann wieder, wenn jemand die EMail-Adresse ändert, und das Problem der Verwaltung würde
ich nur auf einen anderen Server oder eine andere DB verschieben :(.
Sebastian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: [MySQL] Datenbankstruktur

  Alt 9. Jul 2008, 13:17
Warum machst du das nicht auch in der DB?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#6

Re: [MySQL] Datenbankstruktur

  Alt 9. Jul 2008, 13:28
Zitat von mkinzler:
Warum machst du das nicht auch in der DB?
Was meinst du mit "das"

Die XML Struktur?
Klar könnte ich machen, dann hätte ich eine Tabelle a la:

NAME | EMAIL | GROUP | CAN_READ | CAN_ADD | CAN_EDIT_OWN | CAN_EDIT | CAN_REMOVE dort müsste ich dann bei CAN_READ,CAN_ADD,CAN_EDIT,CAN_REMOVE eintragen welche Tabelle,
z.b. so:
Code:
TABLE_A=1
TABLE_B=0
TABLE_C=1
oder ich würde eine sehr lange Tabelle erzeugen z.b. so:
NAME | EMAIL | GROUP | CAN_READ_TABLE_A | CAN_READ_TABLE_B | CAN_READ_TABLE_C den Rest kann man sich ja denken ...

Die erste Variante finde ich gar nicht mal so schlecht, da würde man einiges Sparen.
Sebastian
  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 17:55 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