如何更改 MySQL 用户密码而无需在控制台上明显键入?

mwf*_*ley 5 mysql security password

我见过在 MySQL 中设置密码的各种方法,例如:

GRANT USAGE ON db.* to 'dave'@'localhost' IDENTIFIED BY 'supersecretpassword');
SET PASSWORD [FOR 'dave'@'localhost'] = PASSWORD('reallysecretpassword');
UPDATE mysql.user SET PASSWORD=PASSWORD('confidentialpassword') WHERE user='dave' AND host='localhost';
Run Code Online (Sandbox Code Playgroud)

但它们似乎涉及将密码作为 SQL 命令的一部分以明文形式输入,这引起了人们对诸如它是否最终出现在我的 SQL 命令历史记录中,或者是否有人在看我的肩膀或可以偷看我的终端回滚等事情的偏执.

无论如何我可以让 MySQL 提示我提供密码而不将其回显到屏幕上(与 Unix 相同的方式passwd)?

mwf*_*ley 0

正如Federico Sierra在评论中指出的那样,您可以使用mysqladmin password命令更改您可以登录的任何用户的密码。

以前必须在命令行上提供密码,但从 5.7 开始,如果省略密码,则会提示输入密码。

来自mysqladmin 文档

password 新密码

设置新密码。这会将您用于连接服务器的帐户的密码更改为new_password 。mysqladmin因此,下次您mysqladmin使用同一帐户调用(或任何其他客户端程序)时,您将需要指定新密码。

[...]

在 MySQL 5.7 中,命令后面的新密码可以省略password。在这种情况下,mysqladmin系统会提示输入密码值,这样您就可以避免在命令行上指定密码。仅当密码是命令行上的最终命令时才应忽略密码值mysqladmin。否则,下一个参数将被视为密码。

因此,如果您可以以用户身份登录(即您知道用户的密码 - 并且您位于允许登录的主机上) - 那么您可以使用以下方法更改他们的密码:

mysqladmin password -u <user_name> [-p]
Run Code Online (Sandbox Code Playgroud)

例如

$ mysqladmin password -u dave -p
Enter password: 
New password: 
Confirm new password: 
Run Code Online (Sandbox Code Playgroud)

当然,如果您拥有 root 权限,您可以重置用户的密码(并在必要时更改其主机),以便您能够登录来执行此操作。但这也有其自身的风险,因此并不理想。