Mysql забывает, кто вошел в систему: команда запрещена пользователю '' @'%'
Запуск show grants;
означает, что я зарегистрирован как пользователь со всеми привилегиями в базе данных.
Запуск show table status;
приводит к ошибке. И ошибка не показывает имя пользователя, в котором я зарегистрирован как!
Как будто для этой команды mysql забывает, кто я. Другие операции выбора отлично работают. Может кто-нибудь объяснить это? Как исправить? Спасибо.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.13-log Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show grants;
+---------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+---------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'php'@'localhost' IDENTIFIED BY PASSWORD '*8F5FF90079BC601F8EA7C148475658E65A0C029D' |
| GRANT ALL PRIVILEGES ON `sunflower_work`.* TO 'php'@'localhost' |
| GRANT ALL PRIVILEGES ON `news_demo`.* TO 'php'@'localhost' |
| GRANT ALL PRIVILEGES ON `news_base`.* TO 'php'@'localhost' |
+---------------------------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)
mysql> show table status from sunflower_work;
ERROR 1143 (42000): SELECT command denied to user ''@'%' for column 'uid' in table 'users'
mysql>
update... как было предложено Tomalak, я удалил пользователя и воссоздал его с полными привилегиями и без пароля. Тем не менее проблема сохраняется. Теперь это выглядит так:
mysql> show grants;
+--------------------------------------------------+
| Grants for [email protected] |
+--------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'php'@'localhost' |
+--------------------------------------------------+
1 row in set (0.00 sec)
mysql> show table status;
ERROR 1143 (42000): SELECT command denied to user ''@'%' for column 'uid' in table 'users'
mysql>
Ответы
Ответ 1
Вероятно, проблема связана с наличием VIEWS в вашей базе данных. Мнения, вероятно, создаются с определенными правами.
Как вы можете сказать по вашему сообщению об ошибке, он жалуется на другого пользователя, кроме того, с которым вы вошли в систему. Это связано с тем, что для представления вы можете указать, как определить, какие права вид должен смотреть на данные.
Когда вы перейдете в свою базу данных, попробуйте ввести:
SHOW FULL TABLES IN sunflower_work WHERE TABLE_TYPE NOT LIKE '%table%';
Затем вы можете посмотреть права на определенные виды, которые есть.
Ответ 2
Ответы здесь помогли мне с моей конкретной проблемой. Большое спасибо! Вид был виновником, как описано выше.
Я попал в беду, потому что рассматриваемая база данных была создана из резервной копии удаленной базы данных, в которой были разные пользователи. "Прерванное" представление было "определено" пользователем, которого у меня не было локально. Даже root не смог выполнить аварийный запрос.
Изменил представление "DEFINER" на действительного локального пользователя, и проблема была решена!
ALTER
DEFINER = 'a_valid_user'@'localhost'
VIEW my_view
AS
SELECT .....
Ознакомьтесь с документацией по ALTER VIEW для MySQL 5.5.
Большое спасибо еще раз!
Ответ 3
Сделайте резервную копию схемы, прежде чем продолжить.
Если вы только что импортировали файл дампа в MySQL, удалите этот импорт и связанную схему и начните снова.
откройте файл дампа в текстовом редакторе и удалите все строки со следующим содержимым /*! ~~~~ DEFINER = 'root' @'%' SQL SEFURITY DEFINER */
~ Представляет случайное число, сгенерированное верстаком во время экспорта
Это решение является быстрым решением и предназначено только для сред разработки.