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


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

Несколько дней назад я обновил версию MySQL на своем сервере Ubuntu 10.04 до версии 5.3.3 (она опережает версии Ubuntu для 10.04). Сегодня я попытался войти в phpMyAdmin для чего-то и обнаружил несколько страшную ошибку 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, а не бд).

Author: Community, 2013-07-23

2 answers

Привилегия ИСПОЛЬЗОВАНИЯ в mysql просто означает, что для пользователя 'phpadmin'@'localhost' нет привилегий, определенных на глобальном уровне *.*. Кроме того, тот же пользователь имеет ВСЕ права доступа к базе данных phpmyadmin phpadmin.*.

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

  • Отменить все привилегии на уровне базы данных:

    REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';

  • Удалить пользователя 'phpmyadmin'@'локальный хост'

    DROP USER 'phpmyadmin'@'localhost';

Описанная выше процедура полностью удалит пользователя из вашего экземпляра, это означает, что вы можете воссоздать его с нуля.

Чтобы дать вам немного информации о том, что описано выше: как только вы создадите пользователя, таблица mysql.user будет заполнена. Если вы посмотрите на запись в нем, вы увидите, что пользователю и всем привилегиям присвоено значение 'N'. Если вы сделаете show grants for 'phpmyadmin'@'localhost';, вы увидите, что все уже готово, вывод выше. Просто переводится как "нет привилегии на глобальном уровне для пользователя". Теперь ваш грант ALL этому пользователю на уровне базы данных будет сохранен в таблице mysql.db. Если вы сделаете SELECT * FROM mysql.db WHERE db = 'nameofdb';, вы увидите 'Y' на каждом привате.

Вышеописанный сценарий показывает сценарий, который у вас есть в вашей бд в настоящее время. Таким образом, наличие пользователя, у которого есть только привилегии USAGE, означает, что этот пользователь может подключаться, но, кроме SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS;, у него нет других привилегий.

 87
Author: Flo Doe, 2013-07-25 08:37:24

В качестве примечания, причина, по которой revoke usage on *.* from 'phpmyadmin'@'localhost'; не работает, довольно проста: грант не называется USAGE.

Фактические именованные гранты указаны в документации MySQL

Грант USAGE является логическим грантом. Как? "phpmyadmin"@"локальный хост" содержит запись в mysql.user, где пользователь="phpmyadmin" и хост="локальный хост". Любая строка в 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 не может быть выполнено буквально.

 13
Author: RolandoMySQLDBA, 2013-07-26 22:16:07