MySQLクライアントにmylogin.cnfからパスワードを読み取らせるにはどうすればよいですか?


11

パスワードをインタラクティブに指定する必要なく、mysqlクライアントをmysqlサーバーに接続しようとしています。実行した手順:

1)最初にmylogin.cnfファイルを作成します

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2)ファイルが正常に作成されました:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3)MySQLクライアントを使用して接続する

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

クライアントにmylogin.cnfのパスワードを無視させるデフォルト値/構成はどこにありますか?ユーザーとホストのプロパティがファイルから正しく読み取られました。

コマンドラインでパスワードを指定すると、問題なく接続できます。

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

MySQLクライアントのバージョンは5.6.22、MySQLサーバーのバージョンは5.6.22で、どちらもOracle Linux 6です。クライアントとサーバーは異なるホスト上にあります。

ありがとう

回答:


2

これを行うには、おそらくどこかにパスワードを保存することになります。MySQL 5.6のログインパスでさえ、やる気のある人なら誰でも簡単に解読できます。その警告によると、これは簡単な解決策になるでしょう。

環境スクリプト(~/.profileまたはなど~/.bashrc)で、

alias mysql='mysql -uUser -pPasswd -hHostname'

(もちろん、必要なユーザー、パスワード、ホスト名を入力します。)

シェルの再ログイン後、簡単に実行できるはずです

mysql

...エイリアスを使用してDBに接続し、.my.cnfファイル内のパスワードを無視します。

セキュリティ上の注意:サーバー上に他のユーザーがいる場合、他のユーザーがパスワードに簡単にアクセスできないように、プロファイルスクリプトをchmod 700することをお勧めします。rootまたはsudoを持つ管理者は、まだそれを見ることができます。それを回避する方法はありません。


これは実際の問題の回避策ですが、これで問題ありません。私はこの答えを免責事項とともに将来の読者に受け入れます。それを行う適切な方法はNawazの答えであることですが、それは未知の理由で私の環境では機能しません。ありがとう!
Lefteris Koutsoloukas

1
-1これは、OPのクエリに応答することも、ファイルにパスワードを格納することを回避することもありません。現在、パスワードは.mylogin.cnfではなく.profileに保存されています。しかし、今ではパスワードはpsコマンドによって表示されます。
miracle173

@ miracle、psがパスワードを明らかにするというあなたの主張を検証してください。私のシステムでは、ps出力でパスワードがxxxxxxxとしてマスクされています。MySQLクライアントが私のように動作していない場合は、実行しているmysqlのバージョンとディストリビューションを投稿してください。そして、OPの実際の質問に対するより良い回答がありますか?
Joshua Huber 2015

2
@joshua:パスワードセキュリティのエンドユーザー向けガイドライン:「コマンドラインで-pyour_passまたは--password=your_passオプションを使用する(...)これは便利ですが安全ではありません。」
miracle173

10

最初にログインパスを設定するには、次のコマンドを使用します

mysql_config_editor set --login-path = lgpath --user = root -p
password

そして、以下のコマンドを使用してmysqlにログインします

mysql --login-path = lgpath

mysqlログインパスオプションに関するヘルプは、

mysql_config_editor set --help


ログインパスを明示的に設定しようとしましたが、残念ながら同じ動作です:$ mysql_config_editor print --all [lgpath] user = <user> password = ***** host = <host> $ mysql --login -path = lgpathエラー1045(28000):ユーザー '<user>' @ '<host>'へのアクセスが拒否されました(パスワード:NOを使用)
Lefteris Koutsoloukas

3

私はOPと同じ問題を抱えていましたが、このスレッドの答えは私を混乱させました。Vinay Mandalaのリンクは実際に機能しました。明確にするために、ここに再投稿しました。

私の問題:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

mysql_config_editorがパスワードの特殊文字を適切に処理しないことを証明します。

解決:

ときにmysql_config_editorパスワードの入力を求めるプロンプトを表示あなたは、あなたがパスワードを囲むことを確認して、二重引用符( ") 。その後、あなただけの罰金にログインすることができます。


1

私はこのエラーを受け取りました、それが言ったことを除いて(パスワードを使用して:YES)

Giovanniが述べた理由は、パスワードの「#」が原因でした。回避策は、プロンプトが表示されたときにパスワードを引用符で囲むことです。同じ制限が、.my.cnfを使用するプレーンテキストのパスワードにも存在します。


0

Nawazの答えは正しいです。追加するものはほとんどありません。デフォルトのファイルが壊れている場合に備えて、環境変数MYSQL_TEST_LOGIN_FILEを使用して新しい構成ファイルを作成することをお勧めします。ファイル--no-defaultsをスキップ.cnfするためにも使用します。パスワードにcharが含まれている場合#mysql login-path機能しません。

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test

この環境変数は設定されていません。設定しましたが、まったく同じ動作が得られました。mylogin.cnfのパスワードは無視されました。
Lefteris Koutsoloukas

mysqlコマンドを実行するユーザーは確かmysqlですか?そうでない場合は、所有者を変更すれmylogin.cnfば機能します:)
Iazel

0

元のポスターと同様の問題が発生しています。正しく暗号化/復号化されないパスワードの文字に関係しているのではないかと思います。

確認するには、パスワードを簡単なものに変更して、この問題が解消するかどうかを確認してください。


同じ問題がありました。以下のようPlazgothは指摘し、私は、パスワードに特殊文字を持っていたし、それは働いていませんでした。私にとって効果的だったのは、この投稿に関するユーザーbgladからの提案です
Vinay Mandala

0

シェルスクリプトでこの問題が発生しました。スクリプトが$ HOME値を変更していたため、-login-path = ***が無視されているように見えました。$ HOME値の変更を停止すると、動作し始めました。


0

Linuxユーザーpathでを実行しようとしている場合の注意 -単に使用することはできません。root IE としてログインする必要があります rootsudo

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

また、ここの他の投稿で述べたように、英数字以外の文字が含まれている場合mysqlパスワードを二重引用符で囲む必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.