ERROR 1396 (HY000): Операция CREATE USER не удалось выполнить 'jack' @'localhost'

Кажется, я не могу воссоздать простого пользователя, которого я удалил, даже как root в MySQL.

Мой случай: пользовательский "jack" существовал раньше, но я удалил его из mysql.user, чтобы его воссоздать. Я не вижу пережитков этого в этой таблице. Если я выполню эту команду для какого-то другого случайного имени пользователя, скажем, "jimmy", он отлично работает (как это первоначально делалось для "jack" ).

Что я сделал, чтобы повредить "гнездо пользователя" и как я могу отменить это повреждение, чтобы воссоздать "джек" в качестве допустимого пользователя для этой установки MySQL?

См. пример ниже. (Конечно, изначально было много времени между созданием "джек" и его удалением.)

mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from user;
+------------------+-----------------+
| user             | host            |
+------------------+-----------------+
| root             | 127.0.0.1       |
| debian-sys-maint | localhost       |
| jack             | localhost       |
| root             | localhost       |
| root             | russ-elite-book |
+------------------+-----------------+
5 rows in set (0.00 sec)

mysql> delete from user where user = 'jack';
Query OK, 1 row affected (0.00 sec)

mysql> select user,host from user;
+------------------+-----------------+
| user             | host            |
+------------------+-----------------+
| root             | 127.0.0.1       |
| debian-sys-maint | localhost       |
| root             | localhost       |
| root             | russ-elite-book |
+------------------+-----------------+
4 rows in set (0.00 sec)

mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123';
ERROR 1396 (HY000): Operation CREATE USER failed for 'jack'@'localhost'
mysql> CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from user;
+------------------+-----------------+
| user             | host            |
+------------------+-----------------+
| root             | 127.0.0.1       |
| debian-sys-maint | localhost       |
| jimmy            | localhost       |
| root             | localhost       |
| root             | russ-elite-book |
+------------------+-----------------+
5 rows in set (0.00 sec)

Ответ 2

Да, эта ошибка существует. Однако я нашел небольшое обходное решение.

  • Предположим, что пользователь существует, поэтому отпустите
  • После удаления пользователя необходимо сбросить привилегии mysql
  • Теперь создайте пользователя.

Это должно решить. Предполагая, что мы хотим создать user admin @localhost, это были бы команды:

drop user [email protected];
flush privileges;
create user [email protected] identified by 'admins_password'

Приветствия

Ответ 3

Этот баг сидит на bugs.mysql.com с 2007 года, и этот поток в основном просто распутывает все эти неправильные ответы даже до года назад.

Согласно документации MySQL, команды типа CREATE USER, GRANT, REVOKE и DROP USER не требуют последующей команды FLUSH PRIVILEGES. Понятно, почему, если читать документы. Это потому, что изменение таблиц MySQL напрямую не перезагружает информацию в память; однако множество решений этой ошибки утверждают, что FLUSH PRIVILEGES является ответом.

Это тоже не может быть ошибкой. Это заговор документации - документы меняются в одном критическом месте от версии к версии.

13.7.1.2. Синтаксис DROP USER

...

Пользователь DROP USER [, пользователь]...

...

DROP USER 'jeffrey' @'localhost';

Если вы укажете только имя имени пользователя в имени учетной записи, используется часть имени узла "%".

DROP USER, как представлено в MySQL 5.0.0, удаляет только учетные записи, которые не имеют никаких прав. В MySQL 5.0.2 он был изменен для удаления привилегий учетной записи. Это означает, что процедура удаления учетной записи зависит от вашей версии MySQL.

Начиная с MySQL 5.0.2 вы можете удалить учетную запись и ее привилегии следующим образом:

Пользователь DROP USER;

Оператор удаляет строки привилегий для учетной записи из всех таблиц предоставления.

