Не удается диагностировать проблему с правами пользователя MySQL - PullRequest
0 голосов
/ 15 сентября 2009

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

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

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

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 23 сентября 2010

У меня была та же проблема: только одна учетная запись пользователя работала для доступа к базам данных 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, и вы сможете входить в локальные консоли даже с включенной функцией разрешения имен пропуска.

1 голос
/ 08 апреля 2010

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

Похоже, вы испортили свои 'root'@'localhost' привилегии. GRANT ALL PRIVILEGES ON . странно. Обычно у вас есть что-то вроде GRANT ALL PRIVILEGES ON *.* или GRANT ALL PRIVILEGES ON 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-networking, или в вашей конфигурации указан неверный bind-адрес. Сначала нужно исправить это, иначе вы не сможете подключиться как 'root'@'your-hostname'.

1 голос
/ 15 сентября 2009

Попробуйте запустить сервер с --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;
0 голосов
/ 08 апреля 2010

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

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

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

...