Невозможно найти подходящую строку в таблице пользователя.

Я пытаюсь выполнить эти запросы -

DROP DATABASE IF EXISTS `hotel`;

GRANT USAGE ON *.* TO 'user'@'localhost';
DROP USER 'user'@'localhost';

CREATE USER [email protected] IDENTIFIED BY 'user';

CREATE DATABASE `hotel`
    CHARACTER SET 'utf8'
    COLLATE 'utf8_general_ci';

GRANT USAGE ON *.* to 'user'@'localhost' identified by 'user';

Но я всегда получаю ошибку на

GRANT USAGE ON *.* TO 'user'@'localhost' Error Code: 1133. Can't find any matching row in the user table    0.000 sec

Я думал, что Grant usage создает нового пользователя, если пользователь не существует. Что не так?

Ответы

Ответ 1

Я думал, что использование Grant создает нового пользователя, если пользователь не существует. Что не так?

Из документации вы можете установить параметр, позволяющий mysql создавать пользователя, если он не существует.

NO_AUTO_CREATE_USER

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

Чтобы установить параметр:

Вы можете изменить режим SQL во время выполнения, используя SET [GLOBAL | SESSION] sql_mode = 'modes' для установки системного значения sql_mode.

Ответ 2

Я получил ту же ошибку с

grant all on newdb.* to [email protected];

разрешено с помощью 'identited':

grant all on newdb.* to [email protected]  identified by 'password';

Ответ 3

Команда GRANT больше не создает пользователей автоматически.

Не NO_AUTO_CREATE_USER переменную NO_AUTO_CREATE_USER, вместо этого сначала создайте пользователя с помощью команды CREATE USER, затем предоставьте права:

DROP USER IF EXISTS 'user'@'localhost';
CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost';

Ответ 4

Попробуйте добавить в конец скрипта:

FLUSH PRIVILEGES;