Подтвердить что ты не робот

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

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

Несколько дней назад я обновил версию 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 [email protected]: already exists

Итак, вот что у меня осталось. У меня есть грант, который я не могу ни изменить, ни отозвать:

mysql> show grants for 'phpmyadmin'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+-------------------------------------------------------------------------------------------------------------------+
| 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, а не БД).

4b9b3361

Ответ 1

Приоритет 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

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