在 MySQL SERVER 8.0 中,密码功能不起作用

Fab*_*o C 19 mysql mysql-8.0

PASSWORD在 MySQL Server version 8.0.12 中执行函数时出错

我有以下查询:

SELECT * 
FROM users 
WHERE login = 'FABIO' 
  AND pwd = PASSWORD('2018') 
LIMIT 0, 50000
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法

ray*_*nnz 36

如果您需要替换哈希来匹配 password() 函数,请使用: SHA1(UNHEX(SHA1())); 例如

mysql> SELECT PASSWORD('mypass');
+-------------------------------------------+
| PASSWORD('mypass')                        |
+-------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

和在第 8 版中给出相同答案的替换:

mysql> SELECT CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass')))));
+-------------------------------------------------+
| CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass'))))) |
+-------------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4       |
+-------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

  • 开头的星号怎么样?选择 CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass'))))) (5认同)
  • 为什么投反对票?这回答了当人们被锁定到无法控制的特定版本时寻求 PASSWORD 替代品的问题。 (2认同)

Mad*_*iya 16

OP 的 MySQL 服务器版本是 8.0.12。从MySQL 文档PASSWORD函数已被弃用版本> 5.7.5

笔记

本节中的信息仅适用于 MySQL 5.7.5 之前的版本,并且仅适用于使用 mysql_native_password 或 mysql_old_password 身份验证插件的帐户。MySQL 5.7.5 中删除了对 pre-4.1 密码哈希的支持。这包括删除 mysql_old_password 身份验证插件和 OLD_PASSWORD() 函数。此外,不能禁用 secure_auth,并且不能将 old_passwords 设置为 1。

从 MySQL 5.7.5 开始,只有关于 4.1 密码哈希和 mysql_native_password 身份验证插件的信息仍然相关。

取而代之的是PASSWORD,您可以从这里使用更好、更安全的加密功能。可以在此处查看MySQL 服务器团队的更多详细信息。

  • 这是官方参考,说它实际上已被删除 [here](https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_password) (4认同)
  • - 你知道用什么来代替 PASSWORD 吗? (3认同)
  • @MadhurBhaiya 我现在正在阅读文档。我将使用一种新的方式。非常感谢。 (3认同)

Fra*_*rte 8

使用 MySQL 8.0.22,我必须执行以下操作:

  1. 更新 /etc/mysql/my.cnf 并添加行:

     [mysqld]
    
     skip-grant-tables
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重新启动 mysql 并运行一些查询:

     > systemctl restart mysql
     > sudo mysql
     mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';
     FLUSH PRIVILEGES;
     mysql> exit;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 再次登录并更新密码:

     > mysql -u root
     mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'dbtastic5332';
     mysql> FLUSH PRIVILEGES;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 更新 /etc/mysql/my.cnf 并删除该行 skip-grant-tables

     > systemctl restart mysql
    
    Run Code Online (Sandbox Code Playgroud)
  5. 最后,测试

     > mysql -u root -p 
    
    Run Code Online (Sandbox Code Playgroud)