MySql:某些查询产生:SQLSTATE [28000]:无效的授权规范:1045用户拒绝访问

Jef*_*rds 5 mysql

我刚刚将应用程序移动到复制数据库,对于某些但不是所有查询,我收到以下错误消息:

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权限方案环境中,调用者将拥有足够的权限,所以现在所有查询都有效.