der Blog zu demobereich.de

Umstieg auf mod_authn_dbd durch Fehler von mod_auth_mysql

MySQL logoWir haben uns das jetzt eine ganze Weile angesehen, mit kleineren Bugfixes ließ sich das Problem mit mod_auth_mysql leider nicht beheben, also hieß es eine Alternative finden. Aber erstmal zur ganzen Geschichte.

Eine Besonderheit von demobereich ist, dass alle Dienste mit einem einzigen Account genutzt werden können. Dh. nur ein einziges Passwort über alle Projekte und alle Dienste hinweg. Subversion- und Trac-Zugang, genauso wie der Zugang zur Testumgebung. Wird man in ein anderes Projekt eingeladen, funktionieren auch hier die gleichen Zugangsdaten – ein Unified Login sozusagen.

Um das zu erreichen, nutzen wir bei den meisten Diensten eine HTTP-Auth Passwort-Abfrage. Die Standard-Variante hierfür ist die klassische htpasswd-Datei, wir wollten das ganze aber über unsere Account-Manager-Datenbank realisieren. In einigen früheren Blogbeiträgen habe ich schon auf das Apache-Modul mod_auth_mysql hingewiesen, welches wir anfangs genutzt haben.

Dieses Modul wird leider von Seiten der Entwickler nicht sehr gut gepflegt und ist gerade in aktuellen Apache-Servern sehr fehleranfällig. Am Anfang hielten sich die Probleme noch zurück, aber mit steigender Anzahl Nutzer und vor allem steigender Anzahl an Projekte von demobereich erhöhten sich auch die täglichen Fehlermeldungen.

Nach einiger Recherche haben wir nun eine Lösung gefunden: Das Apache-Modul mod_authn_dbd mit mod_dbd als Datenbankschnittstelle. Das Modul bietet die gleichen (bzw. vergleichbare) Möglichkeiten wie mod_auth_mysql, läuft aber wesentlich stabiler.

Die Einbindung gestaltet sich in zwei Teilen: Zum einen gibt es den Deklarationsteil von mod_dbd, in dem die Datenbank-Verbindung hergestellt wird. Zum anderen den eigentlichen Authorisierungsvorgang mit mod_authn_dbd im <location> oder <directory> Eintrag der httpd.conf.

Der erste Teil sieht in etwa so aus:

<IfModule mod_authn_dbd.c>
# mod_dbd configuration
DBDriver mysql
DBDParams „host=localhost,port=3306,dbname=demobereich_auth,user=demobereich_auth,pass=XXXXXX“

DBDMin  4
DBDKeep 8
DBDMax  20
DBDExptime 300
</IfModule>

Eine Passwortabfrage für Subversion würde dann etwa so aussehen:

<Location „/svn“>
DAV svn
SVNPath $strServiceDir
SVNListParentPath on
SVNAutoversioning on

#Auth
AuthType Basic
AuthName „Subversion“
AuthBasicProvider dbd
AuthDBDUserPWQuery „SELECT password_sha FROM $strAuthDatabase.auth WHERE username = %s AND groupname=’$strProjectUri‘;“
require valid-user
</Location>

Und das wars. Wenn ich da an die zahlreichen Konfigurationsprobleme mit mod_auth_mysql zurück denke, wunder‘ ich mich, wieso wir nicht von Anfang an dieses Modul genutzt haben.

Kommentar schreiben

Du kannst diese HTML-Tags und Attribute nutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>