SQLSTATE [HY000] [1698]访问被拒绝用户'root'@'localhost'。尝试了一切

时间:2016-04-26 11:54:39

标签: php mysql login root

我刚刚安装了Ubuntu 16.04并在其上安装了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();
    }
}

11 个答案:

答案 0 :(得分:76)

事实证明,您不能再使用5.7中的book用户而不会成为sudoer。这意味着您不能再运行root而必须执行mysql -u root

这也意味着如果您在GUI(或任何非命令行应用程序)中使用sudo mysql -u root用户,它将不再有效。要使其工作,您必须创建具有所需权限的新用户,并使用该权限。

有关详细信息,请参阅this答案。

答案 1 :(得分:54)

这些步骤适用于使用Ubuntu 16.04,Apache 2.4,MariaDB,PDO的多个系统

  1. 以root身份登录MYSQL

    mysql -u root
    
  2. 授予权限。对新用户执行:

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;
    
  3. 绑定到所有地址:

    最简单的方法是注释掉你的行 /etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mysql.conf.d/mysqld.cnf文件,具体取决于您运行的系统:

    #bind-address = 127.0.0.1 
    
  4. 退出mysql并重启mysql

    exit
    service mysql restart
    
  5. 默认情况下,它仅绑定到localhost,但如果您对该行进行注释,则它会绑定到它找到的所有接口。注释掉该行等同于bind-address = *。

    检查以root身份执行的mysql服务的绑定:

    netstat -tupan | grep mysql
    

答案 2 :(得分:25)

也许有点晚了,但我发现这个答案在网上看。它可以帮助其他人解决同样的问题。

$sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q

现在你应该可以在phpmyadmin中以root用户身份登录。

(找到here。)

答案 3 :(得分:2)

MySQL在" localhost"之间产生了影响。和" 127.0.0.1"。

有可能' root' @' localhost'不允许,因为在用户表中有一个条目只允许从127.0.0.1进行root登录。

这也可以解释为什么服务器上的某些应用程序可以连接到数据库,有些不是因为有不同的方法连接到数据库。而你目前不允许它通过" localhost"。

答案 4 :(得分:1)

要为phpMyAdmin创建用户:

sudo mysql -p -u root

现在,您可以使用您选择的用户名添加一个新的MySQL用户。

CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';

最后向刚刚创建的用户授予超级用户特权。

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' WITH GRANT OPTION;

如有任何疑问,请发表评论

答案 5 :(得分:1)

简而言之,在MariaDB上

1) sudo mysql -u root;
2) use mysql;
3) UPDATE mysql.user SET plugin = 'mysql_native_password', 
      Password = PASSWORD('pass1234') WHERE User = 'root';
4) FLUSH PRIVILEGES;
5) exit;

答案 6 :(得分:0)

mysql和服务器的用户有两个不同的东西,看看如何将用户添加到数据库并使用这些凭据登录

答案 7 :(得分:0)

对于mysql Ver 14.14 Distrib 5.7.22,更新语句现在为:

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

答案 8 :(得分:0)

仅为MySQL创建新用户不使用root。有一个安全问题

sudo mysql -p -u root

以root权限登录到MySQL或MariaDB

CREATE USER 'troy121'@'%' IDENTIFIED BY 'mypassword123';

登录并创建新用户

GRANT ALL PRIVILEGES ON *.* TO 'magento121121'@'%' WITH GRANT OPTION;

并授予访问“。”的特权。和“ @”“%”的任何位置,而不仅仅是'localhost'

exit;

如果您想查看特权表SHOW GRANTS;  和享受。

答案 9 :(得分:0)

如果即使在创建新用户并为他们分配数据库特权后仍收到该错误,那么要看的最后一件事是检查是否已在数据库中为用户分配了特权。

要执行此操作,请登录到mysql(这大概是限制了对数据库访问权限的应用程序,但是您作为root用户可以通过mysql -u user -p来访问数据库表)

应用命令

mysql -u root -p 

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

成功登录

类型

use mysql;

从这一点开始,如下检查每个用户权限是否已从db表中启用

select User,Grant_priv,Host from db;

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

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

现在尝试使用该应用程序并与数据库进行交易。

答案 10 :(得分:0)

我在 ubuntu 20.04MySQL 8.0 中遇到了同样的问题,我执行了以下步骤:

  1. 登录 MySQL
sudo mysql -p -u root
  1. 显示添加到 MySQL 的用户
SELECT user,plugin,host FROM mysql.user
  1. 将 root 用户插件从 auth_socket 更改为 mysql_native_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
  1. 刷新权限
FLUSH PRIVILEGES;
  1. CTRL+z 退出 MySQL
  2. 重启你的 MySQL 服务
sudo service MySQL restart
  1. 检查您的 PHPMyAdmin 页面并尝试登录。