【问题标题】:Safe way to update MySQL user password更新 MySQL 用户密码的安全方法
【发布时间】:2020-09-10 10:51:35
【问题描述】:

据我所知,可以使用 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 用户密码的安全方法?

【问题讨论】:

  • 您为什么希望在 Web 界面中更新 MySQL 用户密码?
  • 我在一家网络托管公司工作
  • 仍然不确定为什么要在 Web 界面上以需要使用参数化查询的交互方式执行此操作。密码由租户管理软件生成,无需用户输入。
  • 这些 cmets 与手头的问题无关
  • 我不同意。问题的根本原因是您似乎试图将功能转移到交互式 Web 应用程序中,而实际上您不应该这样做。如果密码是由应用程序生成的,而不是通过用户输入生成的,那么您一开始就不会有这个问题!

标签: mysql sql security change-password


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    mariadb 10.4 需要使用前两种方法修改密码。

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

    建议仅通过 localhost 进行,避免通过 TCP 并禁用历史记录。

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 2018-01-02
      • 2012-02-29
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      相关资源
      最近更新 更多