web-dev-qa-db-de.com

Zugriff für Benutzer 'test' @ 'localhost' (unter Verwendung des Kennworts: YES) mit Ausnahme des Root-Benutzers verweigert

Ich habe ein Problem mit mysql non root/admin user. Ich befolge die folgenden Schritte zum Erstellen des Benutzers und seiner Berechtigungen. Korrigieren Sie mich, wenn ich falsch arbeite.

ich installiere mysql auf RHEL 5.7 64bit, Pakete werden unten erwähnt, sobald ich den rpm install erledigt habe, sind wir 

  1. dann erstellen Sie MySQL-Datenbank mit mysql_install_db 
  2. starten Sie dann den MySQL-Dienst 
  3. mit mysql_upgrade machen wir auch den Server.

Nach diesem Vorgang kann ich mich als root anmelden, aber bei einem Benutzer ohne Rootberechtigung kann ich mich nicht beim Server anmelden:

[[email protected] ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5


[[email protected] ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[[email protected] ~]# ls -ld /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Nov  30 11:09 /var/lib/mysql/mysql.sock

mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| [email protected] | [email protected] |
+----------------+----------------+
1 row in set (0.00 sec)

[[email protected] ~]# mysql -ugolden -p
Enter password:
ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)

Dies ist das Problem, mit dem ich konfrontiert bin. Gibt es dafür eine Lösung?

73
user3061726

Erteilen Sie einem Benutzer ohne Rootberechtigung nicht alle Berechtigungen über alle Datenbanken. Es ist nicht sicher (und Sie haben bereits "root" mit dieser Rolle).

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Diese Anweisung erstellt einen neuen Benutzer und gewährt ihm ausgewählte Berechtigungen . I.E .:

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Schauen Sie sich die docs an, um alle Berechtigungen detailliert zu sehen

BEARBEITEN: Sie können mit dieser Abfrage nach weiteren Informationen suchen (melden Sie sich als "root" an):

select Host, User from mysql.user;

Um zu sehen, was passiert ist

50
Alberto Megía

Wenn Sie über Remote-Computer (Beispiel-Workbench) usw. eine Verbindung zu MySQL herstellen, beheben Sie diesen Fehler unter dem Betriebssystem, auf dem MySQL installiert ist

mysql -u root -p

CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

Versuchen Sie, sich bei der MYSQL-Instanz anzumelden.
Dies funktionierte für mich, um diesen Fehler zu beheben.

28

Versuchen:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

Oder noch besser: mysql_setpermission, um den Benutzer anzulegen

20
nrathaus

Es sieht so aus, als würden Sie versuchen, einen Benutzer 'golden' @ '%' zu erstellen, aber ein anderer Benutzer mit dem Namen 'golden' @ 'localhost' steht im Weg/hat Vorrang. 

Führen Sie diesen Befehl aus, um die Benutzer anzuzeigen: 

SELECT user,Host FROM mysql.user;

Sie sollten zwei Einträge sehen: 

1) Benutzer = golden, Host =%

2) user = golden, Host = localhost

Führen Sie diesen Befehl aus:

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

Starten Sie MySQL Workbench neu.

Dann führen Sie Ihre ursprünglichen Befehle erneut aus: 

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

Wenn Sie dann versuchen, sich bei MySQL anzumelden, geben Sie es wie folgt ein:

 enter image description here

Klicken Sie auf 'Test Connection' und geben Sie Ihr Passwort ein. 

7
Gene

Zuerst habe ich den Benutzer erstellt mit:

CREATE user [email protected] IDENTIFIED BY 'password_txt';

Nach dem googeln und nach this habe ich das Passwort des Benutzers mit folgendem aktualisiert:

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

und ich könnte danach verbinden.

5
ako

Für alle anderen, die alle Ratschläge gemacht haben, besteht das Problem jedoch weiterhin.

Auf gespeicherte Prozedur prüfen und DEFINERS anzeigen. Diese Definierer existieren möglicherweise nicht mehr.

Mein Problem trat auf, als wir den Platzhalterhost (%) auf IP-spezifisch umstellten, wodurch die Datenbank sicherer wurde. Leider gibt es einige Ansichten, die immer noch 'user' @ '%' verwenden, obwohl 'user' @ '172 ....' technisch korrekt ist.

3
Yorro

Stellen Sie sicher, dass der Benutzer über einen localhost-Eintrag in der Benutzertabelle verfügt. Das war das Problem, das ich hatte. EX:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
1
RyanT

Je nachdem, wie Sie Ihren Benutzer erstellen, interpretiert MySQL eine andere Art und Weise. Wenn Sie beispielsweise einen Benutzer wie folgt erstellen: 

create user user01 identified by 'test01';

MySQL erwartet, dass Sie einige Rechte mit grant all on <your_db>.* to user01; vergeben.

Vergessen Sie nicht, flush privileges;

Wenn Sie jedoch einen solchen Benutzer erstellen (durch Übergeben einer IP-Adresse), müssen Sie ihn folgendermaßen ändern:

create user 'user02'@'localhost' identified by 'teste02';

um einige Privilegien zu geben, müssen Sie das tun:

grant all on <your_db>.* to [email protected];
flush privileges;
1
Antonio Marcos

Ich habe auch ein ähnliches Problem, und später stellte ich fest, dass ich meinen Hostnamen (nicht localhost) geändert habe.

Daher bekomme ich es gelöst, indem ich den --Host=127.0.0.1 spezifiziere.

mysql -p mydatabase --Host=127.0.0.1
1
4af2e9eb6

In meinem Fall tritt der gleiche Fehler auf, weil ich versuchte, mysql zu verwenden, indem Sie einfach "mysql" anstelle von "mysql -u root -p" eingeben

0
lfvv

verbinden Sie Ihren Server über mysqlworkbench und führen Sie den folgenden Befehl aus -> ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'yourpassword';

0
Sachin

Für lästige Suchanfragen kommt man nach der Suche nach dieser Fehlermeldung hierher:

Zugriff für Benutzer 'someuser @ somewhere' verweigert (mit Passwort: JA)

Das Problem bestand für mich darin, das Passwort nicht in Anführungszeichen zu setzen. z.B. Ich musste -p'password' anstelle von -ppassword verwenden

0
routeburn