Server-Daten sichern/verschlüsseln

remy

Aktives Mitglied
Hi,

mein Problem ist eigentlich einfach erklärt, aber ich komme auf keine vernünftige Lösung, vielleicht habt ihr ja eine Idee.

Ein Java-Programm verbindet sich zu einer SQL-DB, momentan stehen die Verbindungsdaten (Server, DB, User und Passwort) noch im Klartext im Code. Wie unsicher das ist bzw. wie einfach man an die Daten rankommt, muss ich hier keinem erzählen 😉

In diesem Programm gibt es keine User-Verwaltung, viele Leute kommen an das Programm. Welche Möglichkeit gibt es nun, die DB-Daten so zu verschlüsseln, dass man nicht mehr so einfach daran kommt?

VG!
 
Auf nen Server ablegen. Von allem anderen würde ich dir dringend abraten. Wenn wirklich so viele rankommen, zieht sich einer schnell mal ne Kopie, und knackt die Verschlüsselung über kurz oder lang. Auf nen Server hast du Abwehr/Überwachungsmöglichkeiten für Zugriffe etc., außerdem wirkt das alleine schon abschreckender als eine lokale Datei. ^^
 
Zuerst war ein User-System angedacht, das man direkt an die DB hätte koppeln können... aber das scheint mal wieder zu aufwändig für die Bedienung zu sein 😉

Auf welcher Art Server soll die Datei liegen? Im Netzwerk gibt es so viele ungesicherte Computer, teilweise ohne personenbezogenen Login, dass eine konkrete Nachverfolgung unmöglich ist. Selbst wenn die Datei passwortgeschützt irgendwo liegt, müssen wieder diese Daten irgendwo für das Programm lesbar hinterlegt sein.

Andere Idee? 🙁
 
Wenn es im Programm keine Userverwaltung gibt, hat ja jeder Zugriff auf alle Daten. Ist es dann wirklich notwendig, die Datenbank so aufwändig zu schützen, wenn sowieso jeder ran kann?
 
also im code sollten verbindungsdaten imho eh nie stehen. dazu gibt es properties o.ä.
könntest du eine client/server lösung vorziehen. der server kommuniziert über windows auth bzw. properties-gesteuerten sql-auth mit der datenbank und der client kommuniziert mit dem server. oder habe ich da was falsch verstanden? 🙂
 
nutze doch einfach die Benutzerverwaltung von der Datenbank ... die ist nicht nur da um kompliziert auszusehen
 
Wenn es im Programm keine Userverwaltung gibt, hat ja jeder Zugriff auf alle Daten. Ist es dann wirklich notwendig, die Datenbank so aufwändig zu schützen, wenn sowieso jeder ran kann?
ein gutes Argument 🙂 hinzufügen und ändern von Datenbeständen in der DB sind zwar vom Programm vorgesehen, dennoch wird das auf nur sehr wenige Einträge in der DB restriktiert (Daten der letzten 24h).
So sind wenigstens alle anderen Einträge geschützt und die Manipulationsmöglichkeiten wären eingegrenzt.

also im code sollten verbindungsdaten imho eh nie stehen. dazu gibt es properties o.ä.
könntest du eine client/server lösung vorziehen. der server kommuniziert über windows auth bzw. properties-gesteuerten sql-auth mit der datenbank und der client kommuniziert mit dem server. oder habe ich da was falsch verstanden? 🙂
Hab leider nicht genau verstanden, was du da meinst :/ das Programm kommuniziert direkt mit einer SQL-DB, ohne Umwege über andere Server.

nutze doch einfach die Benutzerverwaltung von der Datenbank ... die ist nicht nur da um kompliziert auszusehen
genau das war mein Plan, aber eine Benutzerverwaltung ist im Programm nicht erwünscht. 🙁

(ein DANKE zwischendurch für die schnellen Antworten 🙂)
 
nutze doch einfach die Benutzerverwaltung von der Datenbank ... die ist nicht nur da um kompliziert auszusehen

meinst du damit alle user, die auf mit dem programm arbeiten, auf der datenbank anlegen und mit windows-auth authentifizieren?

Hab leider nicht genau verstanden, was du da meinst :/ das Programm kommuniziert direkt mit einer SQL-DB, ohne Umwege über andere Server.

naja das programm kommuniziert halt dann mit einem server, den du natürlich noch programmieren musst. der server dann mit der datenbank. ich weiß ja nicht, wie professionell das programm werden soll aber das ist imho der normale weg für sowas.
 
genau das war mein Plan, aber eine Benutzerverwaltung ist im Programm nicht erwünscht. 🙁
Du sollst nicht im Programm eine Benutzerverwaltung ein bauen ... im Programm reicht ein Login-Maske

