Erlaube Linux root Benutzern den mysql root Zugang ohne Passwort


27

Wenn ich in cPanel als root angemeldet bin und "mysql" ohne Hostnamen und Passwort eingebe, erhalte ich direkten Zugriff auf den Benutzer "mysql root".

Ich möchte dies für einen meiner Nicht-Cpanel-Server tun, bei dem der Linux-Root-Benutzer auf die gleiche Weise wie bei cPanel eine Anmeldung ohne Kennwort für den MySQL-Root-Benutzer erhält.

Ist das möglich ?

Antworten:


51

Am einfachsten ist es, einen Client-Abschnitt der Datei ~ / .my.cnf zu verwenden und dort die Anmeldeinformationen hinzuzufügen.

[client]
user=root
password=somepassword
...

Es ist eine gute Idee, diese Datei auch nur für root lesbar zu machen.


1
Ja, das funktioniert und so macht es cPanel
user1066991

9
Ich muss auf ein potenzielles Sicherheitsproblem hinweisen. Sie müssen ein bisschen vorsichtig sein, dass Sie dies nicht bearbeiten, in dem /etc/my.cnfder MySQL-Server zum Booten verwendet. Wenn Sie den mysql-root-Benutzer in das /etc/my.cnfANYONE-Verzeichnis eingeben, kann der mysql-Server mit ALLEN Berechtigungen für JEDE Datenbank ohne Kennwort verwendet werden. Iain zeigt auf die eigene Shell des Benutzers .my.cnfin der Heimat des Roots, was natürlich richtig ist.
Koen van der Rijt

Was ist, wenn keine ~ / .my.cnf-Datei vorhanden ist? Wenn ich es erstelle und mysqld neu starte, soll ich dann dazu in der Lage sein?
Amalgovinus

21

Wenn Sie für mysql 5.7+ ein leeres Kennwort für die Ersteinrichtung festlegen, wird mysql automatisch auth_socketals Strategie verwendet. Ein Versuch, das Passwort zu aktualisieren, ohne die Strategie zu ändern, hat kein Ergebnis. Sie können sich jederzeit ohne Passwort anmelden, wenn dies Ihr Benutzer ist root.

Lösung Führen Sie den folgenden Befehl aus, um die Authentifizierungsstrategie zu ändern und das Kennwort festzulegen

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''

Referenz: https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/


3
Ich musste am Ende eine leere Zeichenfolge hinzufügen, damit es funktioniert:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
kramer65

Intersting @kramer, funktioniert nur wenn ich es so einstelle wie du ... BY "";. Vielen Dank!
Juan Antonio

Das Passwort wird in "ANY_PASSWORD" geändert und das Passwort nicht gelöscht. Legen Sie zum Löschen und Anmelden ohne Kennwort eine leere Zeichenfolge fest.
Fernando Kosh

7

Ab MySQL 5.6.6 können Sie mit mysql_config_editor eine verschlüsselte Datei erstellen, die Sie automatisch anmeldet:

mysql_config_editor set --login-path=client --host=localhost --user=root --password

Geben Sie dann das Passwort ein, wenn Sie dazu aufgefordert werden.

Hinweis: Wenn in Ihrem Kennwort ein '#' und möglicherweise andere Zeichen enthalten sind, verwenden Sie bei der Eingabe des Kennworts einfache Anführungszeichen.


Können Sie den Kommentar in Anführungszeichen näher erläutern? Sie werden am Terminal zur
Eingabe

Ja, ich habe festgestellt, dass die Eingabe ohne Anführungszeichen nicht funktioniert, wenn sie Sonderzeichen enthält. Wenn Sie dazu aufgefordert werden, geben Sie einfach '(einfaches Anführungszeichen), dann das Passwort und dann' ein.
Brian Deterling

0

Erstellen Sie eine Datei mit nur das MySQL-root-Passwort und nur root kann lesen.

# ls -l /root/.mysqlpw 
-rw------- 1 root root 7 2013-08-19 13:24 /root/.mysqlpw

Sie können eine Datenbank mit importieren

# mysql -u root -p`cat /root/.mysqlpw ` yourdatabase < databasedump.sql

oder stellen Sie eine Verbindung zu Ihrer Datenbank her und geben Sie mysql-Befehle aus

# mysql -u root -p`cat /root/.mysqlpw ` yourdatabase
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20460
Server version: 5.1.63-0ubuntu0.10.04.1 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| yourdatabase       |
+--------------------+
3 rows in set (0.00 sec)

mysql> show tables;
...

5
Das ist viel mehr Arbeit als die andere Antwort. Und dein Passwort ist zu kurz. :)
Michael Hampton

8
Mach das nicht. Es setzt das Passwort in die Kommandozeile, die jeder mit ps(1) lesen kann
camh

Das ist wirklich keine gute Idee
Fernando Kosh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.