PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Access denied for user: 'root@localhost' sql probleme!



ran2
10.05.05, 00:36
hallo zusammen,


habe ein problem mit meinem rootserver, der leider schon ziemlich vorkonfiguriert war... auch noch mit suse, auf meinem selbstgebastelten testrechner mit debian ging noch alles :(. mir scheint mein provider lässt mich keine weiteren sql datenbanken anlegen obwohl ich root und ssh habe...

wenn ich mich als root an der sql konsole anmelden will kommt das da :
Access denied for user: 'root@localhost'

wenn ich mich mit dem normalen sql user anmelden will geht es, nur der darf leider nichts, natürlich auch keinen neuen user anlegen..

daher meine frage kann ich jetzt irgendwie über ssh weitere sql user anlegen ohne dass ich mysql nochmal installieren muss ?


vielen dank, bin leider sehr am anfang meiner linux karriere wie ihr seht :)

lilapause
10.05.05, 01:54
http://www.google.de/search?q=mysql%20reset%20password

Roger Wilco
10.05.05, 09:53
wenn ich mich als root an der sql konsole anmelden will kommt das da :
Access denied for user: 'root@localhost'
Falsches Passwort? Falscher Benutzer? Der Superuser von MySQL muss ja nicht zwingend "root" heißen. Könnte ja auch "horst" sein. ;)

Im Zweifel frag doch einfach beim Support deines Providers nach oder setze das Passwort entsprechend dem Handbuch (http://dev.mysql.com/doc/mysql/de/resetting-permissions.html) zurück...

ran2
10.05.05, 10:33
ja dass der superuser für sql auch horst heissen kann, habe ich nach sehr langer zeit gemerkt :)

nur wie finde ich es raus wie der heisst eine user.myd konnte ich leider bisher noch nirgends finden ? mein provider braucht immer so lange mit den antworten und ich bin ungedldig, daher habe ich natürlich schon längst gefragt und nichts bekommen...

bin schon am überlegen sql neu zu installieren ?
muss ich dann die daten vorher dumpen ?

thx schonmal...

EDIT:
hab jetzt noch anders wo gefunden wo meine user.myd eingentlich sein müsste. in dem thread stand auch sehr einleuchtend wie man in der user.myd bzw user.myi das passwort ändert.

nur leider ist die datei nicht da. es gibt nur das da und die gehen per vi nicht auf ... :(
user.ISD
user.ISM
user.frm

Roger Wilco
10.05.05, 22:59
Tu dir einen Gefallen und editiere die Dateien nicht mit einem normalen Texteditor wie vi. Ändere das Passwort einfach so, wie in dem Dokument auf das ich verlinkt habe, beschrieben ist.
Die Benutzer, die existieren, stehen in der Datenbank mysql in der Tabelle User. Da findest du alles notwendige.

ran2
10.05.05, 23:52
würde ich gerne , war ich vorhin ein ziemlich horst.

ich hab genau wie in deinem link das ganze gemacht bis zu dem punkt wo man mit (engl. version des manuals!!) mysqld_safe dann wieder hochfahren sollte...

das ging nur leider nicht weil es mysqld_safe nicht gab, später habe ich rausgefunden, alte version heisst safe_mysqld :)

whatever gabs nicht, ich hab dann irgendwann zuviel gekriegt und hab den mysqld dazu vergewaltigt mit root den server wieder zu starten. das hat auch soweit funktioniert nur leider habe ich jetzt keinen planen mehr wo die pid datei ist... als ich das mit dem safe_mysqld rausgefunden hatte wollte ich natürlich nen neuen versuch starten und dann ging der kill nimmer weil der mysqld.pid nicht mehr an der stelle ist ...

ich hab keinen plan wo jetzt ist und würde mich sehr über hilfe freuen...

übrigens space quest rockt :)

tschloss
11.05.05, 08:20
Ich habe jetzt das obige howto nicht gelesen, aber steht da wirklich, dass man die mysql-Prozesse abschießen (kill) soll?
Normalerweise sollte es in /etc/init.d ein Skript mysql geben, welches die Parameter "stop", "start", "restart" kennt. Das sollte alles erledigen!

Und noch eins: Der Linuxuser unter dem du arbeitest (z.B. root) ist i.d.R. ein anderer Linuxuser, unter dem der mysql-Server läuft.
Der Superuser, um MYsql zu verwalten hat mit den Linux-Usern gar nichts zu tun. Der heißt zwar auch häufig root, existiert aber nur in der Welt des mysql-Servers. Ein "mysql -u root -p" logt sich in Mysql ein als Mysql-user root und verlangt nach dem mysql-Passwort des users (nicht der Linux User).
Wenn das schon klar war, sorry - aber kam mir grad so vor, als würde das vielleicht helfen.

