MySQL-避免密码明文写入shell脚本
日常编写mysql脚本时常用命令:mysql -h${mysql_host} -P${mysql_port} -u${mysql_user} -p${mysql_password} ${mysql_dbname} -e "source ./sql/sql1.sql"
命令行将提示:Warning: Using a password on the command line interface can be insecure.
解决方法:
使用
defaults-extra-file
选项defaults-extra-file 是 mysql 命令的一个选项,它允许你指定一个包含额外配置信息的配置文件,对于在执行mysql命令时提供一些额外的配置非常有用。
mysql --defaults-extra-file=./my.cnf -e "source ./sql/sql1.sql"
my.cnf
[client]
host=YOUR_HOST
port=YOUR_PORT
user=YOUR_USER
password=YOUR_PASSWORD
database=YOUR_DATABASE
- MySQL 安全登陆工具
mysql_config_editor
先用 mysql_config_editor
添加一个 login-path
mysql_config_editor set -G test-login-path1 -h ${mysql_host} -P ${mysql_port} -u ${mysql_user} -p
该命令用mysql_config_editor
创建一个名为test-login-path1
的login-path
。其会将登录MySQL的username、password、port等信息加密存入一个隐藏文件 ~/.mylogin.cnf
连接数据库时指定login-path即可,不需要再指定数据库信息
登录:mysql --login-path=test-login-path1
连接mysql并执行sql语句:mysql --login-path=test-login-path1 -e "source ./sql/sql1.sql"
mysql_config_editor介绍
mysql_config_editor 是MySQL自带的一款用于安全加密登录的工具,可以在一些场合避免使用明文密码;另外如果使用mysql命令登录数据库也可以避免每次都输入一堆参数。
这个文件的位置在Windows上是%APPDATA%\Roaming\MySQL目录,在非Windows系统上是当前用户的家目录,如/root目录。该文件可以被MySQL客户端程序读取,以获得连接到MySQL服务器的认证凭证。
mysql_config_editor对 .mylogin.cnf文件进行模糊处理,因此无法将其作为明文读取,比如使用cat是不能查看的。
但mysql_config_editor提供了一个 print命令用于显示登录路径文件内容的命令,但即使在这种情况下,密码值也会被屏蔽,以免以其他用户可以看到的方式出现(见后面举例)。
使用mysql_config_editor可以管理一台MySQL实例,也可以用于管理多台MySQL实例。最重要的是能免除在命令行、脚本里输入明文密码,带来一系列的安全隐患了。不仅方便,而且安全。
mysql_config_editor的4个选项
--help
--debug
--verbose
--version
mysql_config_editor的4个命令
set: 创建一个登录MySQL的路径(别名)信息,将登录路径的用户名密码等相关参数写入登录路径文件.mylogin.cnf
该命令后面包含–-host、–-password、–-port、–-socket和–-user等几个选项,用于定义要登录的数据库的相关参数。如果没有给出这些选项,mysql_config_editor将登录路径写入空组。
reset: 清空登录路径文件中的全部内容
可选参数:--help
remove:从原有的登录路径文件中删除指定的登录路径或删除某个登录路径(别名)的某一项参数。
mysql_config_editor remove --login-path=test-login-path1 --password
mysql_config_editor remove --login-path=test-login-path1
print: 打印登录路径文件的内容,但密码显示为 *
可选参数:
--help
--all 打印登录文件中所有登录路径
--login-path=name 打印指定登录路径的内容