Ответ 1
Попробуйте выполнить FLUSH PRIVILEGES
. Это сообщение об ошибке MySQL в этом коде ошибки сообщает о некотором успехе в случае, аналогичном вашему, после промывки привилегий.
Кажется, я не могу воссоздать простого пользователя, которого я удалил, даже как 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)
Попробуйте выполнить FLUSH PRIVILEGES
. Это сообщение об ошибке MySQL в этом коде ошибки сообщает о некотором успехе в случае, аналогичном вашему, после промывки привилегий.
Да, эта ошибка существует. Однако я нашел небольшое обходное решение.
Это должно решить. Предполагая, что мы хотим создать user admin @localhost, это были бы команды:
drop user [email protected]; flush privileges; create user [email protected] identified by 'admins_password'
Приветствия
Этот баг сидит на 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.
Если вы используете оператор 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
не может повредить, но, безусловно, сначала отбросить пользователя.)
Вы не должны вручную удалять пользователей таким образом. У MySQL есть REVOKE
синтаксис для удаления привилегий и DROP USER
для их удаления:
REVOKE priv1,priv2,priv3,etc... FROM '[email protected]'; // remove certain privileges
DROP USER '[email protected]'; // completely delete the account
Лучше всего использовать предоставленные инструменты, а не обманывать в фоновом режиме.
Отбросьте пользователя, сбросьте привилегии; затем создайте пользователя. Он работает!
попробуйте delete from mysql.db where user = 'jack'
, а затем создайте пользователя
В MySQL 5.6 с помощью Drop user 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';
Если вы хотите удалить пользователя с помощью sql, вам необходимо удалить связанные данные в следующих таблицах: columns_priv
, db
, procs_priv
, tables_priv
. Затем выполните flush privileges;
Этот пост MySQL ERROR 1045 (28000): доступ, запрещенный для пользователя 'bill' @'localhost' (с использованием пароля: YES) полезен. Иногда есть анонимный пользователь '' @'localhost' или '' @'127.0.0.1'. Итак, чтобы решить проблему,
сначала отбросить пользователя, у которого "создать пользователя" не удалось.
Создайте нового пользователя.
Предоставьте новые привилегии новому пользователю.
Скрытые привилегии.
У меня была такая же ошибка. Но команда "FLUSH PRIVILEGES"; не помогло. Мне это понравилось:
CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy';
Простая работа по этой проблеме. Поскольку команда "удалить" удаляет только пользовательскую запись в "пользовательской" таблице базы данных "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;
Теперь вы можете создать пользователя с тем же именем.
Сервер MySQL работает с параметром -skip-grant-tables, поэтому он не может выполнить этот оператор
Я знаю, что это старо, но поскольку это первый результат в Google, я решил, что должен добавить свое решение. В моем случае отказ от работы работал нормально, но воссоздание пользователя дало мне "ERROR 2013 (HY000):" Потерянное соединение с сервером MySQL во время запроса "и" ОШИБКА 2006 (HY000): сервер MySQL ушел ". Я попробовал привилегии flush → удалить пользовательское решение, но все равно имел ту же ошибку.
В моем случае ошибка произошла из-за обновления mysql от 5.1 → 5.6. Просмотр журналов ошибок, я заметил, что он сказал, чтобы запустить mysql_upgrade. Сделал ли это и мой созданный пользовательский отчет работу отлично!
Недавно я получил эту ошибку.
Что сработало для меня, так это проверка работоспособности mysql "Пользователи и привилегии", и все еще существовал пользователь.
После удаления оттуда я смог воссоздать пользователя.
Проверьте, является ли
'user'@'%'
или
'user'@'localhost'
Как ни странно, MySQL верстак решил это за меня. На вкладке "Администрирование" → "Пользователи и привилегии" пользователь был указан с ошибкой. Использование опции удаления решило проблему.
mysql> DELETE FROM mysql.db WHERE user = 'jack'
Перезагрузите сервер:
# mysql.server restart
Затем выполните команду CREATE USER
.
Просто удалите связанные с пользователем данные из mysql.db(возможно, из других таблиц), затем заново создайте оба.
Я также столкнулся с той же проблемой, после нескольких поисков я нашел решение, которое сработало для меня. Надеюсь, это поможет вам.
Поскольку вы уже создали пользователей, попробуйте сделать 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. Вы можете видеть все.
Надеюсь, что это поможет.