问题原因

问题原因

我已经安装了 MySQL,在安装过程中系统要求我输入密码,但现在我的老师说我们应该能够以 root 身份登录而不需要任何密码。

这可行,但我没有获得任何特权:

登录提示用户名 phpmyadmin

这不起作用:

登录提示用户名root,密码已输入,无权访问

这也不行

登录提示,用户名 root,无密码,无访问权限

答案1

问题原因

MySQL 5.7 中以用户身份登录的默认配置root需要使用身份验证套接字。这可以通过查询user表来验证:

mysql> select user,authentication_string,plugin from user where user='root';
+------+-----------------------+-------------+
| user | authentication_string | plugin      |
+------+-----------------------+-------------+
| root |                       | auth_socket |
+------+-----------------------+-------------+
1 row in set (0.00 sec)

来自文档

套接字插件检查套接字用户名(操作系统用户名)是否与客户端程序向服务器指定的 MySQL 用户名匹配。如果名称不匹配,插件将检查套接字用户名是否与 mysql.user 系统表行的 authentication_string 列中指定的名称匹配。如果找到匹配项,则插件允许连接。

换句话说,mysql 默认没有设置 root 密码 - 您需要以 root 身份或通过运行 phpMyAdmin sudo(出于安全原因,这两种方式都不是好主意),或者您可以更改身份验证方法并重置 root 密码,如下所示Digital Ocean 教程

请注意,除了名称相同之外,MySQL 用户和系统用户并不相同。您可以拥有一个 MySQL 用户jdoe,但主机系统上没有这样的用户。因此,root是 MySQL 的 root 用户,而不是系统用户。

更改插件和密码的步骤:

  1. 打开终端并运行sudo mysql -u root。您应该会看到一条问候消息和mysql>提示。这是 MySQL shell,它与您的命令行 shell 不同,因此这里只接受 SQL 语句。

  2. 输入以下 SQL 查询序列:

    mysql> use mysql
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>  UPDATE user SET plugin='mysql_native_password',authentication_string=PASSWORD('newpassword') WHERE user = 'root';
    Query OK, 1 row affected, 1 warning (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 1
    
  3. 退出并尝试登录:

    mysql> exit
    Bye
    
    $ sudo systemctl restart mysql
    $ sudo mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 5
    Server version: 5.7.21-1 (Debian)
    
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    

如果一切顺利,您应该能够通过新密码从 phpMyAdmin 登录。如果出现问题,请尝试在不检查权限的情况下重新启动服务器(这是 Digital Ocean 教程中的第 3 步)。对于其他问题,请随时在此处或数据库管理员 - Stack Exchange

相关内容