mysql忘记登录的用户:命令被拒绝用户''@'%'

时间:2011-06-29 21:40:56

标签: 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 php@localhost                                                                                            |
+---------------------------------------------------------------------------------------------------------------------+
| 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>

更新...根据Tomalak的建议,我删除了用户并使用更全面的权限和无密码重新创建。问题仍然存在。现在它看起来像这样:

mysql> show grants;
+--------------------------------------------------+
| Grants for php@localhost                         |
+--------------------------------------------------+
| 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> 

3 个答案:

答案 0 :(得分:22)

问题可能是您的数据库中有VIEWS。视图可能是以特定权限创建的。

正如您可以通过错误消息告诉它,它会抱怨不同的用户而不是您登录的用户。这是因为对于视图,您可以指定如何确定视图查看数据的权限。

当您转到数据库时,请尝试输入:

SHOW FULL TABLES IN sunflower_work WHERE TABLE_TYPE NOT LIKE '%table%';

然后,您可能希望查看那里特定视图的权利。

答案 1 :(得分:5)

这里的答案帮助我解决了我的具体问题。非常感谢!一个观点是如上所述的罪魁祸首。

我遇到了麻烦,因为有问题的数据库是从具有不同用户的远程数据库的备份创建的。 '破碎'视图被定义为'用户我没有在本地。甚至root也无法运行崩溃的查询。

更改了视图' DEFINER'一个有效的本地用户,问题解决了!

ALTER 
DEFINER = 'a_valid_user'@'localhost' 
VIEW my_view
AS 
SELECT ..... 

Check out ALTER VIEW documentation for MySQL 5.5

再次感谢!

答案 2 :(得分:1)

在继续之前进行模式备份。

如果您只是在mysql中导入了转储文件,请删除该导入和相关架构,然后重新开始。

在文本编辑器中打开转储文件,并删除具有以下内容的所有行 / *! ~~~~ DEFINER ='root'@'%'SQL安全定义* /

〜代表工作台在导出过程中生成的随机数

此解决方案是一种快速修复,仅适用于开发环境。