更新MySQL用户密码的安全方法

问题描述

据我所知,可以使用3种机制来更新MysqL(及其变体)中的用户密码

  1. ALTER USER 'user'@'host' IDENTIFIED BY 'pw';
  2. SET PASSWORD FOR 'user' = PASSWORD('pw');
  3. UPDATE MysqL.user SET authentication_string = PASSWORD('pw') WHERE User = 'user' AND Host = 'host';

其中只有#3可以使用准备好的语句执行。

从MariaDB 10.4开始,MysqL.user表现在是一个视图-因此该机制将无法正常工作,而且无论如何都无法与MysqL数据库打交道。 >

#1和#2由于无法准备好而容易受到sql注入攻击,因此存在问题:

是否有安全的方法来更新MysqL用户密码

解决方法

如果您使用的是PDO,请使用PDO::quote()退出密码。

如果您使用的是MySQLi,请使用mysqli_real_escape_string()

,

您需要使用前两种方法在mariadb 10.4中更改密码。

因为他们现在具有不同的身份验证插件,并且将密码存储在 global_priv 中,而不是在 user 表中。

>

建议仅通过本地主机进行操作,避免通过TCP并禁用历史记录。