# Noch mal MySQL



## Alex_winf01 (21. Jul 2006)

Ich habe noch mal folgende Frage:

Anwender A hat mehrere Mandanten zu betreuen. Jeder Mandant füllt für sich bestimmte Formulare aus. MySQL wird an den Anwender mitgeliefert und Anwender installiert MySQL. Die Datenbank wird mitgeliefert und heist z. B. ProgrammXYZ.

Nun soll Anwender A nicht jeden Mandanten in die eine Datenbank ProgrammXYZ abspeichern, sondern jeder Mandant soll eine eigene DB in MySQL bekommen, die dann nach dem jeweiligen Mandanten benannt ist (z. B. Mandant 1, Mandant 2 usw.)

Kann man so was eigentlich realisieren? Die Datenbank müsste ja dann kopiert und umbenannt werden. Und die Verbindung zur DB müsste dann auch jeweils angepasst werden.


----------



## foobar (21. Jul 2006)

Es wäre doch viel einfacher in der Geschäftslogikschicht eine Zugriffskontrolle zu implementieren. Warum soll jeder User eine eigene DB bekommen?


----------



## Alex_winf01 (22. Jul 2006)

Weil eine Zugriffskontrolle und ein Ablegen der DB auf den Server nicht gewollt wird.


----------



## foobar (22. Jul 2006)

Dann verstehe ich nicht so ganz was das Ziel sein soll. Was meinst du mit die DB soll nicht auf dem Server abgelegt werden? Wo soll die DB denn liegen?


----------



## Alex_winf01 (22. Jul 2006)

Sobald wir eine Zugriffskontrolle durchführen, geben die Anwender das Passwort an Unbefugte weiter. Und das ist sicher wie das Amen in der Kirche! Und eine IP-Kontrolle ist schlecht, da die meisten Anwender wechselnde IP-Adressen haben.

Aber ich möchte jetzte keine Diskussion führen, warum die DB nicht auf einem Server liegen soll und warum das so durchgeführt wird und nicht anders.

Meine Frage ist noch nicht beantwortet worden.


----------



## André Uhres (22. Jul 2006)

Es geht also um ein Sicherheitskonzept, nicht wahr?
Um in der Lage zu sein deine Frage zu beantworten, muss man dann zumindest folgendes wissen: 
wie willst du erreichen, dass ein Zugriff auf einen Mandanten in einer Datenbank sicherer ist 
als ein Zugriff auf die Datenbank eines Mandanten?


----------



## Alex_winf01 (22. Jul 2006)

Habe gerade gesehen, dass ich einen Satz etwas blöde und nicht ganz korrekt formuliert habe. Es geht um den folgenden Satz:



> Anwender A hat mehrere Mandanten zu betreuen. Jeder Mandant füllt für sich bestimmte Formulare aus.



Es muss nämlich heissen: 

Anwender A füllt für jeden seiner Mandanten bestimmte Formulare aus. D. h. wenn er z. B. Mandant A und Mandant B zu betreuen hat, soll einmal für Mandant A eine DB erzeugt werden, die die selben Tabellen hat wie die eigenständige DB für Mandant B. Die Datenbanken sollen dann heissen "Programm XYZ Mandant A" und "Programm XYZ Mandant B". Der Anwender A, der die beiden Mandanten betreut, soll und darf auf beide Datenbanken Zugriff haben. Die Ursprungsdaten - ich nenne sie mal - Programm XYZ wird inkl. Tabellen mitgeliefert.

Ich beschreibe es mal anders:

Ich schreibe eine Anwendung, datenbankbasiert. Die Datenbank namens Programm XYZ inkl. Tabellen liefere ich aus. Die MySQL-Umgebung wird lokal beim Anwender installiert, die Datenbank liegt auch lokal.  Es darf nur kein anderer Anwender als Anwender A auf die Anwendung zugreifen.

