Spring Boot 3 Datenbanken zur Laufzeit Verbinden

magic_ma

Mitglied
Guten Abend,

Ich stehe vor einer Herausforderung, bei der ich nicht weiterkomme. Ich glaube, dass es im Grunde genommen recht einfach ist, aber ich kann den Wald vor lauter Bäumen nicht sehen.

Ich arbeite gerade an einer Spring Boot-Anwendung und versuche, eine Datenbank während der Laufzeit dynamisch zu verbinden.

Details:
Benutzerdatenbanken sind in einer Datenbank namens "Klienten" gespeichert, wobei jede Benutzerinformationen in der Tabelle "Benutzer" enthält. Jeder Benutzer hat eine eigene Datenbank, und die URL, der Name und das Passwort für diese Datenbank sind in der "Benutzer"-Tabelle gespeichert. Nach einem erfolgreichen Login lese ich diese Zugangsdaten aus und möchte die Benutzerdatenbank als Bean für die Repositories verfügbar machen.

Frage 1: Wie kann ich dynamisch zur Laufzeit ein DataSource Bean erstellen?
Frage 2: Wie greife ich in meinen Repositories auf diese Datenbank zu?

Danke für die Hilfe

Grüße
Magic
 
Vielen Dank für die prompte Rückmeldung. In diesem System werden sämtliche Benutzerdatenbanken nicht zentral in einer Datenbank, sondern separat in Property-Dateien gespeichert. Das stellt an sich eine interessante Alternative dar. Jedoch stellt sich die Frage nach der Sicherheit: Ist es sicherer, Datenbankinformationen in Property-Dateien oder in einer Datenbank zu speichern?
 
Wo Du die Informationen speicherst, ist doch egal. Du musst nur den Code in public DataSource dataSource() anpassen, der die ganzen Datenquellen bereit stellt. In dem Beispiel wird eine Property Datei genutzt, aber das ist ja relativ frei veränderbar.

Zur Sicherheit lässt sich pauschal nicht viel sagen. Da sind erst einmal die Anforderungen wichtig. Im Anschluss kann man dann schauen nach Lösungen schauen. Am Ende liegen die Daten so oder so irgendwo auf einer Festplatte - Und da wird dann drauf zugegriffen. Und beides kann relativ sicher sein oder eben auch unsicher.
 
Jedoch stellt sich die Frage nach der Sicherheit: Ist es sicherer, Datenbankinformationen in Property-Dateien oder in einer Datenbank zu speichern?
Man kann die Inhalte von Property-Dateien verschlüsseln, z.B. mit http://www.jasypt.org/. Beim Start gibt man dann den Encryption-Key mit. Wir nutzen das für alle Anwendungen, welche nicht unter K8s laufen. Dort verwendenden wir Secrets. Das gibt es auch schon unter pur Docker, als docker secrets.
Aber natürlich sind solche Daten, wie überall, für alle zugänglich, die direkten Zugang zu diesen Systemen haben. Bspw. könnte man mit einen Speicherabbild oder Debugger die Inhalte von Variablen auslesen.
 

Zurück
Oben