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

Пытался

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

Получающий

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'root' WITH GRANT OPTION' at line 1.

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

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

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

Получающий

ERROR 1410 (42000): You are not allowed to create a user with GRANT

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

вы подключаетесь напрямую к mysql или используете ssh?

Harald 04.05.2018 16:29

прямо из командной строки как пользователь root

Praveen 04.05.2018 17:03

Посмотрите различия между 13.7.1.6 Синтаксис GRANT и 13.7.1.4 Синтаксис GRANT.

wchiquito 04.05.2018 17:18

Я тоже застрял с той же проблемой. Я запускаю оболочку mysql с помощью mysql -u root -p, а затем ввожу пароль root. Затем я попробовал GRANT GRANT OPTION ON *.* TO 'root'@'%'; и получил ошибку ERROR 1410 (42000): You are not allowed to create a user with GRANT

aiman 05.05.2018 10:42

@Praveen, ты когда-нибудь примешь здесь ответ?

Mike Lischke 11.11.2020 17:37
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
161
5
337 991
19

Ответы 19

Начиная с MySQL 8 вы больше не можете (неявно) создавать пользователя с помощью команды GRANT. Вместо этого используйте СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ, за которым следует оператор ГРАНТ:

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

Осторожность о рисках безопасности, связанных с WITH GRANT OPTION, см .:

Эта команда создаст нового пользователя. Но я хочу предоставить привилегии существующему пользователю root. mysql> СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'root' @ '%' ИДЕНТИФИЦИРОВАНО 'root'; Запрос ОК, затронуты 0 строк (0,31 сек) mysql> ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА . TO 'root' @ '%' С ОПЦИЕЙ GRANT; Запрос ОК, затронуты 0 строк (0,16 сек) mysql> ВЫБРАТЬ пользователя ИЗ mysql.user; + ------------------ + | Пользователь | + ------------------ + | корень | | mysql.infoschema | | mysql.session | | mysql.sys | | корень | + ------------------ + 5 рядов в наборе (0.00 сек)

Praveen 07.05.2018 06:34

Теперь в таблице пользователей присутствуют два пользователя с именем root !! Также я не могу подключиться удаленно (пользователь root). ------------- Подробности: Тип: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionE‌ xception Состояние SQL: 08001

Praveen 07.05.2018 06:39

Странный. Сообщение об ошибке в вашем вопросе указывает на то, что этого пользователя не существует. Это единственная причина, по которой я предложил создать его первым. И невозможно иметь одного и того же пользователя дважды в одном экземпляре MySQL. Они различаются либо по названию, либо по части хоста.

Mike Lischke 07.05.2018 08:39

Эти 2 пользователя подключаются с разных хостов. Вместо этого запустите SELECT User, Host FROM mysql.user;.

Mike Lischke 07.05.2018 08:46

U правильный хост различен для обоих пользователей root. mysql> ВЫБРАТЬ пользователя, хост ОТ mysql.user; + ------------------ + ----------- + | Пользователь | Хост | + ------------------ + ----------- + | корень | % | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | корень | localhost | + ------------------ + ----------- + 5 строк в наборе (0.00 сек) Проблема в том, почему я не умею подключаться удаленно. Подробности: Тип: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionE‌ xception Состояние SQL: 08001

Praveen 08.05.2018 06:44

Это другой вопрос, и он не имеет к этому никакого отношения. Завершите этот, а затем откройте новый вопрос.

Mike Lischke 08.05.2018 09:06

Получил эту ошибку: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Adil 22.09.2018 12:24

В частности, MySQL 8.0.11 удалил возможность использовать GRANT для создания пользователей. Об этом можно прочитать здесь: dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html

Adam Taylor 23.05.2020 00:35

Для людей, использующих DBeaver (вам нужно два шага, как сказал @MikeLischke): сначала создайте пользователя и сохраните. Затем предоставьте доступ и снова сохраните.

Markus Zeller 26.06.2020 16:51

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

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

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

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

Note: database_name is the database that you want to have privileges, . means all on all

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

mysql> mysql -u foo -p

Пароль: бар

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

Это далеко не ответ на вопрос. Речь идет о глобальных разрешениях, а не о разрешениях для конкретной базы данных.

tmuecksch 01.11.2018 15:46

У меня была такая же проблема с CentOS, и это сработало для меня (версия: 8.0.11):

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

ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '. TO 'root' @ '%' 'в строке 1

