SQLSTATE [HY000] [1698] Доступ запрещен для пользователя 'root' @'localhost'

Я только что установил Ubuntu 16.04 и установил на него веб-сервер. Все работает хорошо, но я не могу получить доступ к базе данных. Даже если я создаю нового пользователя и предоставляю все привилегии, я не могу создать базу данных. В 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();
    }
}

Ответы

Ответ 1

Оказывается, вы больше не можете использовать пользователя root в 5.7, не становясь sudoer. Это означает, что вы больше не можете запускать mysql -u root sudo mysql -u root вместо этого sudo mysql -u root.

Это также означает, что он больше не будет работать, если вы используете пользователя root в графическом интерфейсе (или предположительно любом приложении без командной строки). Чтобы он работал, вам придется создать нового пользователя с необходимыми привилегиями и использовать его вместо этого.

См. Этот ответ для получения более подробной информации.

Ответ 2

Эти шаги помогли мне на нескольких системах с использованием Ubuntu 16.04, Apache 2.4, MariaDB, PDO

  1. войти в MYSQL как root

    mysql -u root
    
  2. Предоставлять привилегии. Для нового пользователя выполните:

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;
    

    ОБНОВЛЕНИЕ для экземпляров Google Cloud

    MySQL в Google Cloud, по-видимому, требует альтернативной команды (обратите внимание на галочки).

    GRANT ALL PRIVILEGES ON '%'.* TO 'newuser'@'localhost';
    
  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
    

По умолчанию он привязывается только к localhost, но если вы прокомментируете строку, он связывает все найденные интерфейсы. Комментирование строки эквивалентно bind-address = *.

Чтобы проверить привязку сервиса mysql, выполните от имени пользователя root:

netstat -tupan | grep mysql

Ответ 3

Может быть, немного поздно, но я нашел этот ответ, просматривая интернет. Это может помочь другим с той же проблемой.

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

Теперь вы можете войти в систему как root в phpmyadmin.

(Найдено здесь.)

Ответ 4

MySQL делает разницу между "localhost" и "127.0.0.1".

Возможно, что "root" @"localhost" не разрешен, потому что в таблице пользователя есть запись, которая разрешает вход root только с 127.0.0.1.

Это также может объяснить, почему некоторые приложения на вашем сервере могут подключаться к базе данных, а некоторые из-за отсутствия разных способов подключения к базе данных. И вы в настоящее время не разрешаете это через "localhost".

Ответ 5

Чтобы создать пользователя для phpMyAdmin:

sudo mysql -p -u root

Теперь вы можете добавить нового пользователя MySQL с выбранным вами именем пользователя.

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

И, наконец, предоставьте привилегии суперпользователя только что созданному пользователю.

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

По любому вопросу, пожалуйста, оставьте комментарий

Ответ 6

Пользователи для mysql и для сервера - это две разные вещи, посмотрите, как добавить пользователя в базу данных и войти с этими учетными данными

Ответ 7

С mysql Ver 14.14. Распространяйте 5.7.22. Инструкция обновления теперь:

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

Ответ 8

Просто создайте нового пользователя для MySQL, не используйте root. есть проблема, его проблема безопасности

sudo mysql -p -u root

Войдите в MySQL или MariaDB с правами суперпользователя

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

войдите и создайте нового пользователя

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

и предоставить привилегии для доступа "." и "@" "%" любое местоположение, а не только "localhost"

exit;

если вы хотите увидеть свою таблицу привилегий SHOW GRANTS; & Наслаждаться.