问题描述
据我所知,可以使用3种机制来更新MysqL(及其变体)中的用户密码。
-
ALTER USER 'user'@'host' IDENTIFIED BY 'pw';
-
SET PASSWORD FOR 'user' = PASSWORD('pw');
-
UPDATE MysqL.user SET authentication_string = PASSWORD('pw') WHERE User = 'user' AND Host = 'host';
其中只有#3可以使用准备好的语句执行。
从MariaDB 10.4开始,MysqL.user
表现在是一个视图-因此该机制将无法正常工作,而且无论如何都无法与MysqL
数据库打交道。 >
#1和#2由于无法准备好而容易受到sql注入攻击,因此存在问题:
解决方法
如果您使用的是PDO,请使用PDO::quote()
退出密码。
如果您使用的是MySQLi,请使用mysqli_real_escape_string()
。
您需要使用前两种方法在mariadb 10.4中更改密码。
因为他们现在具有不同的身份验证插件,并且将密码存储在 global_priv 中,而不是在 user 表中。
>建议仅通过本地主机进行操作,避免通过TCP并禁用历史记录。