Kok*_*zzu 54 password mysql stdin
foo.php
例如P455w0rd
,当我尝试使用它时,我将 MySQL 密码保存在一个文件中:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
Run Code Online (Sandbox Code Playgroud)
这两个选项仍然要求输入密码,从 发送密码的正确方法是stdin
什么?
Kus*_*nda 52
该mysql
客户端程序可以采取在命令行上输入密码与任一-p
或--password=
选项。
如果使用-p
,则选项字母后不得有任何空格:
$ mysql -pmypassword
Run Code Online (Sandbox Code Playgroud)
我更喜欢脚本中的长选项,因为它们是自我记录的:
mysql --password=mypassword --user=me --host=etc
Run Code Online (Sandbox Code Playgroud)
gar*_*Red 47
您必须非常小心地将密码传递给命令行,因为如果您不小心,您最终会使用诸如ps
.
最安全的方法是创建一个新的配置文件并将其传递给mysql
使用--defaults-file=
或--defaults-extra-file=
命令行选项。
两者之间的区别在于,除了默认配置文件之外,还会读取后者,而对于前者,仅使用作为参数传递的一个文件。
您的附加配置文件应包含类似于以下内容的内容:
[client]
user=foo
password=P@55w0rd
Run Code Online (Sandbox Code Playgroud)
确保您保护此文件。
然后运行:
mysql --defaults-extra-file=<path to the new config file> [all my other options]
Run Code Online (Sandbox Code Playgroud)
小智 11
创建一个文件~/.my.cnf,设置为只能自己访问,权限600。
[client]
user=myuser
password=mypassword
Run Code Online (Sandbox Code Playgroud)
然后你就不需要再输入密码了。
bash$ mysql -u myuser mydatabase
mysql>
Run Code Online (Sandbox Code Playgroud)
你可以使用一个漂亮的 Linux 技巧......
/dev/stdin
可以用作文件资源,如下--defaults-file
所示:
echo -e "[client]\nuser=xxx\npassword=xxx" | mysql --defaults-file=/dev/stdin -e 'select user()' <database_name>
您通常可以使用-
代替/dev/stdin
,但许多程序(包括mysql
)不遵守这一约定。
有关文件资源的更多信息/dev/stdin
:
$ ls -la /dev/stdin
lrwxrwxrwx 1 root root 15 Jun 19 08:35 /dev/stdin -> /proc/self/fd/0
Run Code Online (Sandbox Code Playgroud)
这样您还可以检查空密码情况
正如@maxschlepzig 在评论中所说,
请注意,如果不指定 -p,mysql 会读取 MYSQL_PWD 环境变量。
所以在bash中:
read -s -p "Enter the mysql password for $DBUSER @ $DBNAME: " DBPASS
export MYSQL_PWD="$DBPASS"
mysqldump -u $DBUSER $DBNAME > dump.sql
# once you are done
export MYSQL_PWD=""
Run Code Online (Sandbox Code Playgroud)