У меня есть пользователь в MySQL 5.6, который каким-то образом был создан с непечатаемым символом в имени пользователя. Как мне удалить этого пользователя?
mysql> select user,host from mysql.user where user like 'wiki%';
+-----------------+------+
| user | host |
+-----------------+------+
| wiki4thech@rch
| % |
+-----------------+------+
1 row in set (0.00 sec)
Что ж, это не выглядит хорошо. Давайте вставим префикс и суффикс, чтобы мы могли видеть, добавляет ли MySQL какие-либо отступы к выходным данным:
# mysql -E --disable-column-names -u root -p mysql --execute "select concat('START',user,'END') from user where user like 'wiki%'"
Enter password:
*************************** 1. row ***************************
STARTwiki4thech@rch
END
Это похоже на новую строку, но на всякий случай:
# mysql -E --disable-column-names -u root -p mysql --execute \
"select concat('START',user,'END') from user where user like 'wiki%'" | od -t x1c
Enter password:
0000000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a
* * * * * * * * * * * * * * * *
0000020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 31 2e 20 72
* * * * * * * * * * * 1 . r
0000040 6f 77 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a
o w * * * * * * * * * * * * *
0000060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 53
* * * * * * * * * * * * * * \n S
0000100 54 41 52 54 77 69 6b 69 34 74 68 65 63 68 40 72
T A R T w i k i 4 t h e c h @ r
0000120 63 68 0a 45 4e 44 0a
c h \n E N D \n
0000127
Хорошо, это определенно новая строка. Пробуем очевидное:
mysql> drop user 'wiki4thech@rch\n'@'%';
ERROR 1396 (HY000): Operation DROP USER failed for 'wiki4thech@rch'@'%'
Чуть менее очевидно:
mysql> drop user 'wiki4thech@rch
'> '@'%';
ERROR 1396 (HY000): Operation DROP USER failed for 'wiki4thech@rch'@'%'
я вижу Другой вопрос или два который предлагает редактировать пользовательскую таблицу непосредственно в аналогичных ситуациях, но неясно, действительно ли это хорошая идея (например, какие побочные эффекты это может вызвать или насколько рискованно вмешиваться в системные таблицы?).
В качестве альтернативы, есть ли безопасный способ сделать это с помощью DROP USER
?
Если вы редактируете таблицу mysql.user напрямую, побочных эффектов не будет, кроме одного: вам нужно создать
FLUSH PRIVILEGES;
после того, как вы это сделаете (чтобы перечитать таблицы привилегий и поместить свои изменения в онлайн) Итак, самый простой способ - удалить саму запись от пользователя mysql, например
DELETE FROM mysql.user WHERE user ='wiki%';
если нет другого пользователя, имя которого начинается с вики (как было упомянуто ранее). Если был, попробуйте найти другое выбираемое значение, например пароль и т. д. Если есть другие пользователи с таким же именем, не беспокойтесь, вы можете удалить их все и воссоздать те, которые будут использоваться (поскольку изменения вступят в силу только после того, как вы сбросите эти привилегии - как я уже говорил ранее). Если вы хотите быстро восстановить пользователя, вам следует установить Percona инструментарий сначала выгрузите всех пользователей с
pt-show-grants > users.sql
и перезагрузите нужных пользователей из этого дампа.
Надеюсь, поможет.
Как насчет этого?
DELETE FROM mysql.user where user like "wiki4te%" and host like "rch%";
попробуй это:
используйте mysql;
удалить из mysql, где user = "wiki%";
сбросить привилегии;
EDIT: предполагается, что нет других пользователей mysql, чьи имена начинаются с "wiki"