MySQL查看定义者权限和错误1356
Posted
技术标签:
【中文标题】MySQL查看定义者权限和错误1356【英文标题】:MySQL view definer permissions and error 1356 【发布时间】:2017-09-03 15:28:01 【问题描述】:背景
我有一个 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
中进行选择?
【问题讨论】:
你有没有弄清楚这里发生了什么? @Barmar 不!我求助于以 root 用户身份创建视图来避免这种情况。有什么想法吗? 【参考方案1】:代替“创建视图...”尝试“创建 SQL SECURITY INVOKER 视图...” 在进行此更改之前,我遇到了同样的问题。
【讨论】:
以上是关于MySQL查看定义者权限和错误1356的主要内容,如果未能解决你的问题,请参考以下文章