2010-07-27 3 views
1

다음과 같은 기능이 있습니다. 나는 웹 서버에 그것을 만들려고 할 때, 그것은 당신이 사용 SUPER 권한 및 바이너리 로깅이없는공유 웹 서버에서 MySQL CREATE FUNCTION이 실패합니다.

실패

(당신은 변수 덜 안전이 log_bin_trust_function_creators을 사용할 수 있습니다 )

나는 다른 웹 호스팅 (및 똑같은 기능)과 같은 문제를 한번도 경험하지 못했지만 어떻게 해결할 수 있습니까? (나는 MySQL 설정을 변경할 수 없다).

CREATE FUNCTION `has_action_access`(in_role VARCHAR(255), in_request VARCHAR(255), in_action VARCHAR(255)) RETURNS tinyint(1) 
    READS SQL DATA 
    DETERMINISTIC 
BEGIN 

    DECLARE current_role VARCHAR(255); 
    DECLARE found, cont TINYINT(1) DEFAULT 0; 
    SET current_role = in_role; 

    findattempt: REPEAT 
     SELECT COUNT(*) FROM cyp_action_access WHERE request = in_request AND action = in_action AND role = current_role INTO found; 

     IF found = 0 THEN 
      SELECT COUNT(*) FROM cyp_roles WHERE name = current_role INTO cont; 
      IF cont = 1 THEN 
       SELECT inherits FROM cyp_roles WHERE name = current_role INTO current_role; 
       END IF; 
      END IF; 
    UNTIL (cont = 0 OR found > 0) END REPEAT; 
    RETURN found; 
END; 
  • MySQL 서버의 버전은 5.0.90-log입니다.

답변

2

사용자에게 최고 권한이 없습니다. 웹 호스팅 제공 업체에 연락하여 업데이트해야합니다. 그들이 그 옵션을 부여하지 않으면 스크립트를 실행하도록 요청하십시오.

+0

왜 함수를 만들려면 super privilige가 필요합니까? – cypher

+0

+1 : 예, [per documentation] (http://dev.mysql.com/doc/refman/5.1/en/stored-programs-logging.html) - 1419 참조를 찾고 약간 위로 스크롤하십시오. –

+0

아, 그래, 전에는 못 봤어. 조금도. – cypher