Назад | Перейти на главную страницу

Проблемы с root MySQL (доступ запрещен для пользователя root)

У меня возникли очень странные проблемы с моим пользователем 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

  1. Завершение работы MySQL
  2. Запустите MySQL с: mysqld --skip-grant-tables --skip-networking
  3. В mysql запустите:

    ОБНОВИТЬ mysql.user SET Password = PASSWORD ('MyNewPass') ГДЕ User = 'root';

    ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ . К 'root' @ 'localhost' С ОПЦИЕЙ GRANT;

  4. Завершение работы MySQL

  5. Запустите 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

  1. Войдите в mysql, используя пользователя с привилегиями (из учетной записи, с помощью которой вы удалили разрешение для root).
  2. Выберите базу данных mysql с помощью команды use mysql;
  3. Выполните следующую команду, чтобы обновить пользователя.

UPDATE mysql.user SET PASSWORD=PASSWORD('MyNewPass') WHERE USER='root';

  1. FLUSH PRIVILEGES;

  2. GRANT ALL ON *.* TO 'root'@'localhost';

  3. выйдите из системы, а затем войдите в систему с использованием нового пароля, указанные выше шаги сработали для меня