Прежде чем вы думаете, что это дублирующий вопрос, я думаю, что у меня есть уникальный, хотя и несколько глупый, случай.
Несколько дней назад я обновил версию MySQL на своем сервере Ubuntu 10.04 до версии 5.3.3 (она опередила выпуски Ubuntu для 10.04). Сегодня я попытался зайти в phpMyAdmin для чего-то и обнаружил несколько ужасное Connection for controluser as defined in your configuration failed
ошибке Connection for controluser as defined in your configuration failed
ошибки.
После следующих описаний нескольких SO вопросов о том, как это исправить, я застрял.
flush privileges
сброса). granting access to database phpmyadmin for phpmyadmin@localhost: already exists
Итак, вот что у меня осталось. У меня есть грант, который я не могу ни изменить, ни отозвать:
mysql> show grants for 'phpmyadmin'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for phpmyadmin@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' |
| GRANT ALL PRIVILEGES ON 'phpmyadmin'.* TO 'phpmyadmin'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.26 sec)
mysql> revoke usage on *.* from 'phpmyadmin'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost'
mysql> revoke usage on *.* from 'phpmyadmin'@'localhost' identified by 'trustno1';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost'
(Не волнуйтесь, я больше не использую этот пароль, но это был пароль, который использовался ранее, и это не тот пароль, который я выбрал для новой установки phpmyadmin).
Как мне полностью удалить эти гранты/привилегии? Я рад начать заново с нуля, если это будет необходимо (phpmyadmin, а не БД).
Приоритет USAGE в mysql просто означает, что для пользователя "phpadmin" @ "localhost", определенного на глобальном уровне *.*
, нет привилегий. Кроме того, у того же пользователя есть ВСЕ-привилегия в базе данных phpmyadmin phpadmin.*
.
Итак, если вы хотите удалить все привилегии и начать полностью с нуля, выполните следующие действия:
Отменить все привилегии на уровне базы данных:
REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';
Отбросьте имя пользователя phpmyadmin '@' localhost '
DROP USER 'phpmyadmin'@'localhost';
Выше процедура полностью удалит пользователя из вашего экземпляра, это означает, что вы можете воссоздать его с нуля.
Чтобы дать вам немного информации о том, что описано выше: как только вы создадите пользователя, будет заполнена таблица mysql.user
. Если вы посмотрите на запись в ней, вы увидите, что пользователь и все привилегии установлены на 'N'
. Если вы сделаете show grants for 'phpmyadmin'@'localhost';
, вы увидите, что allready familliar выйдет выше. Просто переводится на "никаких прав на глобальном уровне для пользователя". Теперь ваш грант ALL
этому пользователю на уровне базы данных, это будет сохранено в таблице mysql.db
. Если вы сделаете SELECT * FROM mysql.db WHERE db = 'nameofdb';
, вы увидите 'Y'
для каждого приятеля.
В приведенном выше описании показан сценарий, который у вас есть на вашем db в настоящее время. Таким образом, наличие пользователя, имеющего только USAGE
привилегию, означает, что этот пользователь может подключиться, но помимо SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS;
он не имеет других привилегий.
В качестве побочного примечания причина revoke usage on *.* from 'phpmyadmin'@'localhost';
не работает довольно просто: нет гранта, называемого USAGE
.
Фактические именованные гранты приведены в документации MySQL
Грант USAGE
является логическим грантом. Как? 'phpmyadmin' @'localhost' имеет запись в mysql.user
, где user = 'phpmyadmin' и host = 'localhost'. Любая строка в mysql.user семантически означает USAGE
. Выполнение DROP USER 'phpmyadmin'@'localhost';
должно работать нормально. Под капотом он действительно делает это:
DELETE FROM mysql.user WHERE user='phpmyadmin' and host='localhost';
DELETE FROM mysql.db WHERE user='phpmyadmin' and host='localhost';
FLUSH PRIVILEGES;
Следовательно, удаление строки из mysql.user
представляет собой запуск REVOKE USAGE
, хотя REVOKE USAGE
не может быть выполнен буквально.
FLUSH PRIVILEGES
после этого?Connection for controluser as defined in your configuration failed
ошибкаConnection for controluser as defined in your configuration failed
но это другая проблема.