MySQL查看定义者权限和错误1356

时间:2017-04-08 08:17:49

标签: mysql permissions views

背景

我有一个MySQL表G.devTest,如下所示:

+----+------+
| id | j    |
+----+------+
|  1 |    5 |
|  2 |    9 |
|  3 |    4 |
|  4 |    7 |
+----+------+

以我的用户l登录,我可以根据此表创建并选择一个简单的视图而不会出现任何问题:

> create view devTestV as select * from devTest;
Query OK, 0 rows affected (0.02 sec)
> select * from devTestV;
+----+------+
| id | j    |
...

问题

我想仅根据devTest使用此视图:

> create view devTestV2 as select a.id, a.j, b.avg from devTest a cross 
join (select avg(j) avg from devTest) b;

第一个似乎工作正常,但当我尝试从中选择时,事情就出错了:

> select * from devTestV2;
ERROR 1356 (HY000): View 'G.devTestV2' references invalid table(s) 
or column(s) or function(s) or definer/invoker of view lack rights to use 
them

分析

我们知道devTest存在,其列idj也是如此,因此错误的“定义者/调用者”部分必须是相关的部分。我的用户l,视图的定义者(默认情况下使用定义者的权限)必须缺少一些权限。这个结论得到以下事实的证实:在root用户创建时可以访问相同的视图。

但是,我的用户拥有G数据库中所有对象的所有权限:

> show grants;
...
| GRANT ALL PRIVILEGES ON `G`.* TO 'l'@'%'
...

那么,我的用户缺少什么阻止它从devTestV2中选择?

1 个答案:

答案 0 :(得分:0)

而不是“创建视图...”尝试“创建SQL SECURITY INVOKER视图......” 在我做出这个改变之前,我遇到了同样的问题。