Die User-Datenbank ist eine Text-Datei mit einem speziellen Format. Sie sollte in einem von aussen nicht zugreifbaren Verzeichnis abgelegt werden. Die Einträge sind verschlüsselt. Wo die Datenbank gespeichert ist, wird durch durch die beiden Variablen WIKI_ROOT + WIKI_USERS festgelegt. WIKI_ROOT wird jeweils in der index.asp Datei eines Wikis definiert und WIKI_USERS in WIKI_ROOT + app_stuff/wikidefaults.inc.
Die User-Datenbank wird über Erweiterte Wiki-Funktionen von einem Administrator verwaltet:
Hat ein User sein Passwort vergessen, muss ein Administrator dem User ein neues Passwort zuweisen, da selbst der Administrator das alte Passwort nicht herausfinden kann.
Ein Passwort kann prinzipiell auf keine Art und Weise irgendwie ermittelt werden! Meldet sich ein User beim Wiki an (Login), so wird aus dem im Login-Formular eingegebenen Passwort der Hash-Wert berechnet und dieser wird mit dem Hash-Wert in der Datenbank verglichen. Stimmen die beiden Hash-Werte überein, bekommt der User Zugriff.
Die User-Datenbank ist eine reine Text-Datei in einem an XML angelehnten Format.
<Tag>Wert</>
<Tag> weitere Tags... </Tag>
Die Reihenfolge der benannten Tags ist beliebig. Leerzeilen werden ignoriert, ebenso Zeilen mit einem HTML-Kommentar.
<WikiUsers> <User> <Name>Username</> <Password>Passwort</> <DefaultRight>AccessLevel</> <DefaultOwnerRight>AccessLevel</> <WikiRights>AccessList</> <OwnerRights>AccessList</> </User> <User> <!-- Weiterer User --> </User> </WikiUsers>
Alle Tag-Werte sind verschlüsselt. Die Einträge werden über die User Administration erzeugt oder verändert. Die Einträge haben folgende Bedeutung:
Wenn ein bestimmtes Wiki nicht in einer der Listen WikiRights und OwnerRights aufgeführt ist, so gelten die bei DefaultRight bzw. DefaultOwnerRight angegebenen Rechte. Werden dort auch keine Angaben gemacht, so gelten die Standardrechte, welche bei den Wikis bzw. den übergeordneten Wiki-Gruppen definiert sind.
Dieser User hat im Wiki Aviatik das Recht, Seiten zu editieren (kann keine neuen Seiten anlegen) und hat im Wiki Biologie Verwaltungsrechte (kann alles machen). Für alle anderen Wiki gelten die bei DefaultRight und DefaultOwnerRight festgelegten Rechte bzw. die in der Wiki-Konfiguration festgelegten Rechte.
Achtung: Administrator-Rechte können nicht nur einem bestimmten Wiki zugeordnet werden. Wenn ein User Administrator-Rechte hat, dann hat er diese in allen Wiki, selbst wenn sie nur einem Wiki zugeordnet sind!
Das Wiki unterscheidet 4 User-Typen:
Jeder User wird vom Wiki in einen der 3 Typen Public, Registered oder Owner eingestuft. Für jeden Usertyp können Zugriffsrechte auf Wiki-Seiten und Funktionen definiert werden. Für registrierte User können individuell für jedes Wiki andere Rechte eingestellt werden. Werden bei einem User keine Rechte angegeben, so gelten die Standardrechte, welche beim entsprechenden Wiki definiert sind oder globale Rechte, wenn dort auch nichts angegeben ist.
Die Rechte werden in verschiedenen Stufen eingestellt. Jede weitere Stufe schliesst die Rechte der vorherigen Stufe mit ein. Folgende Rechte können vergeben werden:
Alle Einträge in der User-Datenbank sind verschlüsselt. Die Verschlüsselung ist derart, dass die Datenbank gegen Manipulationen geschützt ist. Versucht z.B. jemand in der Datenbank, ein Passwort oder eine Berechtigung von einem User zu einem anderen zu kopieren, erkennt das Wiki diese Manipulation und stopt mit der Fehlermeldung Wiki User Database corrupt.
Für Passwörter wird ein Hash-Wert generiert und der verschlüsselte Hash-Wert wird anstelle des Passwortes in der Datenbank gespeichert. Damit kann ein Passwort selbst dann nicht ermittelt werden, wenn es gelingt, die User-Datenbank zu entschlüsseln.
Die Berechnung des Hash-Wertes ist nicht umkehrbar. Das heisst, aus einem Hash-Wert kann nicht auf das Passwort geschlossen werden. Selbst dann nicht, wenn Algorithmus und Schlüssel zur Berechnung des Hash-Wertes bekannt sind.