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

在MySQL SERVER 8.0中,密码功能不起作用,mysql,mysql-8.0,Mysql,Mysql 8.0,在MySQL服务器8.0.12版中执行密码功能时出错 我有以下疑问: SELECT * FROM users WHERE login = 'FABIO' AND pwd = PASSWORD('2018') LIMIT 0, 50000 我得到这个错误: 错误代码:1064。您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near的语法 OP的MySQL服务器版本是8.0.12。从,函数已被弃用于版本>5.7.5: 注 本节中的信息仅适用于MySQL 5.

在MySQL服务器8.0.12版中执行
密码
功能时出错

我有以下疑问:

SELECT * 
FROM users 
WHERE login = 'FABIO' 
  AND pwd = PASSWORD('2018') 
LIMIT 0, 50000
我得到这个错误:

错误代码:1064。您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near的语法


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

本节中的信息仅适用于MySQL 5.7.5之前的版本, 并且仅适用于使用mysql\u本机\u密码或 mysql\u旧密码验证插件。对4.1之前版本的支持 MySQL 5.7.5中删除了密码哈希。这包括删除 mysql\u旧密码验证插件和旧密码() 功能。此外,不能禁用安全认证和旧密码 不能设置为1

从MySQL 5.7.5开始,只有关于4.1密码哈希和 mysql_本机_密码验证插件仍然相关


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

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

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

mysql> SELECT CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass')))));
+-------------------------------------------------+
| CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass'))))) |
+-------------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4       |
+-------------------------------------------------+

对于MySQL 8.0.22,我必须执行以下操作:

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

    [mysqld]

    跳过赠款表

  • 重新启动mysql并运行一些查询:

    systemctl重启mysql sudomysql mysql>UPDATE mysql.user SET authentication_string=null,其中user='root'; 同花顺特权; mysql>exit

  • 再次登录并更新密码:

    mysql-u根 mysql>更改用户“root”@“localhost”,通过“dbtastic5332”缓存_sha2_密码; mysql>刷新权限

  • 更新/etc/mysql/my.cnf并删除行
    skip grant tables

    systemctl重启mysql

  • 最后,测试

    mysql-u根-p


  • 您可以创建另一个类似于密码的函数

    SET GLOBAL log_bin_trust_function_creators = 1;
    delimiter $$
    CREATE FUNCTION PASSWORD2 (pass_in varchar(50)) RETURNS varchar(50)
    BEGIN
      declare n_pass varchar(50);
      set n_pass = CONCAT('*', UPPER(SHA1(UNHEX(SHA1(pass_in))))); 
      return n_pass;
    END$$
    
    然后


    您的mysql版本是什么?您确定在查询字符串中的select之前没有任何内容吗?@MadhurBhaiya mysql服务器版本是8.0。12@FabioC此函数在MySQL 8.0版中不存在。无论如何,您不应该将PASSWORD()函数用于自己的密码。该函数的手册多年来一直说它只供MySQL的系统表使用。改为使用。这里的官方参考称它实际上被删除了-你知道密码的位置是什么吗?@FabioC在底部查看我的更新答案。我提供了两份推荐信。添加了更高级的加密功能instead@MadhurBhaiya我正在看文件。我要用一种新的方法。非常感谢。为什么要投否决票?这回答了当人们在无法控制的情况下锁定到特定版本时,需要更换密码的问题。开始时的星号是什么?选择CONCAT('*',上部(SHA1)(UNHEX(SHA1('mypass'))))))
    SET GLOBAL log_bin_trust_function_creators = 1;
    delimiter $$
    CREATE FUNCTION PASSWORD2 (pass_in varchar(50)) RETURNS varchar(50)
    BEGIN
      declare n_pass varchar(50);
      set n_pass = CONCAT('*', UPPER(SHA1(UNHEX(SHA1(pass_in))))); 
      return n_pass;
    END$$
    
    SELECT PASSWORD2("my_super_scret_password") FROM MyUserTable ....