首页/数据/数据库速查/mysql 安全输入密码的三种方式

mysql 安全输入密码的三种方式

命令行携带明文密码会泄露到历史记录与进程列表;推荐 mysql_config_editor 加密登录路径,其次 600 权限选项文件,环境变量仅限测试。

数据库速查数据更新于 2026-10-13

安全输入密码是什么

在命令行直接写明文密码会同时泄露到三个地方:shell 历史记录、进程列表、以及可能被其他用户读取的环境变量。推荐用 mysql_config_editor 建立加密的登录路径,其次是用权限 600 的独立选项文件,环境变量方式只适合临时测试。

基本信息

首选方案mysql_config_editor set --login-path,凭据加密存入 ~/.mylogin.cnf
备选方案--defaults-extra-file 指向权限 600 的选项文件
不推荐命令行 --password 明文,或 MYSQL_PWD 环境变量
兼容范围mysql、mysqldump、mysqladmin、mysqlbinlog 均支持 --login-path
权限要求凭据文件属主为使用者,其他用户不可读写

典型使用场景

  • 运维日常登录:为每个环境建一个登录路径(生产、预发、测试),切环境只改参数
  • 备份脚本:用只读备份账号的登录路径,脚本里不出现任何密码字符
  • 定时任务与 CI:配置文件权限收紧到 600,避免被同机其他账号读取
  • 多账号切换:通过登录路径名区分读写账号与只读账号,降低误操作风险
  • 临时排查:确实需要临时密码时用后立即清理历史记录与临时文件

三种方式对照

三种方式对照
# 方式一:加密登录路径(推荐)
mysql_config_editor set --login-path=prod --host=10.0.0.5 --user=dba --port=3306 --password
mysql --login-path=prod -e "SELECT 1;"
mysql_config_editor print --all            # 查看已保存的登录路径(密码不显示)
# 方式二:独立选项文件
printf '[client]\nuser=backup\npassword=***\nhost=127.0.0.1\n' > /etc/mysql/backup.cnf
chmod 600 /etc/mysql/backup.cnf
mysql --defaults-extra-file=/etc/mysql/backup.cnf -e "SELECT 1;"
# 方式三:环境变量(仅测试)
export MYSQL_PWD='***'

三种方式对比

方式泄露风险适用
登录路径低,凭据加密存储日常运维与自动化脚本
选项文件低,取决于文件权限无法使用登录路径的旧版本工具
命令行明文高,进历史与进程列表不建议用于任何环境
环境变量高,同机可读进程环境仅限一次性测试
命令行密码不仅进入 shell 历史,还能被同机的普通用户在进程列表里看到,两个途径都足以让凭据泄露。
凭据文件权限若为 644,任何本地用户都能读取内容,等于把数据库账号公开;建立后要立刻确认权限与属主。

易错点

  • MYSQL_PWD 被同机任意用户通过进程环境读取,等同明文密码
  • 脚本里写 --password 或 -p 加明文:凭据随脚本进入版本库与历史记录
  • 凭据文件权限未收紧:备份账号密码被其他用户读取
  • 把生产密码写进登录路径后共用同一份 home 目录:多账号共享主机时相当于共享凭据

数据来源与参考

  • MySQL 8.0 Reference Manual: mysql_config_editor — MySQL Configuration Utility

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