GDefender 25.08.2018 16:05

mysql> ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ. TO 'root' @ '%'; ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '. TO 'root' @ '%' 'в строке 1 mysql>

PGOEL 30.10.2018 11:00

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

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

На самом деле это наиболее близкий к правильному ответ.

Joseph8th 22.05.2020 17:36

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

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

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

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

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

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

Для меня это было правильным решением! Мне просто не удалось точно ввести строку user @. Обязательно проверьте это, прежде чем пробовать другие предлагаемые решения. Для меня это было: CREATE USER 'user'@'%domain.com', а затем, когда я выдал неудачный оператор GRANT, мой синтаксис был отключен на один '.'. Это выглядело так: GRANT .... TO 'user'@'%.domain.com'. Я забыл поставить "." в моем операторе создания, и это имело решающее значение для устранения этой проблемы.

wallisds 22.08.2019 23:20

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

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

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

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*)

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

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

у меня была опечатка в пользователе, и вот что случилось!

Cerveser 02.10.2020 17:16

Только мои 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:

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

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.

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

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

grant all on dbtest.* to 'dbuser'@'%' identified by 'mysql_password';

Вместо того, чтобы выбросить код, также объясните, почему это подходящее решение. Цель состоит в том, чтобы научить ОП знать, что делать в следующий раз, а не просто решить сиюминутную проблему.

the Tin Man 05.01.2020 22:45

Я вижу много (неправильных) ответов, это так просто:

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

Примечание: вместо самостоятельно созданного user вы можете использовать root для подключения к базе данных. Однако использование учетной записи root по умолчанию, позволяющей приложению подключаться к базе данных, не является предпочтительным способом.

Альтернативные привилегии (будьте осторожны и помните принцип наименьших привилегий):

-- Grant user permissions to all tables in my_database from localhost --
GRANT ALL ON my_database.* TO 'user'@'localhost';

-- Grant user permissions to my_table in my_database from localhost --
GRANT ALL ON my_database.my_table TO 'user'@'localhost';

-- Grant user permissions to all tables and databases from all hosts --
GRANT ALL ON *.* TO 'user'@'*';

Если бы вы каким-то образом столкнулись со следующей ошибкой:

ERROR 1130 (HY000): Host ‘1.2.3.4’ is not allowed to connect to this MySQL server

Вам нужно добавить / изменить следующие две строки в /etc/mysql/my.cnf и перезапустить mysql:

bind-address           = 0.0.0.0
skip-networking

Не могли бы вы пояснить, почему это не работает вместо того, чтобы просто жаловаться? Таким образом я могу помочь вам или опубликовать дополнительную информацию.

Nebulastic 03.05.2020 21:46

Этот ответ даже не касается вопроса о привилегиях пользователя корень.

Joseph8th 22.05.2020 17:23

Обновил ответ соответственно.

Nebulastic 25.05.2020 10:23

Лучший ответ, теперь это GRANT ALL ON для MySQL 8.0. Также я считаю, что вместо отключения bind-address вы можете привязаться к 127.0.0.1 и включить --protocol=tcp в любые команды. В долгосрочной перспективе производительность также лучше, чем у localhost.

Jesse Nickles 12.07.2020 07:05

Все ответы, кроме моего, здесь отсутствуют, так это то, что OP задавался вопросом, почему пользователь больше не может быть создан с помощью команды GRANT. Никогда не спрашивали, как использовать GRANT для предоставления привилегий. Но почему-то люди отказываются читать то, о чем уже спрашивали и на что отвечали.

Mike Lischke 17.09.2020 14:24

Если вы хотите предоставить привилегии для определенной таблицы, вы не можете указывать ее в кавычках. Вы должны написать это прямо. Я не знаю, почему они удалили это, но это правда. Так что не пропустите ..

Suphi ÇEVİKER 02.02.2021 08:00

1. предоставить привилегии

mysql> ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ. К 'root' @ '%' С ОПЦИЕЙ GRANT;

mysql> ПРИВИЛЕГИИ ПРОМЫВКИ

2. проверьте таблицу пользователей:

mysql> используйте mysql

mysql> выберите хост, пользователя от пользователя

3.Изменить конфигурационный файл

mysql default bind ip : 127.0.0.1, если мы хотим удаленно посещать службы, просто удалите config

#Modify the configuration file
vi /usr/local/etc/my.cnf

