重置密码所需的 MySQL 权限

TFe*_*ell 8 mysql security permissions user-defined-type

在我的团队中,有些用户希望定期更新他们的 MySQL 密码。

我们的 MySQL 服务器在几个项目之间共享(某些用户被分配到某些项目)。如果我是对的,更改密码需要访问 mysql.user 表(这将允许用户修改服务器上任何其他用户的密码。)

如果这一切都是正确的,有没有办法以用户可以更新其密码而不是其他用户的方式来保护数据库?

Rol*_*DBA 7

用户应该能够严格使用SET PASSWORD更改他/她自己的密码。

对于要连接的用户将新密码设置为mynewpass,只需运行以下命令:

mysql> SET PASSWORD = PASSWORD('mynewpass');
Run Code Online (Sandbox Code Playgroud)

根据SET PASSWORDMySQL 文档,如果服务器是只读服务器,则需要SUPER权限才能执行此操作。否则,您可以随时执行此操作。无需其他用户设置其他人的密码。如果您需要超级用户来设置它,您仍然可以使用 SET PASSWORD。

要将密码设置'someuser'@'10.1.2.30'hisnewpass,请运行以下命令:

mysql> SET PASSWORD FOR 'someuser'@'10.1.2.30' = PASSWORD('hisnewpass');
Run Code Online (Sandbox Code Playgroud)

根据SET PASSWORDMySQL 文档,这相当于:

UPDATE mysql.user SET Password=PASSWORD('hisnewpass')
WHERE User='someuser' AND Host='10.1.2.30';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

使用SET PASSWORD不保证操作mysql.user.