PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [MySQL] Problem bei der Einrichtung von Benutzern



schiff
24.05.2006, 13:14
Hallo zusammen,

ich habe einen MySQL-Server frisch aufgesetzt. Über die Shell habe ich auf folgende Weise einen Benutzer eingerichtet:
GRANT ALL ON *.* TO foobar@10.211.163.207 IDENTIFIED BY 'test2';
FLUSH PRIVILEGES;
Wenn ich nun per PHP von einem anderen Rechner (also nicht localhost) auf die Datenbank zugreifen möchte, erscheint folgende Meldung:
Access denied for user 'foobar'@'10.211.163.207' (using password: YES) Mein Script sieht so aus:
$host = '10.211.163.187';
$user = 'foobar';
$pw = 'test2';
mysql_connect( $host, $user, $pw ) or die( mysql_error() );
IP 187 ist der MySQL-Server, und die IP 207 ist der Webserver.

Was habe ich bei der Einrichtung falsch gemacht, dass die Verbindung fehlschlägt?

lordlamer
24.05.2006, 13:19
http://dev.mysql.com/doc/refman/4.1/en/adding-users.html

schiff
24.05.2006, 13:25
Also ich bin danach vorgegangen, ich hatte auch '%' bereits verwendet. Habe ich etwa ein Detail nicht beachtet?

lordlamer
24.05.2006, 13:26
was sagt: SELECT * FROM user; in der db mysql?

frank

supersucker
24.05.2006, 13:30
So spontan fällt mir nur ein, dass um den user-namen im grant-statement ' herum sein sollten.
Probier das doch mal.

theton
24.05.2006, 13:48
Ich wuerde einfach mal 'GRANT ALL PRIVILEGES...' nutzen. Allerdings sollte ein User, der remote-Zugriff hat, niemals alle Rechte fuer alle Datenbanken haben, sondern nur die Rechte, die der User bzw. die Applikation, die diesen nutzt, benoetigt.



GRANT ALL PRIVILEGES ON *.* TO 'foobar'@10.211.163.207 IDENTIFIED BY 'test2';
FLUSH PRIVILEGES;

schiff
24.05.2006, 14:27
Ich habe die Befehle von theton nun ausgeführt und endlich klappt es - zumindestens bin ich einen Schritt weiter.


Client does not support authentication protocol requested by server; consider upgrading MySQL client Meine php.ini sagt bei MySQL aus:
Client API version 3.23.49 Und als Server ist MySQL 4.1.7 installiert.

supersucker
24.05.2006, 14:30
Ja, das kann auch nicht klappen da sich afaik zwischen diesen Versionen der Authentifizierungsmechanismus geändert hat.

Client upgraden müsste das lösen.

schiff
24.05.2006, 14:32
Genau, folgendes fand ich bei google:
Client does not support authentication protocol requested by server; consider upgrading MySQL client
besagt, dass der mysql-client nicht mit der benutzten mysql datenbankversion kompatibel ist.
der mysql-client kann sein, die verwendete php version und/oder die verwendete anwendung.
mysql versionen vor 4.1.x haben eine andere passwort authentifizierung. in versionen vor 4.1.x werden passwörter mit einem 16bit hash gespeichert, seit version 4.1.x mit einem 41bit hash.
man kann mysql 4.1.x mit dem parameter --old-passwords starten. i.r. sollte mysql dann auch mit der alten passwortmethode umgehen können.
oder man installiert einfach eine mysql version < 4.1.x

theton
24.05.2006, 14:49
Das Problem der veralteten Authentifizierungsmechanismen ist ganz einfach zu loesen:


SET PASSWORD for 'foobar'@10.211.163.207 = OLD_PASSWORD('test2');

Damit wird das alte Passwort-Format benutzt und ab MySQL 3.1 sollten alle Clients dann damit klar kommen, egal wie alt sie sind.

schiff
24.05.2006, 15:07
Das hatte ich bereits getestet, aber leider ohne Erfolg.
Ich erhalte dann wieder die Meldung:
Access denied for user 'toopadmin'@'10.211.163.207' (using password: YES)

theton
24.05.2006, 15:33
Dann schau mal in die Log-Datei vom mysqld, was fuer Meldungen kommen, wenn du versuchst dich anzumelden und schmeiss die mal hier ins Board.

