У меня возникли очень странные проблемы с моим пользователем root MySQL (5.5). Я пытаюсь разрешить внешнему хосту доступ к пользователю root, но похоже, что мой root @ localhost не имеет "GRANT OPTION" для локальных баз данных! Я думаю, что проблема на данном этапе вызвана тем, что у меня есть два пользователя root @ localhost, оба с разными правилами предоставления, но я не могу понять, как вернуться к своей установке.
Я уже пробовал удалить пользователя root и воссоздать его (я думаю), сбросив пароль пользователя root (изменив саму базу данных mysql)
Я не могу войти в учетную запись root, используя пароль, который я всегда указывал, а скорее альтернативный пароль, который я даже не знаю, как я получил ... этот альтернативный пользователь, похоже, не имеет полного права root, но по-прежнему называется root.
--РЕШЕНИЕ, РАЗМЕЩЕННОЕ НИЖЕ -
Вы можете запустить MySQL с отключенной аутентификацией. Оттуда вы можете создать / удалить административную учетную запись для MySQL.
Подробности вы можете найти в документации MySQL: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html
mysqld --skip-grant-tables --skip-networking
В mysql запустите:
ОБНОВИТЬ mysql.user SET Password = PASSWORD ('MyNewPass') ГДЕ User = 'root';
ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ . К 'root' @ 'localhost' С ОПЦИЕЙ GRANT;
Завершение работы MySQL
Нашел решение - это вызвано обновлением MySQL с MySQL 5.1 до MySQL 5.5 и перемещением схемы аутентификации (самой базы данных MySQL) вместе с ней. Поскольку для этой схемы есть основные обновления, использующие ее с базой данных 5.5, просто не будет работать, вызывая две основные ошибки: Невозможно ПРЕДОСТАВИТЬ привилегии, поскольку корневые пользователи Mysql удалены.
Попробуйте получить доступ к серверу с помощью 'root'@'127.0.0.1', который отличается от 'root' @ 'localhost'. Затем введите команду для создания пользователя root @ localhost и предоставления ему всех привилегий.
Вам следует удалить лишнюю запись root @ localhost. Это можно сделать либо с помощью "--skip-grant-tables", как предлагает Мирча Вутковичи, либо в обычном сеансе (локальном или удаленном), если вы все еще можете получить доступ как root.
Попробуйте что-то вроде этого:
#get to admin tables
use mysql
#confirm the differences for the root entries
select host, user, grant_priv from user where user = 'root';
#adjust as needed
delete from user where user = 'root' and host = 'localhost' and grant_priv = 'N';
#commit
flush privileges;
Обновить: Согласно выводам, которые вы показали для теста выбора, не похоже, что у вас есть проблема с несколькими корнями с разными grant_privs. Следовательно, если совет Мирчи Вутцовичи не решит вашу проблему, я могу предположить, что настоящая проблема действительно связана с привилегиями root. Возможно, вы делаете что-то еще неправильно, например, пытаетесь подключиться к неправильному хосту или используете пароль, сохраненный в файле конфигурации (.my.cnf). Другими словами, вам может потребоваться более конкретная информация.
Печатать SHOW GRANTS FOR 'root'@'localhost';
показал мне какой-то скрытый пароль, поэтому я вошел в mysql этой системы, используя HeidiSQL в другой системе (используя root
в качестве имени пользователя и соответствующего пароля) и набрал
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'thepassword' WITH GRANT OPTION;
и это сработало, когда я вернулся в систему и вошел в систему, используя
mysql -uroot -pthepassword;
Вот несколько шагов, которые я выполнил в системе Windows
use mysql;
UPDATE mysql.user SET PASSWORD=PASSWORD('MyNewPass') WHERE USER='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
выйдите из системы, а затем войдите в систему с использованием нового пароля, указанные выше шаги сработали для меня