ran2
11.05.05, 10:11
yo tschloss,

hab zwar lang gebraucht das rauszufinden, aber mittlerweile weiss ich dass der linux user und sql verscheiden sind ;)

mein problem ist einfach ist weiss weder wie mein sql root heisst noch wie sein password ist. ich hab mein provider angerufen, mit dem user/pass das der sagt gehts auch nicht.

da ich aber nen ssh root habe kann ich es ja theoretisch zurücksetzten nur sind eben dabei diverse probleme aufgetaucht (siehe oben).

es liegt auch nich am port lauschen, denn der standard dbuser, der halt nichts darf geht ja sowohl über php als auch über den ssh mysql client..

würde mich echt über hilfe freuen, habe ich nämlich wirklich nötig :)

tschloss
11.05.05, 10:48
Nochmals:
1. "/etc/init.d/mysql stop"
per ps -Af schauen ob mysql nicht mehr läuft

dann wie hier
http://dev.mysql.com/doc/mysql/en/resetting-permissions.html
beschrieben


Alternatively, on any platform, you can set the new password using the mysql client:

1.

Stop mysqld and restart it with the --skip-grant-tables option as described earlier.
2.

Connect to the mysqld server with this command:

shell> mysql -u root

3.

Issue the following statements in the mysql client:

mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd')
-> WHERE User='root';
mysql> FLUSH PRIVILEGES;

Replace ``newpwd'' with the actual root password that you want to use.
4.

You should be able to connect using the new password.


Was geht da nicht?

Greetz
Thomas

ran2
11.05.05, 11:04
genau da bin ich...

das dings ist auch genau was ich brauche... nur leider kann ich den kill aus der anleitung schon nicht durchführen da es keine mysld.pid gibt und auch keine hostname.pid (oder welche könnte das sein ?)

is-insrv-cust-1620:~ # find / -iname *.pid
find: /proc/9279/fd: No such file or directory
/var/run/syslogd.pid
/var/run/sshd.pid
/var/run/klogd.pid
/var/run/atd.pid
/var/run/sendmail.pid
/var/run/cron.pid
/var/run/nscd.pid
/var/run/inetd.pid
/var/run/gpm.pid
/var/run/httpd.pid
/root/.vnc/is-insrv-aug-011:1.pid
/root/.vnc/is-insrv-aug-011:2.pid

das ist passiert als dummerweise mal den sql server als root gestartet habe, dumm ich weiss ... :(

EDIT: hier ist übrigens die mysqld drin:
/usr/sbin/mysqld

vorher var sie unter var/lib/mysql/
glaub da ist sie auch besser aufgehoben ? kann ich die da so einfach hinkopieren oder muss ich den server abschalten ??

tschloss
11.05.05, 11:15
Ok - nochmals: versuche doch mal "/etc/init.d/mysql stop"

(Und verschiebe NICHT die Dateien von mysql. Das hat alles seinen Sinn :eek: )

ran2
11.05.05, 11:20
ok ich versuche das - wie geht er wieder an :)

ich will es ja nur verstehen wieso habe ich keine mysqld.pid mehr ?


btw: ein genereller link zur verzeichnis struktur, dem sinn den du da nennst interessiert mich auch immer wenn du was gutes hast, ganz unabhängig von dem problem..

ran2
11.05.05, 11:41
JUHUUU !!

Tschloss 10000 dank, es geht!

jetzt ist nur grad alles offen wie ein scheuen tor aber ich konnte mal ne neue datenbank anlegen muss jetzt nur gucken das meine user anlege und dann wieder zu mache...

da muss ich gleich nochmal fragen... ich schalt jetzt nen mysqld wieder ab so wie du es gesagt hast und lass dann beim start die sG option weg oder?

kann ich noch irgendwas machen sicherheitsmässig? danke schonmal wieder!!

EDIT: wenn ich den mysqld nicht mit -u root starten, brauch ich den nen extra linux user oder nen extra sql user ? bzw ist es so schlimm das zu tun ?

tschloss
11.05.05, 11:57
Also bin mir jetzt nicht sicher, wie weit du bist.

In der obigen Code-Box steht, wie man ein neues Passwort für root (mysql) vergibt. Das solltest du natürlich machen.

Und mysql startet man normalerweise mit "/etc/init.d/mysql start" oder auch restart, wenn er noch läuft. Dann werden entsprechend der Konfig mysql Dämonen (mysqld) gestartet. Das Skript kümmert sich afaik auch um den Linuxuser, der den Daemon owned. Die meisten Distributionen bringen einen spezielen Linux-User "mysql" mit, der die passenden Rechte besitzt.

