-1

我在一个唯一的 db 用户下有一组数据库,可以对所有数据库的每个表执行 select 语句。但是现在我无法定义一个可以对其他数据库表执行选择语句的存储过程。例如,我可以有一个“joe”用户,并且我有四个数据库“joe_database”、“mirko_database”、“carlo_database”和“william_database”。joe 只拥有 joe_database 但他可以选择其他人。

例如,乔可以:

SELECT * FROM mirko_database;

但如果乔定义:

CREATE PROCEDURE call_select(IN db_name VARCHAR(50))
BEGIN
    SET @query_base = 'SELECT * FROM $_database_$.any_table;'
    SET @query_base = REPLACE(@query_base, '$_database_$', db_name);

    PREPARE _lquery FROM @query_base;
    EXECUTE _lquery;
    DEALLOCATE PREPARE _lquery;
END;

乔确实:

CALL call_select('mirko_database');

他得到这个错误:

SELECT command denied to user 'joe'@'localhost' for table 'any_table'

如何授予 joe 权限以使其能够在所有数据库上调用存储过程?

谢谢

4

1 回答 1

0

Joe 需要EXECUTE特权才能执行存储的例程。

GRANT EXECUTE ON PROCEDURE *.call_select TO 'joe'@'localhost';
于 2014-01-04T21:36:06.917 回答