MYSQL Access запрещен для пользователя 'root' @'localhost'
Я сделал следующие шаги для использования MySQL в Ubuntu:
sudo aptitude install php5-mysql mysql-server
sudo service mysql stop
sudo mysqld_safe --skip-grant-tables &
sudo mysql -u root mysql
Изменить пароль root:
mysql> UPDATE mysql.user SET Password=PASSWORD('SecurePassword') WHERE
User='root';
mysql> FLUSH PRIVILEGES;
mysql> EXIT
Изменить/etc/mysql/my.cnf:
[client]
user=root
password=SecurePassword
[mysqld]
...
default-time-zone = '+0:00'
Тогда:
sudo service mysql start
mysql -u root
mysql> SHOW GRANTS FOR [email protected]
+--------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[here is the Securepassword]' |
+-------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
и я получаю сообщение об ошибке:
Доступ запрещен для пользователя 'root' @'localhost' (с использованием пароля: YES)
Ответы
Ответ 1
Было абсолютно правильно, что вы сделали, но я думаю, что это не работает по одной небольшой причине.
Вы должны использовать identified by password
, когда будете предоставлять такие привилегии:
mysql> GRANT ALL PRIVILEGES ONE `*`.`*` TO 'root'@'localhost' IDENTIFIED BY PASSWORD
'*A4B6157319038724E3560894F7F932C8886EBFCF' WITH GRANT OPTION;
Ответ 2
Если вы получите сообщение об ошибке следующего вида:
Warning: mysql_connect(): Access denied for user: ....
тогда проблема в том, что ваше приложение не может access the database
. Это может иметь несколько причин:
Прежде всего, убедитесь, что настройки базы данных в вашем db-config.php
(файле подключения для вашего приложения) верны, в частности, name
и password
вашего пользователя MySQL, имя вашего database
и имя вашего сервера MySQL.
Если вы используете собственный сервер, вам может потребоваться предоставить пользователям права на использование MySQL. Войдите в MySQL как пользователь root root и выполните следующие команды:
GRANT ALL PRIVILEGES ON database_name TO [email protected] IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Ответ 3
Система, подобная Ubuntu, по умолчанию предпочитает использовать плагин auth_socket для учетной записи root. Он будет пытаться аутентифицироваться, сравнивая ваше имя пользователя в БД и процесс, который делает запрос mysql; это описано здесь
Плагин сокета проверяет, совпадает ли имя пользователя сокета (имя пользователя операционной системы) с именем пользователя MySQL, заданным клиентской программой, и разрешает соединение, только если имена совпадают.
Вместо этого вы можете захотеть вернуться с mysql_native_password, который потребует пользователя/пароль для аутентификации.
О методе достижения этого, я рекомендую вам проверить это вместо этого.