Verzeichnisstruktur: never touch a running system ;)
Wichtig sind meistens /etc/... (dort liegen u.A. die Konfigs, meistens programmname.conf aber auch schon mal z.B. my.conf oder my.cnf)
Die ausführbaren Programme liegen dann unter /bin oder /sbin oder /usr/sbin, aber daran darfst du nix fummeln, sonst fällt einiges in sich zusammen
Die Daten(banken) liegen unter /var bzw. /var/lib/mysql - jede Datenbank hat darunter ein Verzeichnis; mysql enthält die Metadatenbank mit den Usern und Rechten. Dieser Bereich sollte gebackupped werden!
Weiteres unter http://dev.mysql.com/doc/mysql/de/

Greetz
Thomas

ran2
11.05.05, 12:44
also es geht jetzt allles hab die sql root neu angelegt mit passwd und allem und dann einfach den daemon direkt wieder gestartet ging bei mir leider nur über root, hab unter meinen linux usern aber keinen gefunden der den mysqld starten wollte ausser den root... dann halt mit dem auch wenn man es eigentlich nicht soll wie ich gelesen habe...wieso ??

naja jetzt rennt er es können nur die user zugreifen die sollen soweit ich das getestet habe, es gibt nen neuen sql super user der alles kann was er brauch... und ich bin zufrieden - bis zum nächsten problem.

zu deiner frage wie weit ich bin mit linux gaanz am anfang und mit meinem problem bei ner lösung :)

wollte eben nur fragen ob es sicherheitstechnisch (das kann man so schwer prüfen) bedenklich ist wenn man den server wieder über mysqld -u root startet

danke!

-matthias

EDIT: und wirklich im deutschen sql manual sind teilweise wichtige sachen, z.b. zweite alternativen weggelassen!

Roger Wilco
11.05.05, 13:31
wollte eben nur fragen ob es sicherheitstechnisch (das kann man so schwer prüfen) bedenklich ist wenn man den server wieder über mysqld -u root startet
Ja! Der mysqld sollte nicht als "root" laufen. Es wurde sicherlich schon ein dedizierter Benutzer angelegt, unter dem MySQL laufen soll.
Wenn mysqld als "root" läuft und es eine Sicherheitslücke gibt, hat der Angreifer sofort Root-Rechte!
Nachdem du die Rechte/das Passwort für den Administrator von MySQL gesetzt hast, kannst du den mysqld wieder über dein Initskript starten.

tschloss
11.05.05, 13:39
Und mysql startet man normalerweise mit "/etc/init.d/mysql start" oder auch restart, wenn er noch läuft. Dann werden entsprechend der Konfig mysql Dämonen (mysqld) gestartet. Das Skript kümmert sich afaik auch um den Linuxuser, der den Daemon owned. Die meisten Distributionen bringen einen spezielen Linux-User "mysql" mit, der die passenden Rechte besitzt.



Geht das nicht?

ran2
11.05.05, 13:56
doch dann muss ich den nochmal neu starten mit dem init, ich wollte ja nur verstehen wieso und hab auch nicht so genau gewusst nach was ich fragen muss... denke aber jetzt hab ich es verstanden. mir war nicht klar dass der mysqld die ganze zeit als root läuft nur weil man ihn mit dem root user startet,

btw: falls das was zu sache tut bei mir gibts gar keinen mysql user der root heisst...

leider weiss ich aber auch nicht welcher von den angelegten usern mysql starten kann, wenn ich das init ausführe so wie tschloss sagt und von meiner ssh aus als root tue isses dann genauso fürn arsch wie wenn ich mysqld -u root mache ?

sorry wegen der umständlichen fragen, rookie halt und never change a runinng system ist zwar sicher richtig , aber wenn es läuft sieht man auch nicht alles was falsch ist..

danke auf jeden fall für eure mühe!

Roger Wilco
11.05.05, 14:03
mir war nicht klar dass der mysqld die ganze zeit als root läuft nur weil man ihn mit dem root user startet,
Du verwechselst immer noch Systembenutzer und Benutzer, die in der MySQL-DB existieren.


btw: falls das was zu sache tut bei mir gibts gar keinen mysql user der root heisst...
Dann vllt. "admin" oder "horst"? ;)


leider weiss ich aber auch nicht welcher von den angelegten usern mysql starten kann, wenn ich das init ausführe so wie tschloss sagt und von meiner ssh aus als root tue isses dann genauso fürn arsch wie wenn ich mysqld -u root mache ?
Nein, das Initskript startet mysqld dann mit dem richtigen Benutzer.

