Похоже, я не могу заново создать простого пользователя, которого я удалил, даже в качестве root в MySQL.
Мой случай: пользователь 'jack' существовал ранее, но я удалил его из mysql.user, чтобы создать заново. Я не вижу никаких следов этого в той таблице. Если я выполню эту команду для другого, произвольного имени пользователя, например 'jimmy', то все будет работать нормально (как и в случае с 'jack').
Что я сделал, чтобы испортить пользователя 'jack', и как я могу устранить это повреждение, чтобы снова создать 'jack' как действительного пользователя для этой установки MySQL?
См. пример ниже. (Конечно, первоначально между созданием 'jack' и его удалением прошло много времени).
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)
да эта ошибка есть. Тем не менее, я нашел небольшой обходной путь.
Это должно решить это. Предполагая, что мы хотим создать пользователя admin @ localhost, это будут команды:
& Лт; pre > drop user admin @ localhost ; флеш привилегии ; создать пользователя admin @ localhost, идентифицированного по '< i > admins_password < / i >' & Лт; / pre >
Приветствия
Попробуйте выполнить команду FLUSH PRIVILEGES
. В этом сообщении MySQL об ошибке, связанной с этим кодом ошибки, сообщается о некотором успехе в случае, аналогичном вашему, после сброса привилегий.
Эта ошибка находится на 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
; как предполагает doc, но MySQL не рассматривает «%» как подстановочный знак таким образом, чтобы отбросить всех пользователей на всех хостах. В конце концов, это не так дико. Или, может быть, он иногда работает, когда удаляет пользователя localhost, а затем пытается удалить его в%.
Мне ясно, что когда он пытается удалить пользователя в%, он выдает сообщение об ошибке и уходит. Последующее «CREATE USER» на localhost потерпит неудачу, потому что пользователь localhost никогда не был удален. Кажется, нет необходимости тратить время на копание в грантовых столах в поисках призраков, как предложил один из авторов.
Я вижу 7 голосов за:
DROP USER 'jack@localhost'; // полностью удалить учетную запись
Что интерпретируется как «DROP USER» jack @ localhost '@ '%'; `# неправильно
На самом деле, похоже, есть реальная ошибка, которая генерирует то же сообщение об ошибке, но это связано с удалением первого созданного пользователя (после установки нового сервера mysql). Исправлена ли эта ошибка, я не знаю; но я не помню, чтобы это происходило в последнее время, и я до 5.5.27 в это время.
Если вы используете оператор 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';
(Я полагаю, что «ПРИВИЛЕГИИ ПЛОЩАДИ» не могут повредить, но определенно отбросят пользователя первым.)
Не стоит удалять пользователей вручную таким образом. В MySQL существует синтаксис REVOKE
для удаления привилегий и DROP USER
для их удаления:
REVOKE priv1,priv2,priv3,etc... FROM 'jack@localhost'; // remove certain privileges
DROP USER 'jack@localhost'; // completely delete the account
Лучше всего использовать предоставленные инструменты, а не возиться в фоновом режиме.
Бросьте пользователя, сбросьте привилегии; затем создайте пользователя. Это работает!
В MySQL 5.6 использование Drop userid;
не работает. Использовать: Drop user 'userid' @ 'localhost';
и / или Drop user 'userid' @ '%';
. Таким образом я смог бросить пользователя и воссоздать его.
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';
Этот пост https://stackoverflow.com/questions/10299148/mysql-error-1045-28000-access-denied-for-user-billlocalhost-using-passw полезен. Иногда есть анонимный пользователь '' @ 'localhost' или '' @ '127.0.0.1'. Итак, чтобы решить проблему
сначала бросьте пользователя, чей «создать пользователя» не удалось.
Создать нового пользователя.
Грант требует привилегий для нового пользователя.
Флеш привилегии.
Простая работа по этому вопросу. Поскольку команда «delete» удаляет только пользовательскую запись в «пользовательской» таблице базы данных «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;
Теперь вы можете создавать пользователей с тем же именем.
Проверьте, если есть
'user' @ '%'
или
'user' @ 'localhost'
Сервер MySQL работает с опцией --skip-grant-tables, поэтому он не может выполнить этот оператор
Как ни странно, верстак MySQL решил это для меня. На вкладке «Администрирование» - > Пользователи и привилегии, пользователь был указан с ошибкой. Использование опции удаления решило проблему.
Я знаю, что это старое, но так как это первый результат в Google, я решил добавить свое решение. В моем случае отказ пользователя работал нормально, но воссоздание пользователя дало мне «ERROR 2013 (HY000): потерянное соединение с сервером MySQL во время запроса» и «ERROR 2006 (HY000): мой серверSQL исчез.«Я попробовал права на флеш -> drop user, но все же имел ту же ошибку.
В моем случае ошибка была вызвана обновлением mysql с 5.1 - > 5,6. Просматривая журналы ошибок, я заметил, что в нем написано mysql_upgrade. Сделал это, и мое пользовательское заявление о создании работало нормально!
Просто удалите данные, связанные с пользователем, из mysql.db (возможно, из других таблиц), а затем воссоздайте оба.