Единственный раз, когда я получаю эту ошибку, когда я делаю DROP USER user; как и в документе, но MySQL не рассматривает "%" как шаблон, чтобы удалить всех пользователей на всех хостах. В конце концов, это не так дико. Или, может быть, иногда он работает, когда он удаляет пользователя localhost, а затем пытается удалить его на%.

Мне ясно, что когда он пытается удалить пользователя в%, он выдает сообщение об ошибке и завершает работу. Последующий CREATE USER на localhost не сработает, потому что пользователь localhost не был удален. Кажется, нет необходимости тратить время на рытье в таблицах грантов, ищущих призраков, как предлагал один плакат.

Я вижу 7 голосов за:

DROP USER 'jack @localhost';//полностью удалить учетную запись

Что интерпретируется как DROP USER '[email protected]'@'%'; # wrong

На самом деле существует реальная ошибка, которая генерирует одно и то же сообщение об ошибке, но она связана с первым созданным пользователем (после установки нового сервера mysql). Исправлена ​​ли эта ошибка, я не знаю; но я не помню, что это произошло в последнее время, и я в настоящее время готов к версии 5.5.27.

Ответ 4

Если вы используете оператор DELETE в таблице mysql.user в попытке удалить пользователя, затем попытайтесь восстановить пользователя с помощью CREATE USER, вы получите ошибку 1396. Избавьтесь от этой ошибки, запустив DROP USER 'username'@'host';

DELETE 
  FROM mysql.user 
 WHERE user = 'jack';

(При попытке воссоздать гнездо вы получите 1396 ошибок)

CREATE USER 'jack'@'localhost' IDENTIFIED BY PASSWORD '*Fi47ytFF3CD5B14E7EjkjkkC1D3F8086A5C0-krn';

(Выйдите из этой ситуации, запустив DROP USER)

DROP USER 'jack'@'localhost';

(я полагаю, FLUSH PRIVILEGES не может повредить, но, безусловно, сначала отбросить пользователя.)

Ответ 5

Вы не должны вручную удалять пользователей таким образом. У MySQL есть REVOKE синтаксис для удаления привилегий и DROP USER для их удаления:

REVOKE priv1,priv2,priv3,etc... FROM '[email protected]'; // remove certain privileges
DROP USER '[email protected]'; // completely delete the account

Лучше всего использовать предоставленные инструменты, а не обманывать в фоновом режиме.

Ответ 6

Отбросьте пользователя, сбросьте привилегии; затем создайте пользователя. Он работает!

Ответ 7

попробуйте delete from mysql.db where user = 'jack', а затем создайте пользователя

Ответ 8

В MySQL 5.6 с помощью Drop user userid; не работает. Используйте: Drop user 'userid'@'localhost'; и/или Drop user 'userid'@'%';. Таким образом, я смог удалить пользователя и восстановить его.

Ответ 9

two method 
one :
setp 1: drop user 'jack'@'localhost';
setp 2: create user 'jack'@localhost identified by 'ddd';

two:
setp 1: delete from user where user='jack'and host='localhost';
setp 2: flush privileges;
setp 3: create user 'jack'@'localhost' identified by 'ddd';

Ответ 10

Если вы хотите удалить пользователя с помощью sql, вам необходимо удалить связанные данные в следующих таблицах: columns_priv, db, procs_priv, tables_priv. Затем выполните flush privileges;

Ответ 11

Этот пост MySQL ERROR 1045 (28000): доступ, запрещенный для пользователя 'bill' @'localhost' (с использованием пароля: YES) полезен. Иногда есть анонимный пользователь '' @'localhost' или '' @'127.0.0.1'. Итак, чтобы решить проблему,

  • сначала отбросить пользователя, у которого "создать пользователя" не удалось.

  • Создайте нового пользователя.

  • Предоставьте новые привилегии новому пользователю.

  • Скрытые привилегии.

Ответ 12

У меня была такая же ошибка. Но команда "FLUSH PRIVILEGES"; не помогло. Мне это понравилось:

CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy';

Ответ 13

