我正在使用 mysql 命令行客户端,并且我不想每次启动客户端时都需要提供密码。我有什么选择?
答案1
在您的主目录中创建一个名为的文件.my.cnf
,如下所示。确保文件系统权限设置为只有拥有者才能读取它(0600)。
[client]
host = localhost
user = username.
password = thepassword
socket = /var/run/mysqld/mysqld.sock
#database = mysql
由于您也标记了您的问题 mysqldump ,所以您应该看看这个问题。
在 cron 任务中使用 mysqldump 无需 root 密码
更新(2016-06-29)如果你正在运行 mysql 5.6.6 或更高版本,你应该看看mysql_config_editor允许您的工具存储凭证在加密文件中。感谢乔瓦尼向我提及此事。
答案2
您可以使用该mysql_config_editor
实用程序将身份验证凭据存储在名为的加密登录路径文件中.mylogin.cnf
。
要创建一组新的凭证,请运行:
mysql_config_editor set --host=db.host.org --user=dbuser --password
并在提示时输入您的密码。
这会将您的身份验证凭据存储在默认client
登录路径中。
您可以通过指定不同的选项来存储多个身份验证凭据--login-path
:
mysql_config_editor set --login-path=db2 --host=db2.host.org --user=dbuser --password
默认情况下,mysql
客户端从其他选项文件中读取[client]
和[mysql]
组,因此它也会从登录路径文件中读取它们。使用选项--login-path
,客户端程序还会从登录路径文件中读取指定的登录路径。从其他选项文件读取的选项组保持不变。请考虑以下命令:
mysql --login-path=db2
客户端从其他选项文件mysql
读取[client]
和,从登录路径文件读取、和。[mysql]
[client]
[mysql]
[mypath]
要打印出配置文件中存储的所有信息,请运行:
mysql_config_editor print --all=true
有关该实用程序的更多信息,请访问“mysql_config_editor — MySQL 配置实用程序”。
答案3
我们决不能假装.mylogin.cnf完全安全,因为我可以使用my_print_defaults -s [use your login-path]
让该密码以纯文本显示。这就是 MariaDB 不支持这种“隐蔽安全”方法的原因。
答案4
还有另一种方法,与上述方法正交,但如果其他人正在监视您的显示器,或者您正在保存历史记录,则可能会存在安全风险。
尽管如此,它还是一个选项,可以阻止你被提示,我在一次性的docker镜像等中使用它......
mysql -u YOUR_USER --password=YOUR_PASSWORD_HERE your_database -e "your query" etc.
系统不会提示您,如果愿意,您可以在 shell 中设置一个临时别名。
谨慎使用。
mysql Ver 14.14 Distrib 5.5.61-38.13,适用于 debian-linux-gnu (x86_64),使用 readline 5.1