2013-10-14 2 views
-1

모든 데이터베이스의 모든 테이블에서 select 문을 수행 할 수있는 고유 한 db 사용자로 데이터베이스 집합이 있습니다. 하지만 이제 다른 데이터베이스 테이블보다 select 문을 수행 할 수있는 저장 프로 시저를 정의 할 수 없습니다. 예를 들어 'joe'사용자가있을 수 있으며 'joe_database', 'mirko_database', 'carlo_database'및 'william_database'데이터베이스가 있습니다. joe는 joe_database 만 소유하고 있지만 다른 사람들보다 선택할 수 있습니다. 인스턴스 조를 들어MySql - 저장 프로 시저 사용자가 아닌 다른 데이터베이스에 대한 호출

할 수 있습니다

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; 

을 조 수행합니다

SELECT command denied to user 'joe'@'localhost' for table 'any_table' 
: 그는이 오류를 얻을 수

CALL call_select('mirko_database'); 

0

joe가 모든 데이터베이스에서 저장 프로 시저를 호출 할 수 있도록 권한을 부여하려면 어떻게해야합니까?

감사

답변

0

조 저장 루틴을 실행하기 위해 EXECUTE 권한이 필요합니다.

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