如何创建MySQL密码保护用户且全程不泄露明文密码?
创建无明文密码暴露的MySQL用户
要创建带密码保护的MySQL用户且全程避免密码以明文出现在命令行或表达式中,可采用以下几种安全方案,规避命令行明文密码被ps工具捕获、终端标题泄露等风险:
1. 交互式密码配置(推荐用于手动操作)
步骤:
- 不带密码参数登录MySQL:
mysql -u root
- 在交互Shell中创建用户,再用内置命令设置密码(输入时仅显示
*,无明文记录):
CREATE USER 'new_user'@'localhost'; \password new_user@localhost
跟随提示输入密码即可,全程无明文暴露。
2. 用mysql_config_editor生成加密登录文件(支持脚本/手动)
这个工具会将密码加密存储在~/.mylogin.cnf,避免明文传递:
- 初始化加密配置(执行后提示输入密码,加密存储):
mysql_config_editor set --login-path=admin --user=root --password
- 通过加密路径登录MySQL:
mysql --login-path=admin
- 后续创建用户、设置密码仍采用交互式方式,全程无明文密码出现在命令行。
- 如需给新用户配置加密登录,重复第一步替换用户名即可。
3. 环境变量临时传递(适用于脚本,需谨慎)
通过临时环境变量传递密码,避免明文写在命令行:
# 交互式输入密码并赋值给环境变量 read -s -p "Enter root password: " ROOT_PWD export MYSQL_PWD="$ROOT_PWD" # 登录MySQL mysql -u root unset MYSQL_PWD # 用完立即清除环境变量
进入Shell后按交互式方式创建用户、设置密码即可。注意:部分系统中环境变量可能被其他进程读取,安全性不如加密配置文件。
关键安全提醒
- 绝对避免使用
mysqladmin -u root password '明文密码'或mysql -u root -p'明文密码'这类命令,密码会瞬间暴露在命令行。 - 确保
~/.mylogin.cnf权限为600,仅当前用户可读写。 - 定期清理
~/.mysql_history,防止命令历史泄露密码痕迹。
内容的提问来源于stack exchange,提问作者Magnus Lind Oxlund
相关产品推荐
相关产品推荐

