在 MySQL VIEW 上运行 EXPLAIN 时出现权限错误

tca*_*uce 5 mysql database database-permissions

我在 MySQL 5.0 数据库中定义了一个视图:

CREATE OR REPLACE ALGORITHM=MERGE 
DEFINER=db1_user@'%' SQL SECURITY DEFINER 
VIEW db2.data_view AS SELECT * FROM db1.data_table;
Run Code Online (Sandbox Code Playgroud)

这样做是为了让 db2 用户能够访问 db1 中的这个单个表,并且适用于 SELECT 查询:

[db2_user@db2]> select name from data_view limit 1;
+----------------+
| name           |
+----------------+
| slartibartfast |
+----------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试解释相同的查询时,我得到:

[db2_user@db2]> explain select name from data_view limit 1;
ERROR 1345 (HY000): EXPLAIN/SHOW can not be issued; lacking privileges for 
underlying table
Run Code Online (Sandbox Code Playgroud)

我向 db2 用户授予了SHOW VIEW该视图的权限,但对于EXPLAIN.

GRANT SHOW VIEW ON `db2`.`data_view` TO 'db2_user'@'%';
Run Code Online (Sandbox Code Playgroud)

EXPLAIN允许有权访问视图的用户在其上运行需要什么?

小智 4

您正在尝试与show create viewexplain不同的查询。解释查询与选择它相同(从特权的角度来看),因此特权应该足够了select

GRANT select, SHOW VIEW ON `db2`.`data_view` TO 'db2_user'@'%';
explain select name from data_view limit 1;
Run Code Online (Sandbox Code Playgroud)