MySQL Shell 8.0.12 で追加された機能として、入力したパスワードを保存してくれるようになりました。
本記事では実際にどのように動作するかを検証してみました。
MySQL Shell のセットアップ
CentOS (Linux) の場合
1 2 |
$ yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm $ yum install -y mysql-shell |
Windows の場合
MySQL :: Download MySQL Installer からインストーラーをダウンロードして実行します
Mac の場合
MySQL :: Download MySQL Shell からインストーラーをダウンロードして実行
もしくは Homebrew がインストールされているなら下記のコマンドでインストールできます。
1 |
$ brew cask install mysql-shell |
パスワード保存機能を使ってみる
mysql shell で初回のログインするとパスワードを保存するか聞かれます。
1 2 3 4 |
$ mysqlsh root@127.0.0.1 Creating a session to 'root@127.0.0.1' Please provide the password for 'root@127.0.0.1': Save password for 'root@127.0.0.1:3306'? [Y]es/[N]o/Ne[v]er (default No): |
ここで「Y」を選択するとパスワードが保存され、次回からはパスワード入力無しでログインすることができます。
パスワード情報はどこに保存されるのか?
MacOS の場合、デフォルトではキーチェーンに保存されます。
Windowsの場合は認証マネージャーに保存されます。
Linuxの場合はlogin-pathとして保存されます。
1 2 |
$ ls -la $HOME/.mylogin.cnf -rw-------. 1 vagrant vagrant 152 Sep 19 05:25 /home/vagrant/.mylogin.cnf |
MySQL :: MySQL Shell 8.0 :: 2.2 Pluggable Password Store
login-pathを使って認証する
パスワードを保存する場所はOSが提供する認証マネージャ以外にもMySQLで以前からあったlogin-pathを使用することもできます。指定方法は下記の2つです
MYSQLSH_CREDENTIAL_STORE_HELPER
変数で指定する--credential-store-helper
オプションを指定して起動する
まずは mysql_config_editor
を使って login-path
を作ります。
1 2 |
$ mysql_config_editor set --login-path="mydatabase" --user=root --host=127.0.0.1 --password Enter password: |
mysql コマンドで login-path を使ってログインする場合、login-path で設定した名前でログインします。
1 |
$ mysql --login-path=mydatabase |
mysql-shell の場合は接続情報を指定してログインすることになります。
1 2 3 4 5 |
$ mysqlsh root@127.0.0.1 --credential-store-helper=login-path Creating a session to 'root@127.0.0.1' Fetching schema names for autocompletion... Press ^C to stop. ...省略... MySQL 127.0.0.1:3306 ssl JS > |
パスワード入力無しでログインすることができました。
MySQL Shell で認証情報を操作する
MySQL Shell 8.0.12 からはシェル内で認証情報を操作することが可能です。
キーチェーンの情報はもちろんですが、login-path の認証も操作することができます。
1 2 3 4 5 6 7 8 9 10 11 |
$ mysql-shell --credential-store-helper=login-path MySQL JS > shell.listCredentials() [ "root@127.0.0.1" ] MySQL JS > shell.deleteCredential("root@127.0.0.1") MySQL JS > shell.listCredentials() {} MySQL JS > \q $ cat ~/.mysql.conf ...空白... |
シェル上から認証情報を削除することができました。
まとめ
WindowsやMacを使っているユーザーであれば、MySQL Shell のこの機能を使うことでログイン情報をOSの認証マネージャーに預けることができるので管理が楽になってさらにセキュアになると考えられます。