wenn Du eine Benutzer hast der nur Lesen darf, dann legst Du nur einen Benutzer mit SELECT-Rechten an ... einer der ändern darf, der bekommt noch UPDATE, INSERT & DELETE ... jede vernüftige DB kann die Rechte sogar auf die Spalten verteilen ... außerdem kannst Du noch VIEWs anlegen und dort entsprechend Rechte verteilen ... genau für solche Spielchen gibt es die Benutzerverwaltung in den DBs

Nachtrag: die Benutzerdaten kannst Du natürlich einfach weiter reichen

Nachtrag2: ist ist übrigens sinnvoll eine Nutzer nur mit INSERT-Rechten zur eigene Log-Table anzulegen ... den kannst Du dann nutzen um die Aktionen der Benutzer zu loggen ... die Zugangsdaten kannst Du (mehr oder weniger) im Quelltext hinterlegen ... Daten kann der Benutzer ja nicht löschen - nur schreiben
 
Zuletzt bearbeitet von einem Moderator:
meinst du damit alle user, die auf mit dem programm arbeiten, auf der datenbank anlegen und mit windows-auth authentifizieren?
jain - ich weis gar nicht ob das mit Java überhaupt funktioniert ... mit C# und MS-SQL geht das so ... hängen alle Rechner in einer Domain, kann man alles easy über den Domaincontroller lösen
 
naja das programm kommuniziert halt dann mit einem server, den du natürlich noch programmieren musst. der server dann mit der datenbank. ich weiß ja nicht, wie professionell das programm werden soll aber das ist imho der normale weg für sowas.

eine gute Idee, aber das ist doch auch nur ein Umweg?! Letztendlich könnte man die Kommunikation zwischen diesen beiden Programmen aus dem eigentlichen Programm auslesen, ein neues Programm schreiben und damit wieder die DB manipulieren, wenn auch nicht direkt.

Du sollst nicht im Programm eine Benutzerverwaltung ein bauen ... im Programm reicht ein Login-Maske

wenn Du eine Benutzer hast der nur Lesen darf, dann legst Du nur einen Benutzer mit SELECT-Rechten an ... einer der ändern darf, der bekommt noch UPDATE, INSERT & DELETE ... jede vernüftige DB kann die Rechte sogar auf die Spalten verteilen ... außerdem kannst Du noch VIEWs anlegen und dort entsprechend Rechte verteilen ... genau für solche Spielchen gibt es die Benutzerverwaltung in den DBs


Nachtrag: die Benutzerdaten kannst Du natürlich einfach weiter reichen

Nachtrag2: ist ist übrigens sinnvoll eine Nutzer nur mit INSERT-Rechten zur eigene Log-Table anzulegen ... den kannst Du dann nutzen um die Aktionen der Benutzer zu loggen ... die Zugangsdaten kannst Du (mehr oder weniger) im Quelltext hinterlegen ... Daten kann der Benutzer ja nicht löschen - nur schreiben

Dennoch habe ich eine Login-Maske mit Benutzerdaten.

Wie gesagt, am liebsten hätte ich auch eine Lösung, wo sich die Benutzer mit Benutzerdaten, die in der DB hinterlegt sind, anmelden. Sicherheit, Logging, Änderungsverfolgung usw. wären damit gegeben. Das Problem ist, dass das Programm auf Computern in einem Betrieb läuft, auf dem einige Leute rumspielen. Das Programm bietet dem Nutzer eine Eingabemaske mit Feldern, die immer wieder mal geändert werden, eben von diesen Leuten. Das bedeutet, der DB-Account, mit dem das Programm auf die DB zugreift, muss mindestens die Rechte für Inserts und Updates haben. Damit können zwar keine Einträge gelöscht, dafür aber geleert bzw. mit Unsinnsinformationen befüllt werden.

Ein Idee, die mir grade gekommen ist, sind Stored Procedures. Sehr wahrscheinlich werde ich eine MySQL-DB bekommen. Ist es möglich, dass ausschließlich zugewiesene Procedures von einem speziellen Benutzer ausgeführt werden? Damit könnte ich doch verhindern, dass nur Einträge der letzten 24h geändert werden können?!
Edit: noch etwas genauer: der Benutzer darf NUR Procedures ausführen, keine weiteren Aktionen wie z.B. Update. Dabei muss noch bedacht werden, dass die Procedures u.a. Updates enthalten.

Edit 2: sollte ich vielleicht hier im DB-Forum noch mal fragen oder gilt das dann als Cross-Posting?
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben