PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mySQL nur ohne root-Passwort ?



HJPSoft
04.02.07, 11:42
Hi,

bei der Installation von Typo3 musste ich zwangsläufig neben PHP auch MySQL von der SUSE-Installation DVD (10.2) installieren.
Es ist auch nicht sonderlich schwierig. Allerdings verweigert mir MySQL den Zugang, wenn ich über phpMyAdmin dem Nutzer root ein Password hinterlege.
In einer Webseite erhalte ich die Fehlermeldung:

Fehler: MySQL meldet:
#1045 - Access denied for user 'root'@'localhost' (using password: NO)
Ich löse das Problem nur durch Komplettlöschung und Neuinstallation aller MySQL-Module.
1. Gibt es eine Möglichkeit, das Problem anders zu lösen, und
2. wie kann ich dem Nutzer root den notwendigen Passwort-Schutz geben.

Vielen Dank

tschloss
04.02.07, 12:14
Na wenn der mysql-User "root" ein Passwort hat (und das sollte er), dann muss sich der Client auch mit Passwort anmelden:

mysql -u root -p

Bei phpmyadmin wird man auch irgendwo ein Passwort angeben können.

HJPSoft
04.02.07, 12:39
Bei phpmyadmin wird man auch irgendwo ein Passwort angeben können.

phpmyadmin ist ja die Quelle des Problems. In älteren Versionen habe ich grundsätzlich über phpmyadmin das Passwort gewechselt. Nur jetzt kann ich nach Eingabe eines Passwortes meine MySQL-Datenbank auch abschalten.

tschloss
04.02.07, 14:11
phpmyadmin ist ja die Quelle des Problems. In älteren Versionen habe ich grundsätzlich über phpmyadmin das Passwort gewechselt. Nur jetzt kann ich nach Eingabe eines Passwortes meine MySQL-Datenbank auch abschalten.

Ich verstehe das Problem nicht!

Ist denn alles in Ordnung, wenn du den mysql-Client benutzt? (mysql-Root hat Passwort, login mit Passwort möglich)

Und inwiefern verhält sich phpmyadmin anders??

HJPSoft
04.02.07, 14:33
Der Benutzer root ist nach einer Neuinstallation ohne Password in MySQL vorhanden. Der mysql-Client funktioniert.
Nach dem Setzen eines PW für root unter localhost ist der Zugang zur Datenbank mit dem Fehler, im o.a. Thread beschrieben, verboten.
Der mysql-client lässt sich dann auch nicht mehr aufrufen; er quittiert mit dem gleichen Fehler.

Ich habe jetzt Typo3 und ein Wiki in der MySQL-Datenbank laufen und traue mich nach mehreren erfolglosen Versuchen nicht mehr ein PW zu setzen.
Ich habe sogar die mysql-gui-tools geladen, aber ein PW habe ich damit nicht gesetzt.
Irgendetwas läuft fehlerhaft; die config.inc.php von phpMyAdmin hat nach dem Setzen des PW folgende Inhalte:

$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed
Dies ist schon falsch gelaufen. Ein manuelles Setzen des PW in dieser Datei bringt nicht den erhofften Erfolg.

tschloss
04.02.07, 15:07
Der Benutzer root ist nach einer Neuinstallation ohne Password in MySQL vorhanden. Der mysql-Client funktioniert.
Nach dem Setzen eines PW für root unter localhost ist der Zugang zur Datenbank mit dem Fehler, im o.a. Thread beschrieben, verboten.
Der mysql-client lässt sich dann auch nicht mehr aufrufen; er quittiert mit dem gleichen Fehler.

Ich habe jetzt Typo3 und ein Wiki in der MySQL-Datenbank laufen und traue mich nach mehreren erfolglosen Versuchen nicht mehr ein PW zu setzen.
Ich habe sogar die mysql-gui-tools geladen, aber ein PW habe ich damit nicht gesetzt.
Irgendetwas läuft fehlerhaft; die config.inc.php von phpMyAdmin hat nach dem Setzen des PW folgende Inhalte:

$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed
Dies ist schon falsch gelaufen. Ein manuelles Setzen des PW in dieser Datei bringt nicht den erhofften Erfolg.


