LinuxサーバーのコマンドラインからMySQLの認証情報をどのようにテストしますか?
@ Phil's Answer と @ Mr.Brownstone's Answer はあなたの質問には十分なので、両方に+1します。
以下では、ユーザー名myuser
でログインしていると仮定します。
Mysqlに接続したら、次のクエリを実行する必要があります。
SELECT USER(),CURRENT_USER();
時々、それらは異なります。これにより、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のパスワードは適切であると確認されています。
mysql -h Host -u user -p<whatever> -e"quit"
これにより、プログラムでクエリをサーバーに送信する場合と同じ接続文字列を使用できます。末尾に|| exit 1
を追加して、無効な引数で自動終了することができます。自動生成されたMySQLエラーメッセージが気に入らない場合は、stderrを/dev/null
にリダイレクトすることもできます。
次のコマンドを使用できます(PATHにmysqlが設定されていることが前提)。
mysql -hホスト-uユーザー-p
Hostとserを正しい値に置き換えるだけで、パスワードの入力を求められます。
mysql --user=user_name --password=your_password dbname
あなたの質問は単純ですか、それともテストする必要がある特定のケースがありますか?