Удаление привилегий из базы данных 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, а не БД).
Ответы
Ответ 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
не может быть выполнен буквально.