MySQL-Anmeldeinformationen über die Linux-Befehlszeile testen?

16

Wie testen Sie MySQL-Anmeldeinformationen über die Befehlszeile auf einem Linux-Server?

Jake Wilson
quelle

Antworten:

5

@ Phil's Answer und @ Mr.Brownstone's Answer sollten für Ihre Frage ausreichen, also +1 für beide.

Im Folgenden nehmen wir an, dass Sie sich mit dem Benutzernamen anmelden myuser

Sobald Sie eine Verbindung zu MySQL hergestellt haben, sollten Sie die folgende Abfrage ausführen:

SELECT USER(),CURRENT_USER();

Manchmal sind sie anders. Dies kann Ihnen einen Einblick geben, warum Sie sich bei mysql anmelden dürfen.

Hier ist eine weitere Abfrage, die Sie ausführen müssen:

SELECT CONCAT('''',user,'''@''',host,'''') dbuser,password
FROM mysql.user WHERE user='myuser';

Dies zeigt Ihnen, wie Sie sich anmelden dürfen myuser.

Wenn Sie sehen 'myuser'@'localhost', können Sie sich vom DB-Server aus authentifizieren.

Wenn Sie sehen 'myuser'@'127.0.0.1'und nicht sehen 'myuser'@'localhost', können Sie sich erneut über den DB-Server authentifizieren, müssen dies jedoch --protocol=tcpüber die Befehlszeile angeben .

Wenn Sie sehen 'myuser'@'%', können Sie sich von jedem Server aus remote anmelden.

Wenn Sie sehen 'myuse'r@'10.20.30,%', können Sie Remote-Anmeldungen nur für den Netblock 10.20.30.% Ausführen.

Sobald Sie sehen, was "mysql.user" für Ihren Benutzer hat, möchten Sie möglicherweise zulassen oder einschränken, dass sich myuser auf die eine und nicht auf die andere Weise anmeldet.

Wenn Sie nur überprüfen möchten, ob das Kennwort für myuserist whateverpassword, können Sie Folgendes tun:

SELECT COUNT(1) Password_is_OK FROM mysql.user
WHERE user='myuser'
AND password=PASSWORD('whateverpassword');

Sie können über die Befehlszeile Folgendes überprüfen:

PASSWORDISOK=`mysql -uroot -p... -ANe"SELECT COUNT(1) Password_is_OK FROM mysql.user WHERE user='myuser' AND password=PASSWORD('whateverpassword')"`

Wenn Sie dies nicht sind rootund nur myuser testen möchten, können Sie dies tun:

PASSWORDISOK=`mysqladmin -umyuser -pwhateverpassword ping | grep -c "mysqld is alive"`

Wenn Sie 1 erhalten, wird das Passwort für myuser als gut bestätigt.

RolandoMySQLDBA
quelle
13
mysql -h host -u user -p<whatever> -e"quit"

Auf diese Weise können Sie dieselbe Verbindungszeichenfolge verwenden, die Sie zum programmgesteuerten Senden von Abfragen an den Server verwenden. Sie können || exit 1am Ende hinzufügen , dass ungültige Argumente automatisch beendet werden. Möglicherweise möchten Sie auch stderr umleiten, /dev/nullwenn Ihnen die automatisch generierte MySQL-Fehlermeldung nicht gefällt.

CSTobey
quelle
6

Sie können den folgenden Befehl verwenden (vorausgesetzt, Sie haben mysql in Ihrem PATH eingerichtet):

mysql -h host -u benutzer -p

Ersetzen Sie einfach Host und Benutzer durch die richtigen Werte, und Sie sollten zur Eingabe Ihres Kennworts aufgefordert werden.

Herr Brownstone
quelle
2
Ich möchte programmgesteuert überprüfen. Wie etwas, das wahr oder falsch zurückgibt.
Jake Wilson
2
mysql --user=user_name --password=your_password dbname

Ist Ihre Frage so einfach, oder gibt es einen speziellen Fall, den Sie testen müssen?

Philᵀᴹ
quelle