【问题标题】:Permissions error running EXPLAIN on MySQL VIEW在 MySQL VIEW 上运行 EXPLAIN 的权限错误
【发布时间】:2014-12-25 12:02:16
【问题描述】:

我在 MySQL 5.0 数据库中定义了一个view

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 用户授予了视图的 SHOW VIEW 权限,但对于 EXPLAIN,我得到了同样的错误。

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

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

【问题讨论】:

    标签: mysql database database-permissions


    【解决方案1】:

    您正在尝试explainshow create view 不同的查询。解释查询与选择查询相同(从特权的角度来看),因此 select privilege 就足够了

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

    【讨论】:

    • 感谢您的回复。不幸的是,它并没有解决问题——我看到了同样的错误。
    • 恐怕在 mysql 中没有“解释”查询的特定授权选项。那么即使您将所有选项都授予用户,您是否也会收到该错误?
    【解决方案2】:

    请注意,这里的行为似乎在 MySQL 5.0 和 5.5 之间发生了变化,如MySQL bug 64198 中所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2021-04-30
      • 2021-02-19
      • 2017-04-17
      相关资源
      最近更新 更多