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

98

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 etwas falsch mache.

Ich installiere mysqlauf RHEL 5.7 64bit, Pakete werden unten erwähnt, sobald ich das getan habe, was rpm installwir sind

  1. Erstellen von MySQL-Datenbank mit mysql_install_dbdann
  2. Starten Sie dann den MySQL-Dienst
  3. Mit mysql_upgradeauch machen wir das mit dem Server.

Nach diesem Vorgang kann rootich mich anmelden, aber mit einem Nicht-Root-Benutzer kann ich mich nicht beim Server anmelden:

[root@clustertest3 ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5


[root@clustertest3 ~]# 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

[root@clustertest3 ~]# 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() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

[root@clustertest3 ~]# 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 eine Lösung dafür?

user3061726
quelle
Können Sie sich als root anmelden und dann tunSELECT * FROM mysql.user
Noam Rathaus
1
Akzeptieren Sie die Antwort, die für Sie funktioniert hat, damit andere Benutzer wissen, wie Sie Ihr Problem gelöst haben.
Benutzer, der kein Benutzer ist

Antworten:

59

Gewähren Sie einem Nicht-Root-Benutzer nicht alle Berechtigungen für alle Datenbanken. Dies 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. IE:

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

In den Dokumenten finden Sie alle detaillierten Berechtigungen

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

select Host, User from mysql.user;

Um zu sehen, was passiert ist

Alberto Megía
quelle
Ich bin mit dieser Aussage über root nicht einverstanden. Ja, Sie sollten keine Superprivilegien wohl oder übel vergeben. Im Allgemeinen sollten Sie jedoch auch keine freigegebenen Konten verwenden, da Sie keinen ordnungsgemäßen Prüfpfad in der Datenbank haben. Wenn Sie über freigegebene Konten wie root verfügen müssen, müssen andere Dinge um dieses Konto gewickelt sein, um sicherzustellen, dass der Prüfpfad intakt ist.
krad
36

Wenn Sie über eine Remote-Maschine (Beispiel-Workbench) usw. eine Verbindung zu MySQL herstellen, führen Sie die folgenden Schritte aus, um diesen Fehler unter dem Betriebssystem zu beheben, 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 hat bei mir funktioniert, um diesen Fehler zu beseitigen.

Makarand Kulkarni
quelle
Nicht einmal das funktioniert, da es den Fehler auslöst, selbst wenn "mysql -u root -p" ausgeführt wird
Marian Klühspies
25

Versuchen:

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

Oder noch besser nutzen: mysql_setpermissionum den Benutzer zu erstellen

Noam Rathaus
quelle
Dies löst das Problem nicht. CREATE USER 'goldy' @ '%' IDENTIFIED BY 'some_pass'; ist eine gültige Abfrage
pratim_b
Aus irgendeinem Grund %löst sein Problem, das für alle Hosts funktionieren sollte, es nicht. Durch Angabe localhostsollte es also funktionieren. Wenn das nicht funktioniert, ist etwas in MySQL
Noam Rathaus
12

Es sieht so aus, als würden Sie versuchen, einen Benutzer 'golden' @ '%' zu machen, 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 diese Befehle aus:

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

Starten Sie MySQL Workbench neu.

Führen Sie dann 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 folgendermaßen ein:

Geben Sie hier die Bildbeschreibung ein

Klicken Sie auf "Verbindung testen" und geben Sie Ihr Passwort "Passwort" ein.

Gen
quelle
1
Dies ist die einzige Lösung, die ich hier gefunden habe und die eine gewisse Bedeutung hatte. Vielen Dank, mein Herr.
Sumuk Shashidhar
8

Zuerst habe ich den Benutzer erstellt mit:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Nachdem ich gegoogelt und dies gesehen hatte , aktualisierte ich das Passwort des Benutzers mit:

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

und ich konnte mich danach verbinden.

ako
quelle
3

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

Suchen Sie nach gespeicherten Prozeduren und zeigen Sie DEFINERS an. Diese Definierer existieren möglicherweise nicht mehr.

Mein Problem trat auf, als wir den Platzhalter-Host (%) auf IP-spezifisch änderten, um die Datenbank sicherer zu machen. Leider gibt es einige Ansichten, die immer noch 'user' @ '%' verwenden, obwohl 'user' @ '172 ....' technisch korrekt ist.

Yorro
quelle
Danke, dass du mich auf den richtigen Weg gebracht hast. Ich wusste nicht einmal über die SQL-Sicherheitseinstellung für Ansichten und gespeicherte Prozeduren Bescheid. Am Ende habe ich die SQL-Sicherheit in meinen Ansichten auf Invoker gesetzt, sodass die Berechtigungen des Benutzers verwendet werden, der den Befehl ausführt, und nicht des Benutzers, der die Ansicht erstellt. Hier ist ein Link als Referenz: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin
2

Ich habe auch das ähnliche Problem, und später fand ich es, weil ich meinen Hostnamen geändert habe (nicht localhost).

Daher löse ich es durch Angabe der --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1
4af2e9eb6
quelle
2

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

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

Je nachdem, wie Sie Ihren Benutzer erstellen, interpretiert MySQL dies anders. Wenn Sie beispielsweise einen Benutzer wie diesen erstellen:

create user user01 identified by 'test01';

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

Vergiss es nicht flush privileges;

Wenn Sie jedoch einen solchen Benutzer erstellen (indem Sie eine IP-Adresse übergeben), müssen Sie diese ändern in:

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

Um einige Privilegien zu gewähren, müssen Sie Folgendes tun:

grant all on <your_db>.* to user02@localhost;
flush privileges;
Antonio Marcos
quelle
0

In meinem Fall tritt der gleiche Fehler auf, weil ich versucht habe, MySQL zu verwenden, indem ich einfach "MySQL" anstelle von "MySQL -u root -p" eingegeben habe.

lfvv
quelle
0

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

Sachin
quelle
0

Für nervige Suche hierher zu kommen, nachdem Sie nach dieser Fehlermeldung gesucht haben:

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

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

routeburn
quelle
-7

Fügen Sie einfach den Computernamen anstelle von 'localhost' in den Hostnamen oder die MySQL-Hostadresse ein.

Vipin
quelle