Не могу диагностировать проблему с моим пользователем MySQL root
-
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'
.