| |
|
SOFTWARE |
|
|
|
|
|
Wieso es beim Zugriff auf MySQL zu Access denied-Meldungen kommen kann, hat viele mögliche Ursachen. Die folgende Checkliste sollte deshalb gründlich durchgearbeitet werden. - Wurden dieMySQL Grant-Tabellen mittels des Scipts: mysql_install_dberzeugt ? Um dies zu testen, sollte der Befehl mysql-u root test ausgeführt werden, welcher keine Fehlermeldungerzeugen sollte. Ferner kann geprüft werden, ob eine Dateimit dem Namen user.ISD im Datenbankverzeichnis(Installationsverzeichnis/var/mysql/user.ISD)vorhandenist.
- Nach einerErstinstallation sollte mittels mysql -u root mysqleine Verbindung auf die Grant-Tabellen erfolgen und alleRechte gesetzt werden.
- Nach jederÄnderung in der Zugriffsberechtigung ist ein mysqladminreload erforderlich, damit die Änderungen auch greifen.Zum testen kann der mysqld-Daemon mit der Option--without-grant-tables gestartet werden. Dann könnendie Grant-Tabellen angepaßt und mittels mysqlaccessüberprüft werden. Mittels mysqladmin reload wirdder Daemon mit den geänderten Grant-Tabellen neu gestartet.
- Auch bei Zugriffsproblemen
von PERL, Python oder ODBC aus sollten die Tests mittels
mysql -u User Database oder mysql -u User -pPassword
Database durchgeführt werden. Zwischen dem Schalter
-p und dem eigentlichen Paßwort ist kein Leerzeichen
erlaubt. Die Syntax --password=Passwordkann statt
dessen verwendet werden.
- Kommt es zu
der Meldung Access denied beim Zugriff mittels
mysql -u user database liegt dies an einer nicht
korrekten Einstellung in der user-Tabelle. Zur
Überprüfung sollte man sich mittels mysql -u root mysql
verbinden und die Tabellen durch das Kommando select
* from user anzeigen lassen. In der Tabelle muß auf
alle Fälle ein Eintrag für User und Hostname
enthalten sein, welcher mit dem aktuellen Benutzer und
Host übereinstimmt. Werden Client und Server auf dem gleichen
Host ausgeführt, und es wurde nicht die mysql-
Option --host sowie das MIT-pthread-Packet verwendet,
ist localhost ein Synonym für den Hostnamen.
- Die Access
denied-Meldung zeigt zusätzlich an, mit welchem Benutzernamen,
von welchem Host aus man einen Connect aufbauen wollte
und ob man ein Paßwort verwendet oder nicht. In der user-Tabelle
sollte ebenfalls ein Eintrag enthalten sein, der mit diesen
Angaben (User und Hostname) genau übereinstimmt.
- Kommt es zu
der Meldung Host... is not allowed to connect to this
MySQL server beim Verbindungsaufbau von einem anderen
Host aus, ist in der user Tabelle der entsprechende
Eintrag, welcher diesen Host betrifft nicht vorhanden.
Der fehlende Eintrag sollte auf bekannte Weise erstellt
werden. Verwendet man nicht MySQL 3.22 und man
kennt nicht die IP bzw. den Hostnamen, von welchem man
sich connecten will, sollte & als Hostname
in der Tabelle user eingetragen und der mysql-Daemon
mit der Option -log neu gestartet werden. Nach
einem erneuten Verbindungsversuch findet man in dem MySQL-Logfile
die genaue Bezeichnung des Hostnamens.
- Wenn eine
Verbindung mittels mysql -u root test funktioniert
aber mysql -h hostname -u root test die Meldung
Access denied... verursacht, liegt dies daran,
daß der Hostname in der user-Tabelle nicht korrekt
ist. Dies kann dann passieren, wenn der Hostname z.B.
als tcx definiert wurde der DNS aber den Namen
als tcx.subnet.se auflöst. Zum testen dieser Situation
sollte man statt des Hostnamens die IP-Adresse eintragen.
Alternativ kann auch der Hostname mittels tcx%
eingetragen werden, was aber sehr unsicher ist.
- Wenn man nicht
feststellen kann, weshalb weiterhin die Meldung Access
denied... erzeugt wird, sollte man alle Hostnamen-Einträge
die einen Wildcard (%< oder _) beinhalten
aus der user- Tabelle entfernen. Oft geht man davon
aus, daß man mittels des Eintrags Host=% und user=User
die Möglichkeit hat, sich von dem lokalen Host (localhost)
aus zu connecten. Der Grund, warum dies nicht funktioniert
ist, daß der Eintrag host=localhost und user= vor
dem Eintrag host=% und user=user bevorzugt
wird! Um dies zu beheben sollte ein Eintrag host=localhost
und user= user erstellt oder der Eintrag user=
entfernt werden.
- Werden die
MIT-pthreads verwendet, wird localhost nie verwendet!
Alle Verbindungen zu dem mysqld-Daemon erfolgen mittels
TCP/IP, weshalb der richtige Hostname in der user-Tabelle
vorhanden sein muß, selbst dann, wenn der Client auf dem
selben Host ausgeführt wird wie der Server.
- Bei der Fehlermeldung
Access to database denied liegt ein Problem in
der db-Tabelle vor. Beinhaltet der entsprechende
Eintrag in der db-Tabelle einen leeren Hostname
sollte ebenfalls die host-Tabelle überprüft werden.
- Funktioniert
der Befehl mysql -u user database auf der Server-Maschine
aber nicht mysql -h host -u user database auf einer
anderen Client-Maschine, dann fehlt der entsprechende
Eintrag in der user oder db-Tabelle für
diese Client-Maschine.
- Alle Paßwörter
müssen mit der PASSWORD-Funktion eingegeben werden.
- Wenn mysql
-u user test funktioniert, aber mysql -u user andere_database
nicht, fehlt der entsprechende Eintrag für andere_database
in der db-Tabelle.
- Kommt es bei
den SQL-Befehl SELECT...INTO OUTFILE oder LOAD
DATA zu der Meldung: Access to database denied
wurden vermutlich die File_priv Berechtigungen
in der user-Tabelle nicht gesetzt.
- Sollte die
Fehlersuche dennoch negativ verlaufen, ist der mysqld-Daemon
mit der Option: --debug=d,general,query zu starten.
Dadurch werden Informationen zu dem Host und User, welcher
eine Verbindung aufbauen will, sowie über jedes ausgeführte
Kommando ausgegeben. Ist der Fehler dennoch nicht zu finden
und man möchte eine entsprechende Anfrage an die Mailingliste
richten, sollte ein Auszug der Grant-Tabellen beigefügt
werden.
- Bei der Meldung
Cant connect to local mySQL server oder Cant
connect to MySQL server on hostname kann davon ausgegangen
werden, daß der mysqld-Daemon nicht läuft oder daß man
versucht auf einen falschen Port oder Socket zu connecten.
Hierzu sollte man prüfen, ob der Socket vorhanden ist
(normalerweise /tmp/mysql.socket) oder eine Verbindung
mittels telnet hostname 3306 aufbauen. Durch mysqladmin
version können ebenfalls weitere Informationen ausgegeben
werden.
- Verwendet
man einen Client ohne Angabe von Parametern sollte man
prüfen ob ggf. noch falsche Paßwörter in den Konfigurations-Dateien
vorhanden sind.
|
|
|
|
|
|