supersucker
24.05.2006, 15:37
Tu doch einfach deinen Client upgraden als dich mit sowas rumzuschlagen.

Die von theton vorgeschlagene Methode hat bei mir in ca. 2 von 3 Fällen nicht geklappt. (und mit diesen 3 Fällen meine ich verschiedene kombinationen von client 3.x und server 4.x)

Keine Ahnung warum, laut manual sollte es theoretisch immer gehen, aber praktisch, naja.......

theton
24.05.2006, 15:42
Kann ich so nicht bestaetigen. Bei mir hat die OLD_PASSWORD-Methode bisher in 99% der Faelle geklappt. Probleme gab es eigentlich nur mit MySQL-Versionen < 3.2. Aber stimmt schon... 'nen Update ist hier sicherlich der bessere Weg, sofern die notwendigen Rechte auf dem Server vorhanden sind. MySQL 3.23 ist schon arg veraltet. Allerdings moechte ich auch von der 5er MySQL in einer Produktiv-Umgebung abraten. Zu oft sind jetzt schon Leute auf mich zu gekommen, denen die 5er Version Tabellen zerlegt hat.

schiff
24.05.2006, 16:26
Ich habe mich nun für ein Downgrade entscheiden und zwar installiere ich die Version 4.0.27.

Vielen Dank nochmal an euch für eure Hilfe. Ich hätte mich wohl sonst noch lange damit rumgeschlagen.

schiff
02.06.2006, 11:41
Ahoi, ich mal wieder.

Ich habe nun MySQL 4.0.27 erfolgreich installiert. Auf dem lokaAhoi, ich mal wieder.

Ich habe nun MySQL 4.0.27 erfolgreich installiert. Auf dem lokalen Rechner habe ich nun testweise PHP 4.4.2 installiert. Dort funktioniert mein mysql_connect() ohne Probleme. Auf dem zweiten Rechner erhalte ich jedoch weiterhin die folgende Fehlermeldung:
Warning: mysql_connect(): Access denied for user: 'foo@10.211.163.207' (Using password: YES) in /opt/jakarta-tomcat-4.1.24/webapps/phpservlet/foobar.php on line 19
Access denied for user: 'foo@10.211.163.207' (Using password: YES) Den Benutzer habe ich laut Dokumentation eingerichtet:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'foo'@'localhost' IDENTIFIED BY 'bla' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'foo'@'%' IDENTIFIED BY 'bla' WITH GRANT OPTION; http://dev.mysql.com/doc/refman/4.1/en/adding-users.html
Testweise habe ich auch den localhost-Eintrag aus der DB entfernt.

Warum läuft es nur lokal und nicht auf dem zweiten Rechner? Der Port ist defenitiv frei!len

theton
02.06.2006, 11:50
FLUSH PRIVILEGES gemacht?

schiff
02.06.2006, 11:51
Jawohl und als alternative auch
> mysqladmin -uroot -p reload und
> mysqladmin -uroot -p flush-privileges und auch den MySQL-Server neugestartet.

theton
02.06.2006, 12:09
Kannst du dich von einer MySQL-Konsole (also dem Konsolen-Client) von dem Rechner aus einloggen, bei dem es mit PHP nicht geht?
mysql -u foo -p -h <ip-des-mysql-servers>

schiff
02.06.2006, 12:32
Das ist das Problem, der ist nicht auf dem Rechner installiert und ich möchte diesen auch ungern installieren, da der Rechner im produktiven Einsatz ist.

theton
02.06.2006, 12:53
Kannst ihn ja danach wieder deinstallieren, aber gerade um Verbindungen zu testen, ist der ideal. Ich wuesste nicht, was gegen eine Installation spraeche.

schiff
02.06.2006, 12:57
mysql -u foo -p -h <ip-des-mysql-servers>

Ich habe dies nun per MySQL-Client eingegeben und erhalte folgende Meldung:
ERROR 1045: Access denied for user: 'foo@10.211.163.207' (Using password: YES)

theton
02.06.2006, 16:50
Was gibt dir denn ein


select * from mysql.user where `User` like 'foo';

zurueck?