2013-04-20 2 views
4

MySQL을 사용하여 저장된 함수를 사용하고 있습니다. 문제가 있습니다.MySQL 저장 프로 시저를 실행할 수 없습니다.

기능을 만들고 테스트 한 결과, 다른 사용자가 실행할 수있는 것처럼 보이지 않습니다. 설명서에서 EXECUTE 액세스 권한을 다른 사용자에게 부여해야하지만 충분하지 않은 것으로 보입니다. 내가 함께 내가 문제를 보여 믿는 스크립트의 몇 가지를 넣었습니다

:

# This script creates two databases with a stored function in each. 
# 
# On one database, tester in granted all privileges. 
# On the other, tester only gets a few. 
# 
# We want to find the minimum privileges required to allow tester to execute the 
# stored function. 
# 
# This script must be run by an administrative user, i.e. root 

CREATE DATABASE test1; 

DELIMITER $$ 
CREATE FUNCTION test1.foo() RETURNS VARCHAR(255) DETERMINISTIC 
BEGIN 
    RETURN ('garp'); 
END$$ 

DELIMITER ; 
GRANT ALL PRIVILEGES ON test1.* TO 'tester'@'localhost'; 

# 

CREATE DATABASE test2; 
DELIMITER $$ 
CREATE FUNCTION test2.foo() RETURNS VARCHAR(255) DETERMINISTIC 
BEGIN 
    RETURN ('garp'); 
END$$ 

DELIMITER ; 

GRANT EXECUTE ON PROCEDURE test2.foo TO 'tester'@'localhost'; 

# This script tests whether tester can access the stored functions 
# 
# It should be executed by tester 

SELECT 'test1.foo(): ', test1.foo(); 
SELECT 'test2.foo(): ', test2.foo(); 

내가 두 번째 스크립트를 실행 실행

, 오류가 발생합니다 :

$ mysql --user=tester --password=tester --skip-column-names < testScript2.sql 
test1.foo(): garp 
ERROR 1370 (42000) at line 6: execute command denied to user 'tester'@'localhost' for routine 'test2.foo' 

나는 명백한 것을 놓치고 있다는 것에 의심의 여지가 없지만, 나는 그것이 무엇인지 알 수 없다. 첫 번째 스크립트에서 GRANT EXECUTE... 문에 잘못된 내용이 있고 작은 따옴표 사용에 대해 깊은 의심을 품고있는 것으로 상상합니다.하지만 배치와 배율 결합의 대부분을 성공없이 시도한 것을 상기합니다.

나는 내 실수를 지적 할 수있는 사람이라면 정말 고맙겠습니다.

참고로 나는 우분투에서 Server version: 5.1.67-0ubuntu0.10.04.1 (Ubuntu)을 실행 중입니다.

감사합니다.

답변

4

test2.foo는 프로 시저가 아닌 함수입니다.

시도 :


GRANT EXECUTE ON FUNCTION test2.foo TO 'tester'@'localhost'; 
(나는 로컬 문제를 재현하고 이러한 변경 작업을 확인 할 수 있었다.)

+0

감사 숀. 나는 눈이 깜박 거리는 뭔가를 놓친다는 것을 알았다. – nurdglaw