Hast du den Client so aufgerufen?

mysql -u root -p
Wie setzt Du denn das Passwort?
Nochmals: Ich würde erst mal für das Basissystem (mot dem mysql client) alles glattziehen. Dann phpmyadmin (wenns denn sein muss) und dann Applikationen wie Typo3.
Applikationen läßt man normalerweise auch nicht auf dem DB-Admin laufen sondern auf einem eigenen DB-Account. Für PHPmyadmin kannst du auch einen separaten Account einrichten.

HJPSoft
04.02.07, 18:59
Ja, ich habe den client mit mysql -u root -p aufgerufen.
Danach fordert mich die Shell zur Eingabe des Passwortes auf, und danach kommt der Fehler.
Ich habe für Typo3 und wiki eigene Nutzer mit der notwendigen Berechtigung eingetragen. Leider ist mein root-Account immer noch ohne PW-Schutz. Wenn ich den Nutzer root (in Verbindung mit localhost) komplett lösche, laufe ich Gefahr, das mir wiederum der Zugang verweigert wird.

HJP

tschloss
04.02.07, 19:30
Ja, ich habe den client mit mysql -u root -p aufgerufen.
Danach fordert mich die Shell zur Eingabe des Passwortes auf, und danach kommt der Fehler.
Ich habe für Typo3 und wiki eigene Nutzer mit der notwendigen Berechtigung eingetragen. Leider ist mein root-Account immer noch ohne PW-Schutz. Wenn ich den Nutzer root (in Verbindung mit localhost) komplett lösche, laufe ich Gefahr, das mir wiederum der Zugang verweigert wird.

HJP

Vielleicht hilft es dir, die User-Tabellen nochmals step by step hochzuziehen - vielleicht sogar manuell.
Siehe zB hier: http://dev.mysql.com/doc/refman/5.0/en/unix-post-installation.html

#

It is possible to re-create the grant tables completely after they have previously been created. You might want to do this if you're just learning how to use GRANT and REVOKE and have made so many modifications after running mysql_install_db that you want to wipe out the tables and start over.

To re-create the grant tables, remove all the .frm, .MYI, and .MYD files in the mysql database directory. Then run the mysql_install_db script again.
#

You can start mysqld manually using the --skip-grant-tables option and add the privilege information yourself using mysql:

shell> bin/mysqld_safe --user=mysql --skip-grant-tables &
shell> bin/mysql mysql

From mysql, manually execute the SQL commands contained in mysql_install_db. Make sure that you run mysqladmin flush-privileges or mysqladmin reload afterward to tell the server to reload the grant tables.

Note that by not using mysql_install_db, you not only have to populate the grant tables manually, you also have to create them first.


Jedenfalls brauchst du nix neu zu installieren, wenn du nicht klarkommst.
Was bei dir schiefläuft, kann man nicht sagen. Deine Beschreibungen sind auch ungenau (in obiger Konstellation: war da ein root-Passwd gesetzt oder nicht? Wie setzt du das Passwort?). Schon mal in die Logfiles gesehen?

rudi_m
04.02.07, 19:51
Es kann auch probleme geben wenn Du root login nur von bestimmten hosts erlaubtst - dann ist die Frage was mysql sieht woher der client connected (koennte also auch eine kaputte netzwerk config Aerger machen )

Ausserdem musst Du drauf achten ob die clients tcp oder unix sockets zum connecten benutzen (tcp ist glaube in per default in my.cfg deaktiviert)

Versuche doch mal explizit den host mit anzugeben

mysql -h localhost -u root -p
(benutzt unix socket)

mysql -h 127.0.0.1 -u root -p
(tcp connection - mit absender localhost)

mysql -h deine_public_IP -u root -p
(tcp connection - mit absender deine_IP)

tschloss
04.02.07, 20:00
Es kann auch probleme geben wenn Du root login nur von bestimmten hosts erlaubtst - dann ist die Frage was mysql sieht woher der client connected (koennte also auch eine kaputte netzwerk config Aerger machen )

Ausserdem musst Du drauf achten ob die clients tcp oder unix sockets zum connecten benutzen (tcp ist glaube in per default in my.cfg deaktiviert)

