MySQL 在 Bash Shell、Script 執行,若有密碼直接打在命令列裡面,都會出現下述的警告 (Warning):
Warning: Using a password on the command line interface can be insecure
為何會有這個警告呢?
主要是平常 CLI 的命令,用 ps 都可以查看到,若密碼打在上面,密碼很容易就因此洩漏出去(不過 MySQL 新版有避免這個問題,密碼直接輸入,於 ps 是看不到密碼的)。
當然除了 ps 外,還有很多方法可以查看,在此就不繼續探討。
MySQL 使用 mysql_config_editor 避免 CLI 出現密碼
Percona MySQL 的 mysql_config_editor 套件: apt install libperconaserverclient21-dev
上述講到的 Warning,MySQL 為了解決此問題,有做一個 mysql_config_editor,會將主機的 host、帳號、密碼 等資訊存入並加密(AES ECB),直接使用來登入,相對會安全很多,此篇主要來介紹 mysql_config_editor 的幾個用法。
- MySQL 官方文件:4.6.7 mysql_config_editor — MySQL Configuration Utility
- mysql_config_editor [program_options] command [command_options] # 參數說明
- mysql_config_editor 要注意 --login-path 等同是 project name 類似的意思,設定檔的新增、刪除、使用都是靠這個
最簡化使用設定方式:
- mysql_config_editor set --user=root --password # 設定本機 localhost 的 root 帳號,密碼 ENTER 後輸入
- 註:上述可簡化為 mysql_config_editor set -u root -p
- 設定完成後,直接 mysql -u root 即可進入
下述範例與資料整理自官方文件:
一般設定檔內容:(此篇會用此設定檔當範例來設定 mysql_config_editor)
[client]
user = localuser
password = localpass
host = localhost
[remote]
user = remoteuser
password = remotepass
host = remote.example.com
新增 mysql_config_editor 設定
將上述設定檔,設定入 mysql_config_editor
- $ mysql_config_editor set --login-path=client --host=localhost --user=localuser --password
- Enter password: 輸入 "localpass"
- $ mysql_config_editor set --login-path=remote --host=remote.example.com --user=remoteuser --password
- Enter password: 輸入"remotepass"
- $ mysql_config_editor set --login-path=127.0.0.1 --host=127.0.0.1 --user=root --port=3306 --password
- ls ~/.mylogin.cnf # 可以看到此檔案,less 看都會是 binary
- $ mysql_config_editor print --all # 查看所有設定,密碼不會直接呈現
[client]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
host = remote.example.com
使用 mysql_config_editor 登入、操作 SQL 命令
- $ mysql --login-path=client # 登入 [client]
- $ mysql --login-path=remote # 登入 [remote]
- $ mysql --login-path=remote --host=remote2.example.com # 若需要登入其它主機,但是帳號、密碼一樣
- $ mysql --login-path=client dbname -e "SQL statement" # 直接登入執行 SQL 語法
移除 mysql_config_editor 設定檔
- $ mysql_config_editor remove --login-path=remote
- $ mysql_config_editor remove --login-path=remote --user
- $ mysql_config_editor reset # 全部重設
MySQL 5.7 標準 Client 的 mysql_config_editor 位置
- 於此篇 mysql-client-5.7 可以查到 mysql_config_editor 的位置:/usr/bin/mysql_config_editor
至於使用 Percona 的話,5.6 版有 mysql_config_editor,5.7 版卻沒有,要怎麼解決呢?
找 Percona 的 mysql_config_editor 套件在哪裡
- dpkg -S mysql_config_editor # 找是哪個 package percona-server-client-5.6: /usr/share/man/man1/mysql_config_editor.1.gz percona-server-client-5.6: /usr/bin/mysql_config_editor
- sudo apt install percona-server-client # 若是 Percona 5.6 可以這樣查詢、安裝
Percona client 5.7 卻沒有 mysql_config_editor 的解法
- apt-get install libperconaserverclient20-dev # 最後找到於此套件有 mysql_config_editor
相關網頁
- MySQL 執行 bash script 出現 Warning: Using a password on the command line interface can be insecure
- Suppress warning messages using mysql from within Terminal, but password written in bash script
- mysql_config_editor(1) — mysql-client-5.7 — Debian unstable
- mysql_config_editor/login-path 使用
- mysql_config_editor 工具
- MySQL 新特性之 mysql_config_editor 加密算法語解密實現