Wenn bei, wie in meinem Fall, einer containerisierten Version von audiobookshelf das Passwort des Admin-Benutzers nicht mehr bekannt ist, so kann dieses mit ein paar Aufrufen in der SQLite-Datenbank zurückgesetzt werden.
Hierzu benötigt man einen Shell-Zugriff, z.B. per SSH auf das System, auf dem die Datenbank von audiobookshelf vorliegt.
Wichtig: bevor die nachfolgenden Schritte ausgeführt werden, sollte der auf die Datenbank zugreifende audiobookshelf Container gestoppt und sichergestellt werden, dass keine schreibenden Zugriffe auf die Datenbank mehr erfolgen. Es empfiehlt sich, vor den Arbeiten ein Backup der Datenbank anzulegen.
Mit dem nachfolgenden Befehl wird die Datenbank zur Bearbeitung geöffnet:
sqlite3 /docker/audiobookshelf/config/absdatabase.sqlite Anschließend kann man sich die vorhandenen Tabellen anzeigen lassen (der Punkt vor dem Befehl ist beabsichtigt):
.tablesAufklappen wenn die Ausgabe eine Fehlermeldung ist.
Solle eine Fehlermeldung bezüglich eines fehlerhaft formatierten Datenbankschema ausgegeben werden, kann der hier beschriebene Zwischenschritt ausgeführt werden.
Error: malformed database schema (update_library_items_author_names_on_book_authors_insert) - near "ORDER": syntax error
Hier kann versucht werden, mit der Wiederherstellungsoption das Schema zu reparieren:
.recoverNun sollte es auch möglich sein, sich die Tabellen anzeigen zu lassen:
.tablesSequelizeMeta devices playbackSessions
apiKeys feedEpisodes playlistMediaItems
authors feeds playlists
bookAuthors libraries podcastEpisodes
bookSeries libraryFolders podcasts
books libraryItems series
collectionBooks mediaItemShares sessions
collections mediaProgresses settings
customMetadataProviders migrationsMeta users
Für unser Vorhaben ist die Tabelle „users“ interessant und mit dem folgenden Befehl können wir uns das Schema der Tabelle anzeigen lassen:
.schema usersCREATE TABLE `users` (`id` UUID PRIMARY KEY, `username` VARCHAR(255), `email` VARCHAR(255), `pash` VARCHAR(255), `type` VARCHAR(255), `token` VARCHAR(255), `isActive` TINYINT(1) DEFAULT 0, `isLocked` TINYINT(1) DEFAULT 0, `lastSeen` DATETIME, `permissions` JSON, `bookmarks` JSON, `extraData` JSON, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
Das Passwort der Benutzer wird unter „pash“ als Hash-Wert abgelegt.
Mit folgenden Befehl können wir uns die Datensätze der Benutzer ausgeben lassen.
SELECT * FROM users;In der Ausgabe steht in der zweiten Spalte der jeweilige Benutzername (<username>)
Mit dem nachfolgenden Befehl lassen wir uns den Hash-Wert aus „pash“ des Benutzers <username> anzeigen, dessen Passwort wir zurücksetzen wollen. Hier sollte eine Ausgabe des gehashte Passwortes erfolgen. Der Wert selbst ist uns allerdings egal.
SELECT pash FROM users WHERE username = "<username>";Durch den folgenden Befehl ändern wir den Wert in „pash“ des Benutzers <username>, bzw. löschen das hinterlegte, gehashte Passwort. Zwischen den beiden doppelten Anführungszeichen nach „pash“ befindet sich nichts, es sind zwei aufeinanderfolgende Zeichen.
UPDATE users SET pash "" WHERE username = "<username>";Zur Kontrolle kann mit einem wiederholten Absetzen des folgenden Befehls geprüft werden, ob das Passwort gelöscht wurde und nun kein Hash-Wert mehr unter „pash“ des Benutzers <username> vorhanden ist.
SELECT pash FROM users WHERE username = "<username>";Die Bearbeitung der Datenbank kann nun beendet, bzw. die Datenbank verlassen werden.
.quitAbschließend kann der Container audiobookshelf gestartet werden. Bei der Anmeldung ist nun der Benutzername <username> zu verwenden und das Passwortfeld wird leer gelassen. Idealerweise sollte direkt ein neues Passwort vergeben werden.