Versuche doch mal explizit den host mit anzugeben

mysql -h localhost -u root -p
(benutzt unix socket)

mysql -h 127.0.0.1 -u root -pmysql -u root -p
(tcp connection - mit absender localhost)

mysql -h deine_public_IP -u root -pmysql -u root -p
(tcp connection - mit absender deine_IP)

Aha. Ist das alles wahr?

rudi_m
04.02.07, 22:01
Aha. Ist das alles wahr?
denke schon, bis auf meine (jetzt korrigierten) copy/paste fehler

mir ist dieses Verhalten mal aufgefallen als ich mit ssh port 3306 forwarded hatte und dann
mysql -h localhost -u root -p
nicht geklappt hat aber eben
mysql -h 127.0.0.1 -u root -p
(und localhost ist default einstellung (bei mysql 4.x) und verwendet unix sockets)
siehe auch hier
http://help.myhosting.de/wiki/show/SSHTunnel

tschloss
04.02.07, 22:09
denke schon, bis auf meine (jetzt korrigierten) copy/paste fehler

mir ist dieses Verhalten mal aufgefallen als ich mit ssh port 3306 forwarded hatte und dann
mysql -h localhost -u root -p
nicht geklappt hat aber eben
mysql -h 127.0.0.1 -u root -p
(und localhost ist default einstellung (bei mysql 4.x) und verwendet unix sockets)
siehe auch hier
http://help.myhosting.de/wiki/show/SSHTunnel

Hmm. Also meine Sichtweise ist die:
1) localhost ist synonym für 127.0.0.1, definiert in hosts
2) wenn der mysql-Server nur auf Sockets lauscht, dann kann man ihn auch nur von der lokalen Maschine aus ansprechen und nicht übers Netz
3) (ohne den Link angesehen zu haben): mittels SSH und portforwarding kann ich mich von remote in eine "localhost" Situation begeben, aber auch nur für mysql-Server, die an einem IP-Port lauschen.
Vlt. war auf deiner Client-Maschine (ssh-Client) localhost nicht richtig definiert?

Aber der TE hat bisher in der Tat nicht klar gesagt, dass er auch tatsäcglich auf der lokalen Maschine arbeitet, weil eben nur dann der 'root'@'localhost' Eintrag in der Grant Table greift. Aber die Wahrscheinlichkeit ist eher hoch ;)

Roger Wilco
04.02.07, 22:46
1) localhost ist synonym für 127.0.0.1, definiert in hosts
localhost ist in MySQL ein magic hostname. Damit wird die Verbindung immer über den UNIX-Socket hergestellt.

tschloss
05.02.07, 07:46
localhost ist in MySQL ein magic hostname. Damit wird die Verbindung immer über den UNIX-Socket hergestellt.

Ah, danke. Wieder was dazugelernt.
Mir ist aber nicht so ganz klar, wie das durch einen SSH-Tunnel gehen soll, der doch normalerweise nur TCP Ports forwarded. Was macht denn der mysql-Client, wenn er mit localhost verbinden soll, aber keinen Socket findet? Ich vermute er geht dann halt doch über TCP.
Lustig auch, wenn es lokal einen Socket gibt und das SSH-Port-Forwarding gewissermaßen ins Leere ginge. Oder funktioniert das anders?

rudi_m
05.02.07, 08:52
Ah, danke. Wieder was dazugelernt.
Mir ist aber nicht so ganz klar, wie das durch einen SSH-Tunnel gehen soll, der doch normalerweise nur TCP Ports forwarded. Was macht denn der mysql-Client, wenn er mit localhost verbinden soll, aber keinen Socket findet?
Dann gibt er eine Fehlermeldung aus

Ich vermute er geht dann halt doch über TCP.
nein, das macht er nur bei -h "127.0.0.1"

Lustig auch, wenn es lokal einen Socket gibt und das SSH-Port-Forwarding gewissermaßen ins Leere ginge.
Genau, er wuerde dann mit dem localhost connecten, anstatt den tunnel zu benutzen, und das selbst dann wenn man explizit noch "-P port" angibt (gerade nochmal getestet).