Stellen Sie ohne sudo eine Verbindung zum MySQL-Server her

77

Der Befehl:

mysql -u root -p

gibt den Fehler:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Aber das Ausführen von Sudo-Berechtigungen funktioniert:

sudo mysql -u root -p

Ist es möglich, die Sudo-Anforderung loszuwerden, weil ich dadurch die Datenbank nicht in Intellij öffnen kann? Ich habe Folgendes versucht, wie in der Antwort auf diese Frage. Stellen Sie ohne sudo eine Verbindung zum lokalen MySQL-Server her :

sudo chmod -R 755 /var/lib/mysql/

das hat nicht geholfen. Die obige Frage hat einen anderen Fehler ausgelöst

Riyafa Abdul Hameed
quelle
Mögliches Duplikat von Connect to local MySQL Server ohne sudo
1
Ich habe erwähnt, dass es nicht funktioniert
Riyafa Abdul Hameed

Antworten:

98

Nur der Root-Benutzer benötigt die Sudo-Anforderung, um sich bei MySQL anzumelden. Ich habe dieses Problem behoben, indem ich einen neuen Benutzer erstellt und Zugriff auf die erforderlichen Datenbanken gewährt habe:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';

Jetzt newuserkönnen Sie sich ohne Sudo-Anforderung anmelden:

mysql -u newuser -p
Riyafa Abdul Hameed
quelle
1
Für alle, die sich fragen, wie das Passwort lauten könnte, ist es die Zeichenfolge danach IDENTIFIED BY, in diesem Fall einfach 'Passwort'
AGoranov
Nur ein Hinweis: Wenn Sie eine Verbindung herstellen, setzen Sie nach der -pOption kein Leerzeichen . Zum Beispiel: mysql -u newuser -ppassword(kein Platz!)
TaimoorAhmad
57

Sie müssen den Algorithmus ändern. Nach der Arbeit für mich,

mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
mysql > FLUSH PRIVILEGES;
Hemant Thorat
quelle
1
Danke, es hilft mir.
Kunj
Es hat mir auch geholfen. Plötzlich, nach dem Neustart, bekam ich den Zugriff verweigert für Benutzer root @ localhost. Diese Lösung hilft mir, mich mit mysql
ahsan_cse2004
34

Sie können denselben ROOT-Benutzer oder einen NEW_USER verwenden und die SUDO-Berechtigungen entfernen. Das folgende Beispiel zeigt, wie Sie die Verbindung mit ROOT ohne SUDO entfernen.

Stellen Sie mit SUDO eine Verbindung zu MY-SQL her

sudo mysql -u root

Löschen Sie den aktuellen Root-Benutzer aus der Benutzertabelle

DROP USER 'root'@'localhost';

Neuen ROOT-Benutzer erstellen (Sie können bei Bedarf einen anderen Benutzer erstellen)

CREATE USER 'root'@'%' IDENTIFIED BY '';

Erteilen Sie Berechtigungen für neue Benutzer (ROOT)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

Flush-Berechtigungen, damit die Grant-Tabellen sofort neu geladen werden. ( Warum müssen wir Berechtigungen spülen? )

FLUSH PRIVILEGES;

Jetzt ist alles gut. Überprüfen Sie für alle Fälle, ob ein neuer Root-Benutzer erstellt wurde.

SELECT User,Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | %         |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

Beenden Sie MySQL. (Drücken Sie STRG + Z). Stellen Sie ohne SUDO eine Verbindung zu MySQL her

mysql -u root

Hoffe das wird helfen!

Keet Sugathadasa
quelle
1
Hat für mich gearbeitet. Die einzige Änderung, die ich vorgenommen habe, war das Ersetzen von '%' durch 'localhost'
David
Danke mann! Du hast mich gerettet!
20аил Чеботарев
26

Melden Sie sich zuerst mit sudo bei Ihrem MySQL an.

Verwenden Sie dann diesen Code, um den Spaltenwert "plugin" von "unix_socket" oder "auth_socket" in "mysql_native_password" für den Root-Benutzer zu ändern.

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin IN ('unix_socket', 'auth_socket');

FLUSH PRIVILEGES;

Starten Sie schließlich den MySQL-Dienst neu. das ist es.

Wenn Sie weitere Informationen wünschen, überprüfen Sie diesen Link

AKTUALISIEREN:

In neuen Versionen von MySQL oder Mariadb können Sie Folgendes verwenden:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password USING PASSWORD('your-password');
FLUSH PRIVILEGES;
Mahmood Shahbazian
quelle
2
Der Plugin-Wert war in meinem Fall 'auth_socket'.
Zubin
sudo service mysql restartNeustarten.
tejasvi88
6

Sie können die folgende Abfrage verwenden:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

Diese Abfrage ist ausreichend.

SREEKANTH KC
quelle
6

Ich habe dieses Problem mit den folgenden Befehlen gelöst.

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

Hier username= beliebiger Benutzername.

und password= ein beliebiges Passwort.

Atequer Rahman
quelle
1

Diese Antwort muss für mariaDB anstelle von mysql leicht angepasst werden.

Melden Sie sich zuerst mit sudo als root an:

$ sudo mysql -uroot

Ändern Sie dann den Mariadb-Root-Benutzer:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password USING PASSWORD('mypassword');
FLUSH PRIVILEGES;

Sudo wird ab sofort nicht mehr benötigt:

$ mysql -uroot -p

Verwendete Version: mysql Ver 15.1 Distrib 10.4.13-MariaDB für osx10.15 (x86_64) mit readline 5.1

user1877106
quelle
-1

In dem Kommentar der Frage, auf die Sie antworten, heißt es

Ok, versuchen Sie einfach, alle Verzeichnisse im Pfad der Socket-Datei zu analysieren. Sie müssen über o + rx und die Sock-Datei verfügen (es ist keine gute Idee, sie von anderen modifizierbar zu machen).

Sie können auch versuchen, mysql.sock zu entfernen und dann mysqld neu zu starten. Die Datei sollte vom Daemon mit den entsprechenden Berechtigungen erstellt werden.

Dies schien für diese Frage zu funktionieren (die, von der Sie sagten, dass Sie sie angeschaut haben), sodass sie möglicherweise auch für Sie funktioniert

Gemeinschaft
quelle
Wie mache ich das? Die Frage, die ich
angesprochen habe,
Das ist kein Grund zur Abwertung !! : Schauen Sie in die Datei /etc/mysql/my.cnf und deaktivieren Sie Folgendes: # plugin-load-add = auth_socket.so und starten Sie die Datenbank neu, oder lesen Sie, wie Sie mysql ohne Kennwort starten liberiangeek.net/2014/10/ reset-root-password-mariadb-centos-7
Bernd Buffen
-5

Die Fehlermeldung:

"FEHLER 1698 (28000): Zugriff für Benutzer 'root' @ 'localhost' verweigert"

bedeutet, dass der Server die Verbindung für diesen Benutzer nicht zulässt und MySQL nicht auf den Socket zugreifen kann.

Versuchen Sie dies, um das Problem zu lösen:

Melden Sie sich in Ihrer Datenbank an

sudo mysql -u root -p

Nehmen Sie dann folgende Änderungen vor:

MariaDB []>use mysql;
MariaDB [mysql]>update user set plugin=' ' where User='root';
MariaDB [mysql]>flush privileges;
MariaDB [mysql]>exit

Versuchen Sie erneut, sich ohne sudo anzumelden

Bernd Buffen
quelle
3
Ich habe das versucht und jetzt kann ich mich nicht einmal mit sudo anmelden. Möglicherweise muss
mysql