Allg. DB-Frage: Passwortschutz in Filesystem

Oli_73

Grünschnabel
Hallo zusammen


Istzustand:

Existierende Javaapplikation wird unter dem UNIX-User "pmcs" gestartet und liest ein Konfigurationsfile ein. Dieses enthält auch die DB-Connection Parameter, also auch das DB-Passwort.

Auf dem UNIX - System existierten sonst noch keine anderen RDBMS's, womit ich andeuten möchte, dass allenfalls auch dort Anpassungen/Erweiterungen bezüglich neue User/Gruppen gemacht werden müssten.
Allerdings wären solche Eingriffe nur als absolute Notlösung zu sehen, da es sich um sicherheitsrelevante Systeme handelt, die möglichst *nicht* verändert werden sollen.


Problem:

Der "pmcs" - User ist nun natürlich auch in der Lage das Konfigurationsfile auf Filesystemebene auszulesen/anzuschauen. Dies ist natürlich nicht Sinn der Sache, da der User somit die Benutzerauthentifizierung der Javaapplikation umgehen kann und somit direkten Vollzugriff auf die Datenbank über ein Clienttool hätte.


Ich kann mir schon vorstellen, dass der Admin das Passwort in das Konfigfile schreibt, mit einem Flag, das angibt, dass das Passwort noch unverschlüsselt ist.
Bei Applikationsstart würde dies erkannt, das Passwort gelesen, verschlüsselt, wieder ins Konfigfile geschrieben inkl. dem geänderten Flag, das angibt, dass das Passwort jetzt verschlüsselt ist. Die Applikation würde dann die Verschlüsslung rückgängig machen und somit auf die Datenbank zugreifen können.
Naja, etwas umständlich - es muss aber eine vernünftigere Lösung geben für dieses Problem.

Vielen Dank fürs lesen und ev. eine gute Antwort
Oliver
 
hi oli_73,

warum wird der db-zugang aus einer datei ausgelesen und nicht von der db erledigt.
ist schon klar, dass der user db-name, -host, etc. kennen muss, aber warum auch noch nutzername und password(fuer db-root?). lasse ihn doch diese beiden strings eingeben, versuche mit dem usernamen, password eine db-connection herzustellen, wenns klappt ist alles ok, wenn nicht schenkst du dem user eine fehlermeldung.

welches unix benutzt du?
 
Hallo waterhouse533-lp

Vielen Dank für Deine Antwort.

warum wird der db-zugang aus einer datei ausgelesen und nicht von der db erledigt.
*** Wenn ich Dich recht verstehe meinst Du damit, dass der Benutzer der Javaapplikation sich gegenüber dieser mit dem Benutzernamen und Passwort der Datenbank authentifizieren soll. (Auf die Frage gehe ich weiter unten ein)

ist schon klar, dass der user db-name, -host, etc. kennen muss, aber warum auch noch nutzername und password(fuer db-root?).
lasse ihn doch diese beiden strings eingeben, versuche mit dem usernamen, password eine db-connection herzustellen, wenns klappt ist alles ok, wenn nicht schenkst du dem user eine fehlermeldung.
*** Der Applikationsbenutzer soll eigentlich gar nichts wissen von Connectionparametern oder Datenbank, denn er steht ja auch nicht in direkter Interaktion mit der Datenbank.
Möglicherweise verstehe ich Deine Aussage aber auch falsch. Wenn ich 100 verschiedene Benutzer der Javaapplikation habe, sich diese Benutzer gegenüber der Javaapplikation mit dem db-benutzernamen und db-passwort authentifizieren, dann müssten diese 100 Benutzer ja auch als db-benutzer existieren.
Als "Datenbankbenutzer-Accounts" möchte ich allerdings nur einen Rootbenutzer, und 1 oder 2 andere Benutzer mit eingeschränkteren Rechten verwalten müssen, damit ich die Ebene Datenbank und Applikation getrennt halten kann.
Datenbankbenutzer unterscheiden sich aus meiner Sicht durch ihre unterschiedlichen Zugriffsrechte - die Konsequenz Deines Vorschlags wäre (wenn ich ihn denn richtig verstanden habe), dass u.U. 100 DB-Benutzer erstellt würden, jeder mit den gleichen Rechten.
Als weiteren sicherheitstechnisch unakzeptablen Nachteil sehe ich, dass sich der Applikationsbenutzer auch mit einem anderen Clienttool, mit demselben DBusernamen und DBpasswort direkt gegenüber der Datenbank authentifizieren könnte und somit in der Lage wäre, die DB ungeschützt zu manipulieren... nicht gerade als Rootbenutzer, denn ich hätte ja die schon erwähnten 1 oder 2 anderen Benutzer erstellt, aber beispielsweise wäre die Löschung von Records oder auch ganzen Tabellen ohne weiteres möglich!

welches unix benutzt du?
*** Das Produktionssystem wird Solaris 8 sein, entwickeln tu' ich auf MAC OS X, allenfalls führ' ich auch mal nen Performancetest auf Linux durch.

Grüsse
Oli
 
ok, ein beliebiger benutzer soll mit dem javatool die db manipulieren koennen, ohne sich authentifizieren zu muessen? er soll aber unter keinen umstaenden mit einem anderen tool auf die db zugreifen koennen?
heisst das nicht, dass jeder der das javatool besitzt, die db zerlegen kann wie er will?
sollen alle nutzer die gleichen rechte haben?
 
Ne, natürlich nicht. Selbstverständlich hat die Javaapplikation ne eigene Benutzerauthentifizierung (siehe erster Post):
Dies ist natürlich nicht Sinn der Sache, da der User somit die Benutzerauthentifizierung der Javaapplikation umgehen kann...
Das einzige, was ich mit meinem letzten Post sagen wollte ist, dass eine Applikation eine von der Datenbankbenutzerverwaltung getrennte Benutzerverwaltung erfordert.

Ein Benutzer darf sich gegenüber einer Applikation nicht mit Benutzername und Passwort der *Datenbank* authentifizieren, weil sonst der Zugriff auf die Datenbank nicht mehr zwangläufig über die Applikation geschehen muss, sondern auch durch ein beliebiges DB-Clienttool.
Die Applikation selbst muss aber über die Benutzerdaten der DB verfügen, weil sie sonst keinen Zugriff auf die DB hat.

Somit sind wir wieder beim ursprünglichen Problem: Woher hat die Applikation die vertraulichen Datenbankzugriffsparameter wie Datenbankbenutzername und Datenbankpasswort?

Hoffe, dass die Problematik jetzt verständlicher ist.

Cu
Oli
 
ehrlich gesagt fallen mir nur irrsinnig komplizierte konstrukte ein, die alle eine zusaetzliche authentifizierungsschicht zwischen applikation und db legen. das ist natuerlich alles schwachsinn. ist es nicht wirklich besser der db die anmeldung zu ueberlassen. dadurch musst du das rechtesystem in der db abbilden, stimmt. im moment musst du doch aber das rechtesystem komplett auf applikationsebene erarbeiten, d.h. entweder haben alle deine nutzer die gleichen zugangsdaten fuer das java-programm oder dass javaprogramm kennt alle benutzeridentitaeten. wie fuegst du dort neue benutzer hinzu, loescht alte usw? in der db hast du eine zentrale stelle fuer diese arbeit, du must nicht die programme oder konfigfiles auf vielen rechner aendern.
 

Neue Beiträge

Zurück