运行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>
答案 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安全定义* /
〜代表工作台在导出过程中生成的随机数
此解决方案是一种快速修复,仅适用于开发环境。