PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL: "Access dinied" bei Remote abfrage über ssh



DragonMaster
19.06.06, 16:41
Ich möchte über ein Script eine Datenbankabfrage machen, die ich per ssh auf einem anderen PC ausführe. Soweit so gut.

Benutzer-/Tabellennamen sowie passwörter wurde natürlich ersetzt :)

Schritt 1:
Ich erstelle mir erst einmal das SQL-Statement und schaue ob es geht.

mysql -u usr --password=pwd -s -e "use datenbank; select count(id) from tabelle;"

Schritt 2:
Nun kopiere ich obigen Befehl und stopf ihn zusammen mit SSH in einen Befehl. Das ganze führe ich dann direkt auf der Console aus.

ssh usr@server.de "mysql -u usr --password=pwd -s -e \"use datenbank; select count(id) from tabelle;\""
Funktioniert soweit super...

Schritt 3:
Nachdem alles wunderbar funktioniert hat, nehm ich den kompletten Befehl und verpack ihn in ein Shell-Script. Dann bringe ich das Shell-Script zur Ausführung und bekommen prompt eine Fehlermeldung

ERROR 1044 at line 1: Access denied for user: 'usr@localhost' to database 'datenbank'

Nun stell ich mir die Frage. Wieso funktioniert der selbe Befehl auf der Console einwandfrei und in einem Shell-Script nicht?

AceTheFace
19.06.06, 18:17
Du musst dem User erlauben von jedem Host (oder eben von bestimmten ausser localhost) auf die DB zuzugreifen. Das erledigst du z.b. beim Anlegen des Users. In phpmyadmin ist das ein Klick um die erlaubten Hosts festzulegen.
Wenn du den nicht zur Hand hast, hier die entsprechende Manual-Seite von mysql: http://dev.mysql.com/doc/refman/5.0/en/adding-users.html

Gruß,
Ace

tschloss
19.06.06, 20:53
und der DB-Server muß überhaupt networking zulassen....
Aber wenn schon mal bis zur Authentisierung kommt, wird das schon so sein ;-)

mkahle
20.06.06, 08:25
Du musst dem User erlauben von jedem Host (oder eben von bestimmten ausser localhost) auf die DB zuzugreifen.
Ähm ... da der Zugriff durch einen ssh-Tunnel erfolgt, denke ich, sollte gerade user@localhost den Zugriff erhalten ...

AceTheFace
20.06.06, 11:09
Ähm ... da der Zugriff durch einen ssh-Tunnel erfolgt, denke ich, sollte gerade user@localhost den Zugriff erhalten ...
Wo er recht hat, hat er recht.

Gruß,
Ace

DragonMaster
20.06.06, 11:46
Da ich ja nun über einen SSH-Tunnel gehe muss mysql ja nicht von außen erreichbar sein. Darum nehm ich ja den SSH-Tunnel. Und klar..der user "usr" hat natürlich die Rechte von "localhost" auf die Tabellen zuzugreifen.


Wie gesagt führ ich das ganze auf dem Client über die Console aus funktioniert ja auch alles. Pack ich das ganze per copy'n paste in ein Shell-Script und führ es auf dem selben Client aus, funktioniert es nimmer :/


Die localen Rechte auf dem Client sollten ja nicht das Problem sein. Durch den SSH-Tunnel bekomme ich ja die Rechte mit denen ich mich per SSH einlogge. Auf dem Server. Und dieser User hat alle Rechte die er brauch um auf die Datenbank zu kommen. Local auf dem Server getestet.

AceTheFace
20.06.06, 12:01
Also ich hab' jetzt mal kurz google angeworfen und bin auf folgende mögl. Erklärung gestossen:



Wenn ich als normaler User connecte dann weist SSH als Source nicht localhost sondern den absoluten Servernamen zu - deswegen war dann ein mysql-connect von user@localhost nicht möglich, aber ein connect von user@mein.server.de wurde vom MySQL geblockt (obwohl als erlaubte Quelle auch % angegeben war).

Stell doch mal das Loglevel von Mysql höher und poste dann die Logs hier....

Gruß,
Ace

DragonMaster
21.06.06, 12:37
Problem hat sich erledigt. Fehler gefunden. Man kann nie oft genug nachsehen. Meld mich schon mit usr@localhost an. Nur hab ich immer select-statements probiert und übersehen das ich auf die Datenbank keine Rechte für insert hatte :ugly:

AceTheFace
21.06.06, 12:40
Problem hat sich erledigt. Fehler gefunden. Man kann nie oft genug nachsehen. Meld mich schon mit usr@localhost an. Nur hab ich immer select-statements probiert und übersehen das ich auf die Datenbank keine Rechte für insert hatte :ugly:

GNAH!! :mad:

Und was soll dann das?
Wieso funktioniert der selbe Befehl auf der Console einwandfrei und in einem Shell-Script nicht?

Gruß,
Ace