Я посмотрел на несколько похожих вопросов и поэтому демонстрирую, что проверил основы. Хотя, конечно, это не значит, что я не пропустил что-то совершенно очевидное. :-)
У меня вопрос: почему мне отказано в доступе пользователю с привилегиями делать то, что я пытаюсь сделать, и где я уже набрал пароль и получил доступ? (Для полноты картины я попытался ввести неправильный пароль, чтобы убедиться, что клиент MySQL запретит мне доступ при запуске программы.)
Задний план:
Войдите в оболочку компьютера, на котором работает сервер MySQL через ssh, я вошел в систему как root:
[myname@host ~]$ mysql -u root -p -hlocalhost
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 62396
Server version: 5.5.18-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Потрясающие. Мое прочтение ответов на подобные вопросы подсказывает, что я должен убедиться, что привилегии соответствуют тем, что есть в таблицах грантов.
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
Затем убедитесь, что я тот, кто я думаю:
mysql> SELECT user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
... и действительно действительно убедитесь:
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql>
Все идет нормально. Теперь, какие у меня есть привилегии?
mysql> SHOW GRANTS FOR 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[OBSCURED]' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Теперь это немного сложно прочитать, поэтому давайте попробуем так (вы также увидите, что есть пользователь root, не являющийся локальным хостом):
mysql> SELECT * FROM mysql.user WHERE User='root'\G
*************************** 1. row ***************************
Host: localhost
User: root
Password: *[OBSCURED]
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
*************************** 2. row ***************************
Host: [HOSTNAME].com
User: root
Password: *[OBSCURED]
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
2 rows in set (0.00 sec)
Потрясающие! MySQL считает, что я root @ localhost, а root @ localhost обладает всеми этими привилегиями. Это значит, что я должен иметь возможность делать то, что хочу, верно?
mysql> GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Как я мог облажаться что-то такое основное?
Примечание: для тех, кто хочет предложить, чтобы у меня не было пользователя с именем root со всеми привилегиями, это замечательно, и я подумаю над этим, когда я смогу дать другому пользователю некоторые привилегии.
Спасибо!
источник
-p
паролем. Я знаю, это глупо, но может помочь кому-то.Ответы:
Обратите внимание, как вывод
не сказал «ВСЕ ПРИВИЛЕГИИ», но должен был разъяснить, что имеет root @ localhost.
Предоставить все привилегии не удастся, потому что пользователь не может предоставить то, чего у него нет, и сервер, кажется, думает, что чего-то здесь нет ...
Так чего же тогда не хватает?
В моей системе я получаю это:
В 5.5 есть также новые таблицы, такие как mysql.proxies_user: убедитесь, что они у вас есть.
При установке нового экземпляра сервера mysql скрипт установки создаст все таблицы mysql. * С правильной структурой.
При обновлении со старой версии убедитесь, что используется правильная процедура обновления (mysql_upgrade), которая добавит отсутствующие таблицы / столбцы.
Это только предположение, но кажется, что mysql_upgrade не был сделан для этого экземпляра, вызывая наблюдаемое поведение.
источник
У меня также была та же проблема с этим, но на Windows после обновления до MySQL 5.5 от MySQL 5.1. Я уже пытался изменить, создать и сбросить пароль, упомянутый здесь , здесь , здесь и здесь , без понятия. Я все еще получаю ту же ошибку:
Я могу нормально подключаться, показывать все базы данных, делать выборки и вставки, создавать и добавлять пользователей, но когда дело доходит до GRANT, я облажался. Эти доступ запрещен ошибка появляется снова.
Мне удалось решить эту проблему, установив привилегии с помощью следующей команды в каталоге bin / каталога сервера MySQL, как указано здесь :
Затем проблема ушла. Я надеюсь, что это решение работает и в Linux, так как обычно MySQL предоставляет одну и ту же команду как в Linux, так и в Windows.
источник
cd /usr/local/Cellar/mysql/5.5.25a/bin && mysql_upgrade
/usr/bin/mysql_upgrade -u root -p
введите пароль и Bob's Your Uncle!mysqldump ... --all-databases
а затем импортировали их в MySQL> = 5.5, ваши пользователи будут заменены (конечно), но у васroot
будет та же проблема, что и у OP. Иmysql_upgrade
не будет работать - вы должны добавить--force
флаг, то естьmysql_upgrade -u root -p --force
. Надеюсь, что кому-то здесь поможет.Это может произойти, если вы попытаетесь предоставить все привилегии для всех таблиц другому пользователю, поскольку таблица mysql.users считается запрещенной для пользователя, отличного от пользователя root.
Следующее, однако, должно работать:
Обратите внимание, что мы используем `%`. * Вместо *. *
источник
'%'.*
работает а нет*.*
?'%'.*
вместо`%`.*
не работает. Вы ДОЛЖНЫ использовать`%`.*
Это случилось со мной, когда я попытался установить более высокую версию MySQL, чем та, которая входит в дистрибутив.
Я стер старую версию, затем установил новую (rpm -e ... затем rpm -i MySQL-server *), но не понял, что файлы в / var / lib / mysql все еще были из более старой версии (с отличиями в объяснил Марк Альф - спасибо!)
Я мог бы сделать mysql_upgrade, но, как я хотел начать с нуля, я сделал:
Затем установите пароль root (/ usr / bin / mysqladmin -u root password), и все сработало, как и ожидалось, с помощью команд GRANT ...
источник
В основном эта ошибка возникает, когда вы не указали пароль, это означает, что у вас есть неправильный пароль, указанный в некотором файле опций.
Прочитайте этот DOC на понимании того, как назначать и управлять пароли для учетных записей.
Кроме того, проверьте, является ли разрешение для папки
/var/lib/mysql/mysql
711 или нет.источник
У меня была такая же проблема, т.е. все привилегии предоставлены для root:
... но до сих пор не разрешено создавать таблицы:
Ну, это было вызвано досадной ошибкой пользователя, то есть я не выбрал базу данных. После выдачи USE dbname все заработало нормально.
источник
В Debian ( свистящих , 7.8) с MySQL 5.5.40, я обнаружил ,
SELECT * FROM mysql.user WHERE User='root'\G
показал , чтоEvent_priv
и «поля Trigger_priv` были присутствовать , но не установлен в положение Y.Бег
mysql_upgrade
(с или без--force
) не имеет значения; Мне нужно было сделать руководство:update user set Event_priv = 'Y',Trigger_priv = 'Y' where user = 'root'
Тогда, наконец, я мог бы использовать:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION
... а затем использовать его более точно в отдельной базе данных / учетной записи пользователя.
источник
Возможно, вы пришли к этому вопросу с установленной MySQL версии 8 (как и я) и не нашли удовлетворительного ответа. Вы больше не можете создавать таких пользователей в версии 8:
Довольно запутанное сообщение об ошибке, которое вы получаете:
ERROR 1410 (42000): You are not allowed to create a user with GRANT
Чтобы создать пользователей в версии 8, вы должны сделать это в два этапа:
Конечно, если вы предпочитаете, вы также можете предоставить ограниченное количество привилегий (вместо
GRANT ALL PRIVILEGES
), напримерGRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER
источник
В результате набора
SHOW GRANTS FOR 'root'@'localhost';
мне показался какой-то скрытый пароль, поэтому я вошел в mysql этой системы, используя HeidiSQL в другой системе (используя вroot
качестве имени пользователя и соответствующего пароля), и набралGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'thepassword' WITH GRANT OPTION;
и это сработало, когда я вернулся в систему и вошел в систему с помощью
mysql -uroot -pthepassword;
источник
Я запускаю это, когда пытаюсь добавить привилегии для performance_schema, что является ошибкой mysql http://bugs.mysql.com/bug.php?id=44898 (обходной путь для добавления --single -action).
источник
У меня была та же самая проблема, и мне потребовалось много времени для чтения сообщений SO и документации Google. Я наконец нашел это из облаке SQL FAQ :
источник
Для тех, кто все еще сталкивается с этим, как я, стоит проверить, что попытка
GRANT
не существует:В моем случае ошибка была не на самом деле, потому что была ошибка разрешения, а потому, что
GRANT
уже существовала.источник
Одно простое решение, которое всегда работает для меня, когда я сталкиваюсь с ошибками mysql "access denied": использование
sudo
.Тогда для
GRANT
команд существуют необходимые разрешения .источник