#Comment out the ip-address option
[mysqld]
# Only allow connections from localhost
#bind-address = 127.0.0.1

4. наконец перезапустите службы

сервисы brew перезапустить mysql

Хотя это сработает, я бы никогда не перезапустил экземпляр mysql в производственной среде при предоставлении определенных привилегий. Вместо этого попробуйте сбросить привилегии.

Nebulastic 06.04.2020 00:25

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

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

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

mysql> USE mysql;
mysql> UPDATE User SET Host='%' WHERE User='root' AND Host='localhost';

Хотя это сработает в вашей конкретной ситуации. Этот синтаксис sql обновляет пользователя, но не устанавливает учетную запись пользователя. Он также не дает привилегий.

Nebulastic 30.04.2020 21:15

У меня была такая же проблема, которая привела меня сюда. В частности, для локальной разработки я хотел иметь возможность делать mysql -u root -p без sudo. Я не хочу создавать нового пользователя. Я хочу использовать root из локального веб-приложения PHP.

Сообщение об ошибке вводит в заблуждение, так как был Ничего плохого с привилегиями пользователя 'root'@'%' по умолчанию.

Вместо этого, как несколько человек упомянули в других ответах, решением было просто установить bind-address=0.0.0.0 вместо bind-address=127.0.0.1 в моей конфигурации /etc/mysql/mysql.conf.d/mysqld.cnf. В остальном никаких изменений не требовалось.

Это даже не полностью отвечает на вопрос.

Nebulastic 25.05.2020 10:26

Вы получите эту ошибку

ERROR 1410 (42000): You are not allowed to create a user with GRANT

Если вы пытаетесь запустить GRANT на несуществующем пользователе!

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

select User, Host from user;

В частности, обратите внимание, находится ли созданный вами пользователь на localhost, а тот, которому вы пытаетесь предоставить права, - это %.

Для тех, кто был смущен CREATE USER 'root'@'localhost', когда у вас уже есть учетная запись root на сервере, имейте в виду, что ваши 'root'@'localhost' и 'root'@'your_remote_ip' - это два разных пользователя (одно и то же имя пользователя, но разная область действия) на сервере mysql. Следовательно, создание нового пользователя с постфиксом your_remote_ip фактически создаст нового действительного пользователя root, которого вы можете использовать для доступа к серверу mysql с удаленного компьютера.

Например, если вы используете root для подключения к серверу mysql с удаленного компьютера с IP-адресом 10.154.10.241, и вы хотите установить пароль для удаленной учетной записи root, которой является 'Abcdef123!@#', вот шаги, которые вы хотели бы выполнить:

  1. На вашем сервере mysql выполните mysql -u root -p, затем введите свой пароль для root для входа в систему.

  2. В сеансе mysql> сделайте это, чтобы создать пользователя root для удаленной области:

    mysql> CREATE USER 'root'@'10.154.10.241' IDENTIFIED BY 'Abcdef123!@#';
    
  3. После сообщения Query OK сделайте это, чтобы предоставить вновь созданному пользователю root все права:

    mysql> GRANT ALL ON *.* TO 'root'@'10.154.10.241';
    
  4. А потом:

    FLUSH PRIVILEGES;
    
  5. Перезапустите службу mysqld:

    sudo service mysqld restart
    
  6. Подтвердите, что сервер успешно перезапустился:

    sudo service mysqld status
    

Если описанные выше шаги были выполнены без каких-либо ошибок, теперь вы можете получить доступ к серверу mysql с удаленного компьютера, используя root.

эти команды работают для меня:

1-войти в mysql и увидеть всех пользователей

sudo mysql -u root

select user, host from mysql.user;

2-удалить старого пользователя

drop user root@localhost;

3-создать нового пользователя

CREATE USER 'root'@'localhost' IDENTIFIED BY 'mypassword'

4-добавить к нему все привилегии:

GRANT ALL ON *.* TO 'root'@'localhost'

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'mypassword';

5-наконец, флеш привилегии

FLUSH PRIVILEGES;

Скопируйте это и используйте сразу:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

Вместо использования отдельных строк кода, например:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

Потом:

GRANT ALL ON *.* TO 'username'@'localhost';

Потом:

FLUSH PRIVILEGES;

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

ПРЕДОСТАВИТЬ ВСЕ НА . 'root' @ '%';

Используемая ссылка - https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-20-04#step-6-%E2%80%94 -testing-database-connection-from-php-необязательно

Другие вопросы по теме