Удалить привилегии из базы данных MySQL

45

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

Несколько дней назад я обновил версию 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 вопросов о том, как это исправить, я застрял.

  • Я попытался перенастроить phpMyAdmin, но безуспешно.
  • Я попытался удалить phpMyAdmin и переустановить его, но он не смог удалить привилегии из БД и потерпел неудачу.
  • Затем я попытался вручную удалить привилегии пользователя - несколько глупо, я мог бы добавить - из БД, затем сбросив БД, затем пользователя (с flush privileges сброса).
  • Я полностью отбросил установку phpMyAdmin (удалив приложение и каталог /etc/phpmyadmin) и переустановил (используя apt-get), но он сказал, что разрешения для пользователя phpmyadmin уже существуют:

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, а не БД).

Теги:
phpmyadmin
grant
privileges

2 ответа

86
Лучший ответ

Приоритет 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; он не имеет других привилегий.

  • 2
    Вы должны FLUSH PRIVILEGES после этого?
  • 0
    Я не мог смотреть на это до сегодняшнего дня, и ваш ответ решил проблему привилегий, спасибо. Однако, мое Connection for controluser as defined in your configuration failed ошибка Connection for controluser as defined in your configuration failed но это другая проблема.
Показать ещё 3 комментария
13

В качестве побочного примечания причина 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 не может быть выполнен буквально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню