不使用root密码通过命令行连接MySQL?

Rey*_*rPM 12 mysql postgresql linux bash shell-scripting

我正在为某些任务构建 Bash 脚本。其中一项任务是从同一个 bash 脚本中创建一个 MySQL 数据库。我现在正在做的是创建两个变量:一个用于存储用户名,另一个用于存储密码。这是我的脚本的相关部分:

MYSQL_USER=root
MYSQL_PASS=mypass_goes_here

touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql
Run Code Online (Sandbox Code Playgroud)

但是总是收到一个错误,说没有密码的用户 root 访问被拒绝,我做错了什么?我需要为 PostgreSQL 做同样的事情。

kwo*_*orr 26

对于 MySQL 和 PostgreSQL,您都可以在本地配置文件中指定您的用户名和密码。.my.cnf 用于 MySQL,.pgpass 用于 PostgreSQL。这些文件应该在您的主目录中(即 ~/.my.cnf)。

.my.cnf:

[mysql]
user=user
password=password
Run Code Online (Sandbox Code Playgroud)

.pgpass:

host:port:database:user:password
Run Code Online (Sandbox Code Playgroud)

您可以在此处使用通配符条目,用任何字段替换 *******。

PS:永远不要在命令行指定密码!如果您的系统没有配置为不显示属于其他用户的进程,这可以通过ps完全可见。

@thinice:如果你想创建真正安全的文件,你应该这样做:

umask 077
touch .my.new.config
umask 022 # or whatever was your default
Run Code Online (Sandbox Code Playgroud)

这样,文件从一开始就以安全权限创建,没有窃听者有机会窃取您的密码。

无论如何,PostgreSQL 将拒绝使用权限高于 0600 的文件。