安全输入密码是什么
在命令行直接写明文密码会同时泄露到三个地方: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,任何本地用户都能读取内容,等于把数据库账号公开;建立后要立刻确认权限与属主。