我正在为一些任务构build一个Bash脚本。 其中一个任务就是在相同的bash脚本中创build一个MySQL数据库。 我现在正在做的是创build两个variables:一个用于存储用户名,另一个用于存储密码。 这是我的脚本的相关部分:
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
但总是得到一个错误,说没有密码的用户root访问被拒绝,我做错了什么? 我需要为PostgreSQL做同样的事情。
对于MySQL和PostgreSQL,您都可以在本地configuration文件中指定您的用户名和密码。 .my.cnf用于MySQL,.pgpass用于PostgreSQL。 这些文件应该在你的主目录(即〜/ .my.cnf)。
.my.cnf:
[mysql] user=user password=password
.pgpass:
host:port:database:user:password
你可以在这里有一个通配符条目,用任何字段代替*******。
PS: 不要在命令行上指定密码! 如果您的系统未configuration为不显示属于其他用户的进程,则可以使用ps完美显示。
@thinice:如果你想创build这些文件真的很安全,你应该这样做:
umask 077 touch .my.new.config umask 022 # or whatever was your default
通过这种方式,文件将从一开始就以安全的权限创build,窃听者不会有机会泄露您的密码。
无论如何,PostgreSQL将拒绝使用权限高于0600的文件。
MYSQL_USER="root" MYSQL_PASSWORD="PASSWORD" DBNAME="DB_NAME" mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DBNAME;" 2> /tmp/error1 STATUS=$? if [ $STATUS -eq 0 ]; then echo -e "Database '$DBNAME' is created" elif (grep -i "^ERROR 1007" /tmp/error1 > /dev/null); then echo -e "Database '$DBNAME' already exists" else echo -e "Failed to create database '$DBNAME'" fi rm -r /tmp/error1
这将做的伎俩谢谢
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
确保你如何写你的通行证,它不会逃脱
–defaults-extra-file =是一件好事(tm)(c)
不要把密码引起来,因为如果你这样做的话引用被认为是密码的一部分。
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password
如何使用安全密码执行命令行? 使用configuration编辑器!
从MySQL 5.6.6开始,您可以将密码存储在configuration文件中,然后执行cli命令,如下所示。
mysql --login-path=storedPasswordKey ....
–login-pathreplacevariables…主机,用户和密码。 优秀的权利!