Как предоставить все привилегии пользователю root в MySQL 8.0

Пытался

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

Получение

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'IDENTIFIED BY' root 'WITH GRANT OPTION' в строке 1.

Примечание: то же самое работает при попытке в предыдущих версиях.

Также попробовал

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

Получение

ОШИБКА 1410 (42000): Вам не разрешено создавать пользователя с GRANT

MySQL (8.0.11.0) имя пользователя/пароль - root/root.

Ответы

Ответ 1

Начиная с MySQL 8, вы больше не можете (неявно) создавать пользователя с помощью команды GRANT. Вместо этого используйте CREATE USER, а затем GRANT :

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

Предупреждение о рисках безопасности для WITH GRANT OPTION, см.:

Ответ 2

1) Это сработало для меня. Сначала создайте нового пользователя. Пример: как 'foo' с кодом pw 'bar.enter здесь

> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

2) Замените приведенный ниже код именем пользователя на "foo".

> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';

Примечание: имя_базы_данных - это база данных, для которой вы хотите иметь привилегии. значит все на всех

3) Войти как пользователь foo

mysql> mysql -u foo -p

Пароль: бар

4) Убедитесь, что ваше первоначальное соединение с Sequelize установлено на foo с pw bar.

Ответ 3

Указанный пользователь просто не существует в вашем MySQL (поэтому MySQL пытается создать его с GRANT, как это было до версии 8, но терпит неудачу с ограничениями, введенными в этой версии).

MySQL довольно тупой на данный момент, поэтому, если у вас есть "root" @"localhost" и вы пытаетесь предоставить привилегии "root" @"%", он воспринимает их как разных пользователей, а не как обобщенное понятие для пользователя root на любом хосте, включая локальный.

Сообщение об ошибке также вводит в заблуждение.

Итак, если вы получаете сообщение об ошибке, проверьте существующих пользователей с помощью чего-то вроде этого

SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;

а затем создайте пропавшего пользователя (как советовал Майк) или настройте команду GRANT в соответствии с действующей спецификацией пользователя.

Ответ 4

Мои характеристики:

mysql --version
mysql  Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)

Что сработало для меня:

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;

Ответ на оба запроса:

Query OK, O rows affected (0.10 sec*)

NB: я создал базу данных (db_name) ранее и создавал учетные данные пользователя со всеми привилегиями, предоставленными всем таблицам в БД, вместо того, чтобы использовать пользователя root по умолчанию, который я где-то читал, - это лучшая практика.

Ответ 5

Это сработало для меня:

mysql> FLUSH PRIVILEGES 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES

Ответ 6

Проверьте ваше имя пользователя и домен такой же, как созданный ранее. Mysql выберите учетную запись по двум столбцам в пользовательской таблице. Если это не так, mysql может подумать, что вы хотите создать новую учетную запись по гранту, что не поддерживается после версии 8.0.

Ответ 7

Просто мои 2 цента на эту тему. У меня возникла та же проблема с попыткой подключения из MySQL Workbench. Я использую виртуальную машину bitnami-mysql для настройки локальной песочницы для разработки.

В руководстве Bitnami сказано, что нужно запустить команду "Предоставить все привилегии":

/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";

Это явно не работало, я наконец-то получил его, используя ответ Майка Лишке.

Я думаю, что произошло, что пользователь root @% имел неправильные учетные данные, связанные с ним. Так что, если вы пытались изменить пользовательские привилегии и безуспешно, попробуйте:

  1. Удаление пользователя
  2. Создайте пользователя снова.
  3. Убедитесь, что у вас есть правильная привязка в вашем файле конфигурации my.cnf. В моем случае я прокомментировал строку, так как это только для среды песочницы.

Из Mysql Console:

Список пользователей (полезно видеть всех ваших пользователей):

select user, host from mysql.user;

Удалить желаемого пользователя:

drop user '{{ username }}'@'%';

Создать пользователя и предоставить разрешения:

CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;

Запустите эту команду:

FLUSH PRIVILEGES;

Найдите свой конфигурационный файл mysql "my.cnf" и найдите строку, которая выглядит следующим образом:

bind-address=127.0.0.1

и прокомментируйте это, используя '#':

#bind-address=127.0.0.1

Затем перезапустите службу MySQL.

Надеюсь, что это помогает кому-то, имеющему ту же проблему!

Ответ 8

USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

Ответ 9

Ну, у меня просто была такая же проблема. Даже если в маршруте было "%", не удалось подключиться удаленно. Теперь, посмотрев на файл my.ini (файл конфигурации в windows), оператор bind-address был пропущен.

Итак... Я поставил этот bind-address = * после [mysqld] и перезапустил службу. Теперь это работает!

Ответ 10

Это может сработать

предоставить все в dbtest. * для 'dbuser' @'%', идентифицированного как 'mysql_password';

Ответ 11

Я слышал о той же проблеме в centOS, и это сработало для меня (версия: 8.0.11)

mysql> ГРАНТ ВСЕ ПРИВИЛЕГИИ. TO 'root' @'%'

Ответ 12

Это сработало для меня

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'password';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;