我可以为多个mysql命令行调用输入一次密码吗,在那里查询不是预先知道的?

2hh7jdfx  于 5个月前  发布在  Mysql
关注(0)|答案(2)|浏览(56)

你可以通过把查询放到一个文件中来避免重新输入mysql命令行密码。
在我的例子中,后面的查询直到第一个查询完成后才被确定。
这发生在一个非交互式脚本中,所以运行mysql控制台不是一个选择。
mysql命令行交互有会话的概念吗?或者我可以设置它来监听本地unix套接字上的命令(需要返回输出)?或者类似的东西?

e7arh2l6

e7arh2l61#

用户@smcjones提到使用.my.cnf文件或mysql_config_editor。这些都是很好的建议,我给予我的+1票给他。
另一种解决方案是将凭据放在您选择的任何文件中,然后在调用MySQL工具时指定该文件:

mysql --defaults-extra-file=my_special.cnf ...other arguments...

字符串
最后,为了完整起见,您可以使用环境变量作为某些选项,如主机和密码。但奇怪的是,不能使用用户。参见http://dev.mysql.com/doc/refman/5.7/en/environment-variables.html

export MYSQL_HOST="mydbserver"
export MYSQL_PWD="Xyzzy"
mysql ...other arguments...


我并不推荐使用环境变量作为密码,因为任何可以在你的客户端主机上运行ps的人都可以看到mysql客户端进程的环境变量。
关于环境变量的评论:
我接受现代 Linux 上的事实是only the owner of the process can see their environment使用ps/proc/<pid>/environment
但在BSD UNIX(包括MacOS)中,ps的工作方式不同,并且将为其他用户显示环境。
即使在Linux上,用户可能会无意中在ps中显示自己的环境,这一事实也足以成为避免使用环境变量获取敏感信息的理由。
不管是什么操作系统,使用环境变量作为密码的功能都不受欢迎。
https://dev.mysql.com/doc/refman/8.0/en/environment-variables.html说:
使用MYSQL_PWD来指定MySQL密码必须被认为是极不安全的,不应该使用。某些版本的ps包括一个显示运行进程的环境的选项。在某些系统上,如果您设置MYSQL_PWD,则您的密码将暴露给任何其他运行ps的用户。即使在没有这样的ps版本的系统上,假设没有其他方法可以让用户检查过程环境是不明智的。
MYSQL_PWD自MySQL 8.0起已弃用;预计在MySQL的未来版本中将其删除。

fafcakar

fafcakar2#

在MySQL中有几种方法可以处理这个问题。
1.将密码放在运行脚本的用户的主目录中的隐藏.my.cnf中。
[客户端]用户=用户密码=密码
1.使用mysql_config_editor
mysql_config_editor set --login-path=client --host=localhost --user=localuser --password
当系统提示您输入密码时,请像平常一样输入密码。
1.我认为这是最糟糕的选择,但为了完整起见,我会添加它。
你总是可以为MySQL创建一个函数 Package 器来附加你设置的密码。

#! /bin/bash

local_mysql_do_file() {
    mysql -u localuser -h localhost -pPASSWORD_NO_SPACE < $1
}

# usage
local_mysql_do_file file.sql

字符串

相关问题