web-dev-qa-db-ja.com

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

パスワードをインタラクティブに指定する必要なく、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です。クライアントとサーバーは異なるホスト上にあります。

ありがとう

11

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

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

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

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

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

mysql

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

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

2
Joshua Huber

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

mysql_config_editor set --login-path = lgpath --user = root -p
パスワード

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

mysql --login-path = lgpath

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

mysql_config_editor set --help

10
Nawaz Sohail

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

私の問題:

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

mysql_config_editorは、パスワードの特殊文字を適切に処理しません。

解決:

いつ mysql_config_editorはパスワードの入力を要求します。パスワードを二重引用符( ")で囲んでください。その後、問題なくログインできます。

3
quexy

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

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

1
gamorten

Nawazの答えは正しいです。追加するものはほとんどありません。デフォルトのファイルが壊れている場合に備えて、環境変数MYSQL_TEST_LOGIN_FILEを使用して新しい構成ファイルを作成することをお勧めします。 --no-defaultsファイルをスキップするには、.cnfも使用します。パスワードに#という文字が含まれている場合、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
0
Giovanni

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

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

0
Plazgoth

[〜#〜]ノート[〜#〜]pathunder the linux userroot-を実行しようとしている場合単にSudoを使用することはできません。 rootとしてログインする必要がありますIEIE

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パスワードの前後に二重引用符を使用する必要があります

0
Zak

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

0
dbCarl