Neue MySQL "moves"

Ich habe heute gleich drei neue MySQL Kniffe gelernt!

Die sind zwar sicher fast jedem, der sich oberflächlich mit MySQL beschäftigt hat klar, aber ich kannte sie zuvor nicht. Dabei sind sie seeeehr hilfreich bei meiner täglichen Arbeit.

Auszugebende Felder auswählen

Will man nur ein paar Felder einer Datenbanktabelle ausgegeben bekommen, oder in einer bestimmten Reihenfolge, so kann man das mit folgendem select Befehl tun:

select feld1,feld4,feld3 from datenbank.tabelle;

oder, für einen speziellen Datensatz

select feld1,feld4,feld3 from datenbank.tabelle where feld1='wert';

Hashes erzeugen

Man kann MySQL direkt anweisen, aus einem String einen Hash zu erzeugen. Hat man z.B. keine Ahnung, mit welchem Algorithmus (MD5,SHA,Crypt, ...) eine Applikation ein Passwort in einer Datenbank abgelegt hat, kann man das wie folgt herausfinden:

  1. Anzeigen des Hash - z.B.  "select User,Host,Password from mysql.user where User='root';"
  2. Generieren eines Hashes per "select PASSWORD('DasPasswortDesUsers');"
  3. Ist der Hash gleich dem im Feld Password aus dem ersten Befehl, hat man den Algorithmus.

Es gibt auch noch die Hashfunktionen MD5, SHA, etc. Diese generiert man dann per MD5('pass');, SHA('pass);, usw.

Änderung der Passwortgenerierung zwischen den MySQL Versionen

Zunächst sollte man sich mal diesen Artikel durchlesen.

Mit MySQL 4.1 wurde eine neue Methode zur Passwortgenerierung eingeführt.

Hat man noch Datenbanken aus früheren Versionen, kann man diesen Hash mit der MySQL Funktion OLD_PASSWORD (wie in Tipp 2 dieses Artikels beschrieben) generieren.

Teilen per: TwitterEmail


mod_auth_mysql Problem bei Migration von apache1 zu apache2

Neeeee - was ärgert mich sowas:

Ich bin seit 2 Stunden dran um einen Fehler bei der mod_auth_mysql Authentifikation des Apache2 Webservers zu finden, und die einzige Webresource in der ich fündig werde (nach 2 Stunden, wohlgemerkt) ist ein italienisches Privatblog.

Ich hatte das Problem, das nach der Umstellung nur noch folgender Fehler in Logfile geschrieben wurde:

(9)Bad file descriptor: Could not open password file: (null)

Mich hatte es zwar schon stutzig gemacht, das da etwas von einer Passwort Datei stand, aber kapiert habe ich es soweit erstmal nicht, da ich nicht wusste ob die MySQL Tabelle evtl. aus Sicht des Servers tatsächlich eine Art "Passwortdatei" ist.

Auf jeden Fall lag es letzten endes daran, das Apache2 authz_user standardmäßig aktiviert, was der Apache1 nicht tut. Also erwartet er auch die Übergabe einer Passwortdatei. Diese war nicht definiert, also spuckt er die obige Fehlermeldung aus.

Behoben werden kann es ganz einfach, indem in der Apache2 Server-Config (httpd.conf, .htaccess, etc.) die folgende Einstellung gesetzt wird:

AuthBasicAuthoritative Off

Das war's! :)

(01.09.2008)
PS:

Nach der oben beschriebenen Methode kann man sich zwar wieder über niedriger priorisierte Authentifikationsmodule wie z.B. mod_auth_mysql anmelden, es erscheint im error-log jedoch nach wie vor die Meldung

(9)Bad file descriptor: Could not open * file: (null)

Dieses kann man beheben, indem man zusätzlich zu "AuthBasicAuthoritative Off" die folgenden zwei Einstellungen setzt:

AuthUserFile /dev/null
AuthGroupFile /dev/null

War mir irgendwie erst heute aufgefallen, das das nach wie vor geschrieben wird ... \~:)

Teilen per: TwitterEmail