it-swarm.com.ru

ОШИБКА 1396 (HY000): сбой операции CREATE USER для 'jack' @ 'localhost'

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

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

Что я сделал, чтобы испортить пользователя «jack» и как я могу отменить это повреждение, чтобы воссоздать «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)
242
Russ Bateman

Попробуйте сделать FLUSH PRIVILEGES. Это сообщение об ошибке MySQL с этим кодом ошибки , по-видимому, сообщает о некотором успехе в случае, аналогичном вашему, после очистки привилегий.

185
QuantumMechanic

да, эта ошибка есть. Тем не менее, я нашел небольшой обходной путь.

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

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

 удалить пользователя admin @ localhost; 
 flush привилегии; 
 создать пользователя admin @ localhost с пометкой 'admins_password»

Ура

452
tver3305

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

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

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

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

...

DROP USER user [ user] ...

...

DROP USER 'jeffrey' @ 'localhost';

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

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

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

DROP USER user;

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

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

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

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

DROP USER 'jack @ localhost'; // полностью удаляем аккаунт

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

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

40
user1969061

Если вы используете оператор 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 не может повредить, но сначала обязательно удалите пользователя.)

29
Anthony Rutledge

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

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

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

22
Marc B

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

11
罗俊峰

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

9
a1ex07

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

6
Joilson Cardoso
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';
4
TonyWu

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

2
fely

Простое решение этой проблемы. Поскольку команда «delete» удаляет только запись пользователя в таблице «user» базы данных «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;

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

2
Jason Mao

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

  1. сначала удалите пользователя, чей «создать пользователя» не удалось. 

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

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

  4. Сбросить привилегии.

2
user_19

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

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

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

То, что сработало для меня, это проверка в mysql workbench «Пользователи и привилегии» и осознание того, что пользователь все еще существует. 

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

0
dmena

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

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

# mysql.server restart

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

0
emallove

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

'Пользователь' @ '%' 

или же 

«Пользователь» @ «локальный»

0
Inês Gomes

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

0
irfan habib

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

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

0
vik