Php (显然)很奇怪”;“拒绝访问”;MySQL错误
我刚开始开发一个遗留的PHP应用程序,发现自己正在与一种奇怪的行为作斗争。我将尝试解释场景/代码/错误:Php (显然)很奇怪”;“拒绝访问”;MySQL错误,php,mysql,Php,Mysql,我刚开始开发一个遗留的PHP应用程序,发现自己正在与一种奇怪的行为作斗争。我将尝试解释场景/代码/错误: 所有查询都是通过一个打开的单例类执行的 一个连接,并在整个会话中保持打开状态(直到我 (我能理解代码) 每次mysql\u查询返回false,都会引发异常 许多查询执行得“很好”,甚至抱怨不存在表(我的任务之一是清理凌乱的clipper继承的数据库方案,因此我正在运行代码并根据需要创建表)。创建缺少的表后,查询通常运行良好 一些查询返回1045错误:用户'appuser'@'localhos
mysql\u查询
返回false
,都会引发异常1045
错误:用户'appuser'@'localhost'的访问被拒绝(使用密码:是)
SELECT
查询,但仅此而已。一些有左外
连接,另一些有像24FROM
子句mysql\u stat
结果,它在正常查询和失败查询之前打印服务器状态。尽管如此,我不确定这个函数是否真正依赖于MySQL服务器的有效凭证/会话如果有人需要更多信息/背景,我很乐意提供…:) 更详细地检查有问题的
SELECT
s,我可以在它们之间找到一个公共表。你猜怎么着?实际上,它不是一个表
,而是一个视图
。当我试图使用图形工具(MySQL Workbench)从此视图中选择时,错误是明显的
当开发人员导出数据库(MySQL转储)时,工具只是在每个视图上添加了这样一行代码:
/*!50013 DEFINER=`oldappuser`@`%` SQL SECURITY DEFINER */
我不知道为什么,但确实如此。因为我的本地数据库有不同的用户名/密码/方案,这成了我4小时头痛的根源
为了修复它,我只删除了旧的视图
,并重新创建了它,而没有DEFINER
指令
这个故事的寓意是:在转储数据库时要注意检查的选项,并注意这些安全性
内容,以防在新服务器中更改用户/pass/scheme。这些查询是否有可能尝试访问与join或from子句中正常数据库不同的数据库?