Простая работа по этой проблеме. Поскольку команда "удалить" удаляет только пользовательскую запись в "пользовательской" таблице базы данных "mysql", мы можем добавить ее обратно, а затем полностью удалить пользователя. Затем вы можете создать пользователя с тем же именем.

Шаг 1. Найдите формат записи таблицы пользователя в базе данных mysql

use mysql;
select * from user;

Шаг 2. В соответствии с столбцами, показанными на шаге 1, создайте фиктивную запись с именем пользователя. Вставьте его в таблицу, например, напомните, чтобы заменить "имя пользователя" на ваше имя пользователя.

Insert into user value ('%','username','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','','','','','0','0','0',
'0','mysql_native_password',
'*52C5E3AC6BC5E2E0BFF86978BF62A1481AC79D58','N',
'2016-12-10 23:59:12',null,'N');

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

Шаг 3. Отбросьте пользователя.

drop user username;

Теперь вы можете создать пользователя с тем же именем.

Ответ 14

Сервер MySQL работает с параметром -skip-grant-tables, поэтому он не может выполнить этот оператор

Ответ 15

Я знаю, что это старо, но поскольку это первый результат в Google, я решил, что должен добавить свое решение. В моем случае отказ от работы работал нормально, но воссоздание пользователя дало мне "ERROR 2013 (HY000):" Потерянное соединение с сервером MySQL во время запроса "и" ОШИБКА 2006 (HY000): сервер MySQL ушел ". Я попробовал привилегии flush → удалить пользовательское решение, но все равно имел ту же ошибку.

В моем случае ошибка произошла из-за обновления mysql от 5.1 → 5.6. Просмотр журналов ошибок, я заметил, что он сказал, чтобы запустить mysql_upgrade. Сделал ли это и мой созданный пользовательский отчет работу отлично!

Ответ 16

Недавно я получил эту ошибку.

Что сработало для меня, так это проверка работоспособности mysql "Пользователи и привилегии", и все еще существовал пользователь.

После удаления оттуда я смог воссоздать пользователя.

Ответ 17

Проверьте, является ли

'user'@'%'

или

'user'@'localhost'

Ответ 18

Как ни странно, MySQL верстак решил это за меня. На вкладке "Администрирование" → "Пользователи и привилегии" пользователь был указан с ошибкой. Использование опции удаления решило проблему.

Ответ 19

mysql> DELETE FROM mysql.db WHERE user = 'jack'

Перезагрузите сервер:

# mysql.server restart

Затем выполните команду CREATE USER.

Ответ 20

Просто удалите связанные с пользователем данные из mysql.db(возможно, из других таблиц), затем заново создайте оба.

Ответ 21

Я также столкнулся с той же проблемой, после нескольких поисков я нашел решение, которое сработало для меня. Надеюсь, это поможет вам. Поскольку вы уже создали пользователей, попробуйте сделать FLUSH PRIVILEGES на консоли Mysql. Эта проблема уже находится в сообщении об ошибке MySql. Вы также можете проверить это. Теперь после промывки вы можете создать нового пользователя. выполните следующие шаги:

Step-1: Open terminal Ctrl+Alt+T
Step-2: mysql -u root -p  , it will ask for your MySQL password.

Теперь вы можете увидеть консоль Mysql.

Step-3: CREATE USER 'username'@'host' IDENTIFIED by 'PASSWORD';

Вместо имени пользователя вы можете поместить нужное имя пользователя. Если вы используете Mysql на локальном компьютере, введите "localhost" вместо хоста, иначе укажите имя своего сервера, к которому вы хотите получить доступ.

Пример: СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ smruti @localhost ИДЕНТИФИЦИРОВАН от 'hello';

Теперь новый пользователь создан. Если вы хотите предоставить весь доступ, введите

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Теперь вы можете выйти из MySQL, набрав \q. Теперь снова войдите через

mysql -u newusername -p, затем нажмите Enter. Вы можете видеть все.

Надеюсь, что это поможет.