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

标签 mysql database database-permissions

我有一个 view在 MySQL 5.0 数据库中定义为:

CREATE OR REPLACE ALGORITHM=MERGE 
DEFINER=db1_user@'%' SQL SECURITY DEFINER 
VIEW db2.data_view AS SELECT * FROM db1.data_table;

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

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

但是,当我尝试解释同一个查询时,我得到:

[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

我为 db2 用户授予了 View 的 SHOW VIEW 权限,但是对于 EXPLAIN 我得到了同样的错误。

GRANT SHOW VIEW ON `db2`.`data_view` TO 'db2_user'@'%';

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

最佳答案

您正在尝试解释 不同于show create view 的查询.解释一个查询与选择它是一样的(从特权的角度来看),因此 select privilege足够了

GRANT select, SHOW VIEW ON `db2`.`data_view` TO 'db2_user'@'%';
explain select name from data_view limit 1;

关于mysql - 在 MySQL VIEW 上运行 EXPLAIN 时出现权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636182/

相关文章:

sql - 将文件插入 Postgres 数据库

sql-server-2008 - 在 SQL Server 2008 中找不到对称 key

sql - 中止 MySQL 脚本执行的方法(可能引发错误)?

php - 向mysql数据库插入多行

SQL 子查询 - 您执行 SELECT 语句的顺序是什么?

database - 在产品表的人工主键和自然键之间做出决定

sql-server - 如何为不同数据库中的登录名授予访问 SQL Server 数据库邮件程序的权限?

database - 限制用户只能访问 Oracle SQL Developer 中自己的表

mysql - 如何在 DQL(DOCTRINE) 中为 select inside select 编写内部连接查询

php - Mysql SET 和用 PHP 查询子集