Пытался
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.
прямо из командной строки как пользователь root
Посмотрите различия между 13.7.1.6 Синтаксис GRANT и 13.7.1.4 Синтаксис GRANT.
Я тоже застрял с той же проблемой. Я запускаю оболочку 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
@Praveen, ты когда-нибудь примешь здесь ответ?






Начиная с 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 сек)
Теперь в таблице пользователей присутствуют два пользователя с именем root !! Также я не могу подключиться удаленно (пользователь root). ------------- Подробности: Тип: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionE xception Состояние SQL: 08001
Странный. Сообщение об ошибке в вашем вопросе указывает на то, что этого пользователя не существует. Это единственная причина, по которой я предложил создать его первым. И невозможно иметь одного и того же пользователя дважды в одном экземпляре MySQL. Они различаются либо по названию, либо по части хоста.
Эти 2 пользователя подключаются с разных хостов. Вместо этого запустите SELECT User, Host FROM mysql.user;.
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
Это другой вопрос, и он не имеет к этому никакого отношения. Завершите этот, а затем откройте новый вопрос.
Получил эту ошибку: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
В частности, MySQL 8.0.11 удалил возможность использовать GRANT для создания пользователей. Об этом можно прочитать здесь: dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html
Для людей, использующих DBeaver (вам нужно два шага, как сказал @MikeLischke): сначала создайте пользователя и сохраните. Затем предоставьте доступ и снова сохраните.
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.
Это далеко не ответ на вопрос. Речь идет о глобальных разрешениях, а не о разрешениях для конкретной базы данных.
У меня была такая же проблема с CentOS, и это сработало для меня (версия: 8.0.11):
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '. TO 'root' @ '%' 'в строке 1
mysql> ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ. TO 'root' @ '%'; ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '. TO 'root' @ '%' 'в строке 1 mysql>
Ну, у меня была такая же проблема. Даже если в маршруте был указан "%", удаленное подключение невозможно. Теперь, просмотрев файл my.ini (файл конфигурации в Windows), оператор bind-address был пропущен.
Итак ... Я вставил этот bind-address = * после [mysqld] и перезапустил службу. Теперь это работает!
На самом деле это наиболее близкий к правильному ответ.
Указанный пользователь просто не существует в вашем 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'. Я забыл поставить "." в моем операторе создания, и это имело решающее значение для устранения этой проблемы.
Это сработало для меня:
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.
у меня была опечатка в пользователе, и вот что случилось!
Только мои 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 @% были неправильные учетные данные, связанные с ним. Итак, если вы пытались изменить привилегии пользователя, но безуспешно, попробуйте:
Из консоли 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';
Вместо того, чтобы выбросить код, также объясните, почему это подходящее решение. Цель состоит в том, чтобы научить ОП знать, что делать в следующий раз, а не просто решить сиюминутную проблему.
Я вижу много (неправильных) ответов, это так просто:
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
Не могли бы вы пояснить, почему это не работает вместо того, чтобы просто жаловаться? Таким образом я могу помочь вам или опубликовать дополнительную информацию.
Этот ответ даже не касается вопроса о привилегиях пользователя корень.
Обновил ответ соответственно.
Лучший ответ, теперь это GRANT ALL ON для MySQL 8.0. Также я считаю, что вместо отключения bind-address вы можете привязаться к 127.0.0.1 и включить --protocol=tcp в любые команды. В долгосрочной перспективе производительность также лучше, чем у localhost.
Все ответы, кроме моего, здесь отсутствуют, так это то, что OP задавался вопросом, почему пользователь больше не может быть создан с помощью команды GRANT. Никогда не спрашивали, как использовать GRANT для предоставления привилегий. Но почему-то люди отказываются читать то, о чем уже спрашивали и на что отвечали.
Если вы хотите предоставить привилегии для определенной таблицы, вы не можете указывать ее в кавычках. Вы должны написать это прямо. Я не знаю, почему они удалили это, но это правда. Так что не пропустите ..
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 в производственной среде при предоставлении определенных привилегий. Вместо этого попробуйте сбросить привилегии.
Мои характеристики:
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 обновляет пользователя, но не устанавливает учетную запись пользователя. Он также не дает привилегий.
У меня была такая же проблема, которая привела меня сюда. В частности, для локальной разработки я хотел иметь возможность делать 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. В остальном никаких изменений не требовалось.
Это даже не полностью отвечает на вопрос.
Вы получите эту ошибку
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!@#', вот шаги, которые вы хотели бы выполнить:
На вашем сервере mysql выполните mysql -u root -p, затем введите свой пароль для root для входа в систему.
В сеансе mysql> сделайте это, чтобы создать пользователя root для удаленной области:
mysql> CREATE USER 'root'@'10.154.10.241' IDENTIFIED BY 'Abcdef123!@#';
После сообщения Query OK сделайте это, чтобы предоставить вновь созданному пользователю root все права:
mysql> GRANT ALL ON *.* TO 'root'@'10.154.10.241';
А потом:
FLUSH PRIVILEGES;
Перезапустите службу mysqld:
sudo service mysqld restart
Подтвердите, что сервер успешно перезапустился:
sudo service mysqld status
Если описанные выше шаги были выполнены без каких-либо ошибок, теперь вы можете получить доступ к серверу mysql с удаленного компьютера, используя root.
эти команды работают для меня:
1-войти в mysql и увидеть всех пользователей
sudo mysql -u rootselect 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-необязательно
вы подключаетесь напрямую к mysql или используете ssh?