web-dev-qa-db-ja.com

LinuxコマンドラインからMySQL資格情報をテストしますか?

LinuxサーバーのコマンドラインからMySQLの認証情報をどのようにテストしますか?

17
Jake Wilson

@ Phil's Answer@ Mr.Brownstone's Answer はあなたの質問には十分なので、両方に+1します。

以下では、ユーザー名myuserでログインしていると仮定します。

Mysqlに接続したら、次のクエリを実行する必要があります。

SELECT USER(),CURRENT_USER();
  • SER() は、MySQLで認証を試みた方法を報告します
  • CURRENT_USER() MySQLでの認証が許可された方法を報告します

時々、それらは異なります。これにより、mysqlへのログインが許可される理由がわかります。

次に、実行する必要がある別のクエリを示します。

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

これにより、myuserとしてログインできる方法が表示されます。

'myuser'@'localhost'が表示されている場合は、DBサーバー内から認証できます。

'myuser'@'127.0.0.1'が表示され、'myuser'@'localhost'が表示されない場合は、DBサーバー内から再び認証できますが、コマンドラインから--protocol=tcpを指定する必要があります。

'myuser'@'%'が表示されている場合は、任意のサーバーからリモートログインできます。

'myuse'r@'10.20.30,%'が表示される場合は、10.20.30。%ネットブロックからのみリモートログインできます。

'mysql.user'がユーザーに対して持っているものを確認したら、myuserのログインを1つの方法で許可または制限し、他の方法では許可しないことができます。

myuserのパスワードがwhateverpasswordであるかどうかを確認するだけの場合は、次の操作を実行できます。

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

コマンドラインから次のように確認できます。

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

rootでなく、myuserのみをテストする場合は、次のようにできます。

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

1を取得した場合、myuserのパスワードは適切であると確認されています。

5
RolandoMySQLDBA
mysql -h Host -u user -p<whatever> -e"quit"

これにより、プログラムでクエリをサーバーに送信する場合と同じ接続文字列を使用できます。末尾に|| exit 1を追加して、無効な引数で自動終了することができます。自動生成されたMySQLエラーメッセージが気に入らない場合は、stderrを/dev/nullにリダイレクトすることもできます。

13
CSTobey

次のコマンドを使用できます(PATHにmysqlが設定されていることが前提)。

mysql -hホスト-uユーザー-p

Hostserを正しい値に置き換えるだけで、パスワードの入力を求められます。

6
Mr.Brownstone
mysql --user=user_name --password=your_password dbname

あなたの質問は単純ですか、それともテストする必要がある特定のケースがありますか?

2
Philᵀᴹ