2013-10-14 3 views
-1

J'ai un ensemble de bases de données sous un utilisateur db unique qui peut faire une déclaration de sélection sur chaque table de toutes les bases de données. Mais maintenant je ne peux pas définir une procédure de magasin qui peut faire une déclaration select sur l'autre table de base de données. Par exemple, je pourrais avoir un utilisateur 'joe' et j'ai quatre bases de données 'joe_database', 'mirko_database', 'carlo_database' et 'william_database'. joe ne possède que joe_database mais il peut choisir parmi les autres.MySql - appel sélectionner sur autre base de données que la procédure de magasin utilisateur

Par exemple Joe peut:

SELECT * FROM mirko_database; 

Mais si Joe définit:

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; 

et Joe fait:

CALL call_select('mirko_database'); 

Il obtient cette erreur:

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

Comment puis-je accorder des privilèges à joe pour lui permettre d'appeler des procédures de stockage sur toutes les bases de données?

Merci

Répondre

0

Joe a besoin du privilège EXECUTE afin d'exécuter des routines stockées.

GRANT EXECUTE ON PROCEDURE *.call_select TO 'joe'@'localhost'; 
Questions connexes