Не могу диагностировать проблему с моим пользователем MySQL root

StackOverflow https://stackoverflow.com/questions/1424240

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня проблема с пользователем MySQL root в моей настройке MySQL, и я просто ни за что на свете не могу понять, как это исправить.Похоже, я каким-то образом перепутал пользователя root, и мой доступ к базам данных теперь очень неустойчив.

Для справки, я использую MAMP в OS X для предоставления сервера MySQL.Хотя я не уверен, насколько это важно - я бы предположил, что для решения всего, что я сделал, потребуется исправление в командной строке.

Я могу запустить MySQL, используя MAMP, как обычно, и получить доступ к базам данных, используя "стандартных" пользователей, которых я создал для своих PHP-приложений.Однако пользователь root, которого я использую в моем клиенте MySQL GUI, а также в phpMyAdmin, может получить доступ только к базе данных "information_schema", а также к двум, которые я создал вручную, и предположительно (и ошибочно) оставил разрешения широко открытыми.Мои 15 или около того других баз данных недоступны для пользователя root.Когда я загружаю phpMyAdmin, на главном экране появляется надпись:"Создать новую базу данных:Никаких привилегий".

Я, конечно, на каком-то этапе изменил пароль своего пользователя root, используя диалоговое окно MAMP.Но я не помню, делал ли я что-нибудь еще, что могло бы вызвать эту проблему.Я попытался сменить пароль еще раз, и, похоже, никаких изменений в проблеме нет.

Я также пробовал сбросить пароль root с помощью командной строки, включая запуск mysql вручную с помощью --skip-grant-tables, а затем удаление privs, но опять же, похоже, ничто не устраняет проблему.

Я дошел до конца своих идей и был бы очень признателен за пошаговые советы и диагностику от одного из присутствующих здесь экспертов!

Большое спасибо за вашу помощь.

Это было полезно?

Решение

Это потому, что MAMP и командная строка mysql (и mysql все, кроме MAMP) отличаются.

MAMP имеет свой собственный встроенный mysql, и вы не можете получить к нему доступ через командную строку, только сборку в phpmyadmin.

это был мой опыт, у меня есть MAMP и я использую другой mysql для ruby on rails и прочего.

Другие советы

У меня была та же проблема: только одна учетная запись пользователя работала для доступа к базам данных mysql через консоль администрирования или браузер запросов. Когда я использовал skip-grant-tables внезапно все учетные записи могли войти, включая root.

Я видел это как ошибку еще в 2006 году , но В последней записи нет команды, которая может быть выполнена в режиме skip-grant-tables, поэтому я до сих пор не решил проблему.

Что мне помогло
Этот ответ аналогичен описанному Беном Бакелааром в приведенной выше ссылке . Проблема возникает, когда в вашем my.ini флаг разрешения имени отключен (skip-name-resolution). Это убивает способность mysql разрешать «localhost», а в таблице mysql.user есть запись только для localhost / root.

Вместо этого измените запись localhost вашей таблицы mysql.user на 127.0.0.1, и вы сможете входить в локальные консоли даже с включенной функцией разрешения имен пропуска.

Попробуйте запустить сервер с --skip-grant-tables, а затем проверить таблицы привилегий в базе данных mysql:

select * from user where User='root';
select * from tables_priv where User='root';
select * from db where User='root';

Вы также можете попробовать:

show grants for root@localhost;
show grants for root@'%';
show grants for root@'hostname';

Однажды вы можете сделать это, чтобы попытаться предоставить root-права полностью:

grant all privileges on *.* to root@localhost identified by 'password' with grant option;

Ваш комментарий показывает ваши текущие привилегии пользователя root (без --skip-grant-tables). Хорошо, что у вас нет записи для «root» @ «%», у вас ее нет по умолчанию, и вы можете считать это мерой безопасности.

Похоже, вы испортили свои права 'root' @ 'localhost' . ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ. странно. Обычно у вас есть что-то вроде ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА *. * или ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА myDatabase.myTable . Ваш GRANT не указывает базы данных и / или таблицы, для которых предоставляются привилегии. Я понятия не имею, как вашему клиенту удалось это сделать. Я не могу воспроизвести его с помощью клиента командной строки mysql (пробовал пустые строки, пробелы, любые кавычки ...), mysql отклоняет инструкцию GRANT (что, конечно, является правильным поведением). Похоже, MAMP делает что-то действительно странное. Поскольку я не могу воспроизвести GRANT , как у вас, я не могу сказать, как mysql это интерпретирует, но, полагаю, он установил привилегии для 'N' на глобальном уровне.

Чтобы это исправить, вам нужен пользователь с соответствующими привилегиями. Обычно у вас есть пользователь 'root' @ 'localhost' и 'root' @ 'your-hostname' . Если вам повезет, 'root' @ 'your-hostname' все еще в порядке. В действительности, соединения mysql работают следующим образом: если вы подключаетесь к localhost , вы подключаетесь как 'root' @ 'localhost' (не уверен насчет 127.0.0.1 , я думаю, это также 'root' @ 'localhost' ). Если вы подключаетесь к your-hostname , вы подключаетесь как 'root' @ 'your-hostname' . Если права этого пользователя все еще в порядке, вы можете обновить права доступа для 'root' @ 'localhost' , и все готово.

В своем комментарии вы говорите, что не можете подключиться через 127.0.0.1 , поскольку сокет находится в необычном месте. Я полагаю, вы неверно истолковали ошибку. IIRC вы подключаетесь через сокет, если вы подключаетесь к 'localhost' , но через TCP / IP, если вы подключаетесь к 127.0.0.1 или your-hostname , Если mysql пытается подключиться через сокет и не может найти сокет (поскольку вы не указали правильное местоположение), в сообщении об ошибке указывается, где mysql пытался найти сокет. Ваше сообщение об ошибке не. Я полагаю, ваша ошибка - ошибка сети. Возможно, вы запустили mysql-сервер с параметром - skip-network , или в вашей конфигурации указан неверный bind-адрес. Сначала необходимо исправить это, иначе вы не сможете подключиться как 'root' @ 'your-hostname' .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top