我有一个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
存在,其列id
和j
也是如此,因此错误的“定义者/调用者”部分必须是相关的部分。我的用户l
,视图的定义者(默认情况下使用定义者的权限)必须缺少一些权限。这个结论得到以下事实的证实:在root用户创建时可以访问相同的视图。
但是,我的用户拥有G
数据库中所有对象的所有权限:
> show grants;
...
| GRANT ALL PRIVILEGES ON `G`.* TO 'l'@'%'
...
那么,我的用户缺少什么阻止它从devTestV2
中选择?
答案 0 :(得分:0)
而不是“创建视图...”尝试“创建SQL SECURITY INVOKER视图......” 在我做出这个改变之前,我遇到了同样的问题。