MySQL: ERROR 1396 (HY000): Operation DROP USER failed for 'username'

Автор: | 01/02/2014

mysqllogoПри удалении пользователя MySQL сообщает об ошибке:

mysql> drop user itnews;
ERROR 1396 (HY000): Operation DROP USER failed for 'itnews'@'%'

Хотя пользователь вроде как есть:

mysql> SELECT User FROM mysql.user;
+-------------+
| User        |
+-------------+
| itnews      |

По совету мануала – проверяем права пользователя:

mysql> show grants for 'itnews'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'itnews' on host '%'

И теперь понятно в чём ошибка – надо было при выборке добавить поле Host:

mysql> select User, Host from mysql.user where user like 'itnews';
+--------+-----------+
| User   | Host      |
+--------+-----------+
| itnews  | localhost |
+--------+-----------+
1 row in set (0.00 sec)

Повторяем запрос:

mysql> show grants for 'itnews'@'localhost';

+---------------------------------------------------------------------------------------------------------------+
| Grants for itnews@localhost                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'itnews'@'localhost' IDENTIFIED BY PASSWORD '*C90D2864A93C2BAC3C4DF69A43687C5EF6800A7D' |
| GRANT ALL PRIVILEGES ON `itnews_db1`.* TO 'itnews'@'localhost'                                                |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

И теперь удаляем:

mysql> drop user 'itnews'@'localhost';;
Query OK, 0 rows affected (0.00 sec)

Если всё же имя было указано верно – то вот несколько советов.

Проверьте нет ли активных сессий пользователя:

mysql> select * from information_schema.processlist where user='postfix';
+------+---------+-----------------+---------+---------+------+-------+------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |
+------+---------+-----------------+---------+---------+------+-------+------+
| 9802 | postfix | localhost:38181 | postfix | Sleep | 277 | | NULL |
| 1 | postfix | localhost:35533 | postfix | Sleep | 220 | | NULL |
+------+---------+-----------------+---------+---------+------+-------+------+
2 rows in set (0.00 sec)

Остановите процесс, если такой есть:

mysql> kill 463;
Query OK, 0 rows affected (0.01 sec)

Тут для примера добавим пользователя:

mysql> grant all privileges on test_test.* to 'test'@'localhost';
Query OK, 0 rows affected (0.00 sec)

После того, как остановили процесс – отзовите права пользователя на базу:

mysql> revoke all privileges on test_test.* from 'test'@'localhost';
Query OK, 0 rows affected (0.00 sec)

И после этого попробуйте удалить пользователя:

mysql> drop user 'test'@'localhost';
Query OK, 0 rows affected (0.00 sec)