我刚将应用程序移动到复制数据库,对于某些(但不是全部)查询,我收到以下错误消息:
SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user
许多其他查询工作和审核凭据确实是正确的,因为它们适用于大多数查询。
在大多数查询成功的情况下,任何想法可能导致此错误消息?
答案 0 :(得分:10)
答案:
正在查询和失败的“表格”实际上是观点。
视图已使用
创建CREATE DEFINER="user"@"10.10.%.%" SQL SECURITY DEFINER VIEW view_name ...
将应用程序更改为其他复制数据库后,DEFINER在此新数据库中不存在同一主机,用户为“user”@“10.20。%。%”而不是“user”@“10.10。 %。%“
因此定义器在此数据库中不存在,并且因为SQL SECURITY设置为DEFINER,所以无法访问该视图。
在这种情况下,我使用其他用户重新创建了视图,并将安全性设置为
... SQL SECURITY INVOKER ...
在我的db权限方案环境中,调用者将拥有足够的权限,因此现在所有查询都有效。