0%

MySQL-避免密码明文写入shell脚本的最佳实践

引出问题

做数据加工的同学有时需要通过shell脚本执行sql语句操作MySQL, 对于下面的命令应该并不陌生。

1
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.

warning-insecure

那么用shell脚本操作MySQL时如何避免将密码明文写到shell脚本中呢? 本文提供2种思路

解决思路

思路1 defaults-extra-file 选项

defaults-extra-file 是 mysql 命令的一个选项,它允许你指定一个包含额外配置信息的配置文件,对于在执行mysql命令时提供一些额外的配置非常有用。

具体命令

1
mysql --defaults-extra-file=./my.cnf  -e "source ./sql/sql1.sql"

可以看到这里并没有在命令行中指定数据库连接信息,而是将这些信息配置在配置文件./my.cnf中

my.cnf

1
2
3
4
5
6
[client]
host=YOUR_HOST
port=YOUR_PORT
user=YOUR_USER
password=YOUR_PASSWORD
database=YOUR_DATABASE

思路2 MySQL 安全登陆工具 mysql_config_editor

mysql_config_editor 是MySQL自带的一款用于安全加密登录的工具,可以在一些场合避免使用明文密码;另外如果使用mysql命令登录数据库也可以避免每次都输入一堆参数。

具体使用方式

步骤1: 先用 mysql_config_editor 添加一个login-path

1
mysql_config_editor set -G test-login-path1 -h ${mysql_host} -P ${mysql_port} -u ${mysql_user} -p
  1. 该命令用mysql_config_editor创建一个名为test-login-path1的login-path
  2. 其会将登录MySQL的 username、password、port等信息加密存入一个隐藏文件 ~/.mylogin.cnf
  3. 该文件可作为连接MySQL服务器的认证凭证,以后在命令行或者脚本中可免于输入明文密码,安全方便

步骤2: 连接数据库时指定login-path即可,不需要再指定数据库信息

如下演示2个使用 –login-path 参数的命令

登录mysql的场景

1
mysql --login-path=test-login-path1

连接mysql 并执行sql语句的场景

1
mysql --login-path=test-login-path1 -e "source ./sql/sql1.sql"

是不是挺方便? 这样既避免了敏感信息的暴露,也避免了重复输入登录信息,方便了运维人员的工作。

总结

本文详细探讨了两种连接 MySQL 时避免将密码以明文形式写入shell 脚本的策略。通过采纳这些最佳实践,我们在完成工作的基础上,进一步加强了对敏感信息的保护。这些技巧的应用不仅提升了系统的安全水平,还展现了对隐私和敏感信息负责任的态度, 快点实践起来吧!


微信端的朋友也可关注我的公众号

qrcode-12cm