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