ran2
11.05.05, 14:24
also erstmal vorneweg hab es jetzt mit init gemacht, geht passt und ist super, danke euch nochmal !!

die verwechselung rührte daher dass mysqld -u root funktioniert hat obwohl es keinen sql user gab der so heisst --> ich dachte es muss wohl der systemroot sein da es ging.

btw ;) mein sql superuser heisst wirklich horst , eingedenk dieses threads

ich war als ssh systemroot angemeldet und hab jetzt das init.d ausgeführt so wie ihr gesagt habt, kann ich irgendwie des interesses halber herausfinden (mit nem befehl) über welchen user der daemon jetzt läuft, würde mich ja schon interessieren...

tschloss
11.05.05, 14:57
also erstmal vorneweg hab es jetzt mit init gemacht, geht passt und ist super, danke euch nochmal !!

die verwechselung rührte daher dass mysqld -u root funktioniert hat obwohl es keinen sql user gab der so heisst --> ich dachte es muss wohl der systemroot sein da es ging.

btw ;) mein sql superuser heisst wirklich horst , eingedenk dieses threads

ich war als ssh systemroot angemeldet und hab jetzt das init.d ausgeführt so wie ihr gesagt habt, kann ich irgendwie des interesses halber herausfinden (mit nem befehl) über welchen user der daemon jetzt läuft, würde mich ja schon interessieren...
ps -Af | grep "mysqld"

User und Group sbeziehen sich natürlich auf den Linux-User ;)

ran2
11.05.05, 16:20
hmm danke, nur verstehen tue ich es noch nicht ganz, aber du kannst mir doch sicher sagen ob mein mysqld noch auf nem falschen unser läuft in der ersten zeile steht noch was von root....

ich glaub zwar dass es jetzt richtig ist, zumal ja offensichtlich auch der mysql systemuser verwendet wird... (der hat mich übrigens auch noch verwirrt weil der natrülich nicht über ssh geht, sprich als ich mit dem sql user über ssh einloggen und dann mysqld starten wollte gings natürlich gleich mal beim login in nicht ;) so ein wunder.

naja ich glaube wie gesagt es einigermassen verstanden zu haben, aber glauben kann man bekanntlich in der kirche hier ist die ps ausgabe:


root 10088 1 0 14:16 pts/0 00:00:00 /bin/sh /usr/bin/safe_mysqld --u ser=mysql --pid-file=/var/lib/mysql/mysqld.pid --socket=/var/lib/mysql/mysql.soc k --datadir=/var/lib/mysql
mysql 10119 10088 0 14:16 pts/0 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/mysqld.pid --ski p-locking
mysql 10121 10119 0 14:16 pts/0 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/mysqld.pid --ski p-locking
mysql 10122 10121 0 14:16 pts/0 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/mysqld.pid --ski p-locking
root 10390 10356 0 16:15 pts/1 00:00:00 grep mysqld

danke mal wieder..
&
grüsse

-matthias


EDIT: jetzt check ich glaub die mysql.pid ist ne berechtigungsdatei die nur angelegt wird man nicht als root den mysqld laufen lässt deswegen war sie auch nich aufzufinden als mein server kurzfristig als root lief und jetzt wieder da - stimmts ;) ?

tschloss
11.05.05, 16:57
Die normalen mysql-Daemons laufen unter (Linux-) user "mysql". Das ist ok so.

Und wenn du die Datenbank administrieren willst oder einfach nur Daten pflegen, dann kannst du dich normalerweise mit einem normalen Linuxuser per SSH auf deine Kiste verbinden und dann per
mysql -u irgendeinmysqluser -p
oder per
mysql -u horst -p
oder
mysqladmin -u horst -p

mit dem Datenbankserver verbinden. "horst" sein mal der Superuser deiner mysql Datenbank.

Wenn Du also per horst mittels mysql-Dienstprogramm in der Datenbank bist, gib mal ein:
use mysql;
select * from users;
oder
show tables;
oder
show databases;

Und noch was: starte/stoppe die Serverdienste möglichst immer per init-Skript in /etc/init.d. Sieh dir mal per
cat /etc/init.d/mysql
das Skript an und du erkennst, dass da noch einiges passiert, was bei einem schnöden "mysqld" fehlt!



Have fun!
Thomas

ran2
11.05.05, 20:55
thx für den service..!

hab auch mal nen phpmyadmin mit nem horst angelegt da wird das dann sehr anschaulich alles, aber init.d schau ich mir auch an der bildung wegen... danke !!

- aber so (siehe oben) wie es jetzt läuft isses ok oder ?