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
-
войти в MYSQL как root
mysql -u root
-
Предоставлять привилегии. Для нового пользователя выполните:
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';
-
привязать ко всем адресам:
Самый простой способ - закомментировать строку в файле /etc/mysql/mariadb.conf.d/50-server.cnf или/etc/mysql/mysql.conf.d/mysqld.cnf, в зависимости от того, какая у вас система Бег:
#bind-address = 127.0.0.1
-
выйдите из 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;
& Наслаждаться.