Moin Moin!
Ich brauche also
- Portabilität (d.h. ohne Installation sofort und von USB-Stick)
Installation ist auch unter Windows nicht zwangsweise nötig, man kann (einige) Applikationen auch einfach auf irgendein Laufwerk kopieren und von dort starten.
"Richtige" Datenbanken (Oracle, PostgreSQL, SQL Server) müssen aber so tief ins System eingebunden werden, dass Du dort sehr wahrscheinlich nicht ohne Installation auskommen wirst.
SQLite kann in eine Applikation gelinkt werden und verwaltet dann völlig einenständig und ohne Installation eine relationale Datenbank mit SQL-Interface, die als Storage nur ein Verzeichnis auf irgendeinem Laufwerk braucht.
- Daten werden nur auf USB-Stick angelegt
s.o. SQLite würde passen.
- Unterstützung von alternativen BS wäre auch nicht verkehrt
Welche?
BeOS? Xenix? Solaris? Irgendwelche BSDs? FreeDOS?
Da wirst Du mit einer Windows-EXE nicht weit kommen. Nimm irgendeine gängige Scriptsprache oder eine auf einer VM aufsetzende compilierte Sprache wie z.B. Java, für die auf den "alternativen BS" standardmäßig ein Runtime Environment vorhanden ist, und pack ein entsprechendes Runtime Environment für Windows auf den Stick. Nach Deinen Anforderungen muß dieses ohne Installation auskommen, also scheidet Java (meines Wissens) schon mal aus.
Perl ist auf gängigen Unixen vorhanden, allerdings nicht immer in der neuesten Version. Für Windows gibt es z.B. Strawberry Perl Portable, dass ohne Installation auskommt.
SQLite gibt es für Perl (DBD::SQLite), allerdings mußt Du es in aller Regel selbst compilieren. Das kann ggf. "on demand" auf dem Stick erfolgen, wenigstens Strawberry Perl bringt freundlicherweise gleich einen kompletten C-Compiler samt make & Co mit. Auf "alternativen BS" sieht es mit dem C-Compiler allerdings gelegentlich etwas finster aus.
Wenn ich die Datenbank dann auch noch (nach Eingabe des Passworts) portabel auf dem Stick bearbeiten kann, umso besser.
Was für ein Passwort? Schon wieder eine neue Anforderung?
Wie willst Du den Passwort-Schutz haben: Nur sicher gegen Amateure? Dann pack einfach eine Tabelle mit Namen und ge-hash-tem und ge-salt-etem Passwort in die DB und prüfe beim Login, ob für den eingegebenen Namen ein Datensatz existiert, für den der "salted hash" des EINGEGEBENEN Passworts mit dem Wert in der DB übereinstimmt.
Wenn Du mehr brauchst, wirst Du die DB hart verschlüsseln müssen - nicht unproblematisch, denn zum Arbeiten braucht die Anwendung einen Schlüssel um Entschlüsseln, und den Entschlüsselungsalgorithmus. Ein versierter Angreifer kann damit alle Daten zurückgewinnen. Du mußt also dafür sorgen, dass der Schlüssel erst dann verfügbar ist, wenn ein passendes Passwort eingegeben wurde. Z.B. indem Du den Schlüssel mit dem Passwort hart verschlüsselst.
Noch besser wäre, wenn ich auch die Dialogführung von meiner Datenbank abhängig machen kann. Dann könnte ich nämlich ein Software-Update per Aktualisierung der Datenbank durchführen.
Mit einer Scriptsprache ist es kein großes Problem, große Teile des Programmcodes in der Datenbank zu halten. Ob das clever oder sinnvoll ist, ist eine andere Frage.
Warum tauschst Du für Updates nicht einfach die alten USB-Sticks gegen neue, die ein Script auf deinem Master-Server vollautomatisch löscht und mit dem neuesten Stand bespielt?
Wenn Du einen Internet-Zugang (minimal HTTP) voraussetzt, kannst Du Dir das ganze Theater sparen und die Daten stumpf über HTTP abfragen und ausliefern, Du mußt nicht alle Daten in die Hände Deiner Kunden geben, usw. usw. Und HTTP/HTTPS funktioniert ab Win98 relativ schmerzfrei (wenn auch wegen des antiken IEs nicht immer hübsch), auch auf so ziemlich jedem anderen Betriebssystem, dass einen Browser mitbringt.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".