SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost' 用户 'root'@'localhost' 访问被拒绝。

80
我刚刚安装了 Ubuntu 16.04 (Xenial Xerus),并在上面安装了 web 服务器。一切都正常,但我无法访问数据库。即使我创建了新用户并授予了所有权限,我也无法创建数据库。
在 PHP 中,我收到了以下错误:
SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost'

当我尝试在终端登录时,它可以正常工作,但在PHP和phpMyAdmin中却不行。
PHP代码:
protected $host = '127.0.0.1';
protected $db = 'dbname';
protected $name = 'root';
protected $pass = 'root';
protected $conn;
private static $settings = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);

public function __construct() {
    try {
        $this->conn = new PDO("mysql:host=$this->host;dbname=$this->db", $this->name, $this->pass, self::$settings);
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}

没有代码...我刚刚重新安装了整个Ubuntu,包括Web服务器、数据库等等...现在我需要的唯一一件事就是通过phpmyadmin或PHP使用用户名root和密码root登录... - lamka02sk
请在此处发布您的新用户创建和授予权限相关代码。 - Dipanwita Kundu
2
创建用户:CREATE USER 'username'@'localhost' IDENTIFIED BY 'pass'; 并添加权限:GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost'; 然后 FLUSH PRIVILEGES;...当我这样做时,我可以登录但无法创建数据库.... - lamka02sk
授权应该像这样,因为您的用户名是 usernameGRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost'; - Dipanwita Kundu
默认密码为空,如下所示:$pass = ''; - JYoThI
显示剩余4条评论
16个回答

1

我在我的Ubuntu 20.04(Focal Fossa)和MySQL 8.0中遇到了同样的问题,我执行了以下步骤:

  1. 登录MySQL

    sudo mysql -p -u root
    
  2. 显示已添加到MySQL的用户

    SELECT user,plugin,host FROM mysql.user
    
  3. 将root用户插件从auth_socket更改为mysql_native_password

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
    
  4. 刷新权限

    FLUSH PRIVILEGES;
    
  5. Ctrl + z退出MySQL

  6. 重新启动MySQL服务

    sudo service MySQL restart
    
  7. 检查您的phpMyAdmin页面并尝试登录。


1
我实际上有两个具有不同插件的根用户,当我删除了一个带有auth_socket的用户后,我又能够登录了。 - akash varlani

1

使用:

sudo mysql -u root
mysql> CREATE USER 'sample'@'localhost' IDENTIFIED BY 'Secure1pass!';
mysql> CREATE DATABASE testdb;
mysql> GRANT ALL PRIVILEGES ON testdb . * TO 'sample'@'localhost';

如果您只想在本地使用Ubuntu上的MySQL服务器,并希望连接到数据库以供应用程序使用。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

1
如果您创建了新用户并为其分配了数据库权限,但仍然收到该错误,请检查用户是否已在数据库中被授予权限。要执行此操作,请登录到MySQL客户端(这可能是限制访问数据库的应用程序,但作为root用户,您可以通过mysql -u user -p访问数据库表)。需要执行以下命令:
mysql -u root -p

密码:(提供您的数据库凭据)

成功登录后,请输入:

use mysql;

从这一点开始,检查每个用户的权限是否在数据库表中启用,如下所示:
select User,Grant_priv,Host from db;

如果创建用户的Grant_priv列的值为N,则使用以下命令将该值更新为Y:

UPDATE db SET Grant_priv = "Y" WHERE User= "your user";

现在,尝试访问应用程序并使用数据库进行交易。


1

使用MySQL客户端版本14.14和Distrib 5.7.22,更新语句现在为:

update user set authentication_string=password('1111') where user='root';

0

当我使用具有所有特权的'user'@'%'时,出现了与'user'@'localhost'拒绝访问相同的错误。 因此,我创建了一个具有所有特权的'user'@'localhost',然后刷新,甚至重新启动服务,但都无济于事。

最后,我将$host = '127.0.0.1';更改为$host = 'localhost';。 现在它可以工作了!


0

MySQL用户和服务器用户是两个不同的概念。请查看如何向数据库添加用户并使用这些凭据登录。


1
好的,这是我尝试过的,但即使我使用了所有权限创建了第二个帐户,我也无法创建数据库。而且我已经重新安装了服务器多次... - lamka02sk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接