Die Datenbank Programm XYZ muss dann ja in die MSQL-Umgebung in den Ordner DATA eingebunden werden. Es gibt Anwender, die haben nur einen Mandanten. Viele Anwender haben aber mehrere Mandanten. Für jeden Mandanten wird ein eigener Ordner angelegt. Z. B. Mandant A, Mandant B. In diesen Ordnern, die genauso heissen müssen wie der Anwender (hier also Mandant A und Mandant B) liegt die jeweilige Anwendung. Nun muss bei der Installation für den Mandant A auch die Datenbank in den MySQL-Ordner DATA angelegt werden. Die Datenbank heisst dann *Programm XYZ Mandant A*. Ich muss ja nun in meiner Anwendung die Datenbank ansprechen. Wie die Datenbank heissen wird, wird aber erst bei Installation festgelegt.

Wie kann ich nun folgendes erreichen:

a) Die Datenbank Programm XYZ muss zweimal kopiert werden und umbenannt werden in Programm XYZ Mandant A und Programm XYZ. D. h. im Ordner DATA müssen drei Datenbanken liegen: Programm XYZ, Programm XYZ Mandant A und Programm XYZ Mandant B.
b) Wie kann ich sicherstellen, dass ich dann auf die neu erstellten Datenbanken von Java aus zugreifen kann?


----------



## André Uhres (22. Jul 2006)

Warum musst du unnötigerweise alles kompliziert machen?
Jetzt sag nicht weil das eben so ist, das gilt nicht.


----------



## Alex_winf01 (22. Jul 2006)

Es ist halt so:

Ich kann zwar jeden Mandanten über eine eindeutige Nummer identifizieren, aber ich habe die Vorgabe von meinem Unternehmen, dass z. B. bei Betreuung von zwei Mandanten, dass diese *nicht* in einer Datenbank abgelegt werden. Jeder Mandant soll eine eigene DB erhalten. Leider konnte ich meine Leute bisher nicht vom Gegenteil überzeugen.


----------



## foobar (22. Jul 2006)

So langsam verstehe ich was du machen willst. Ich würde die Daten dennoch in einer DB ablegen und dann darüber eine Zugriffsbeschränkung implementieren. Anders habe ich das auch noch nirgends gesehen. Ich verstehe nicht wie man auf die Idee kommen kann mehrere DBs mit dem selben Schema parallel zu pflegen. Was soll das bringen? Dadurch wird die Anwendung auch nicht sicherer.


----------



## Alex_winf01 (22. Jul 2006)

So war ja auch mein Vorschlag gewesen. Eine Anwendung, in der vorher abgefragt wird, welcher Mandant nun bearbeitet werden soll und dann halt entsprechend Passwort-geschützt.

Aber leider konnte ich die komische Idee von meinen Kollegen noch nicht durchbrechen. Wie würde man denn diese "komische" Idee überhaupt umsetzen? :cry:


----------



## foobar (22. Jul 2006)

Ihr macht euch das Leben unnötig schwer, wenn ihr das so umsetzt. Versuch doch deine Kollegen zu überzeugen, daß das Mist ist. Was versprechen die sich davon ausser viel höhrerem Verwaltungsaufwand? 
Stell dir mal vor diue Anwendung wurde ausgerollt und es gibt eine Schemaänderung. Dann müsst ihr an N-Stellen Änderungen vornehmen anstatt an einer.


----------



## Alex_winf01 (24. Jul 2006)

Mal eine andere Sache:

Wenn ich mir XAMPP anschaue, ist der Ordneraufbau wie folgt:

Ordner XAMPP, hier gibt es die Ordner für Apache, mySQL, php usw. Sobald man das Setup-Programm ausführt, wird mySQL installiert und in den Ordner XAMPP gelegt. Dabei werden alle "lästigen" Einstellungen vom Setup-Programm übernommen.

Mal folgende Idee:

Ich lege so oder so für jeden Mandanten einen eigenständigen Ordner an, der Anwender führt nur eine setup.exe aus. Wie kann ich es dann erreichen, dass mysql z. B. im Ordner Programm xyz Mandant A installiert wird und dann einmal auch im Verzeichnis Programm xyz Mandant B installiert wird? Im Ordner data liegt dann die entsprechende Datenbank.

Wie bei XAMPP möchte ich auch, dass der Anwender keinerlei Einstellungen zwecks Port etc einstellen muss. Leider fehlt mir die Erfahrung, wie man sowas umsetzen muss/kann. ???:L


----------

