본문으로 바로가기

MySQL DB가 설치된 서버가 재기동 되는 바람에 자연스럽게 MySQL 컨테이너도 재기동되었다.

이 후 어플리케이션에서 다른 쿼리들의 실행에는 문제가 없으나, function이 실행이 안되는 에러가 발생했다.



현상


This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)


위와 같은 에러와 함께 function을 포함한 쿼리의 실행이 되지 않는 현상이다.



원인


구글링 해보니 MySQL 특정 버전대에서 Super 권한이 없는 user에게서 발생할 수 있는 문제이다.

원인은 mysql global variable 중  log_bin_trust_function_creators 옵션이었다.



설명 


 log_bin_trust_function_creators 옵션은 MySQL이 function, trigger 생성에 대한 제약을 강제할 수 있는 기능이다.

해당 옵션의 default는 OFF이며, OFF상태의 경우 권한이 있더라도 trigger를 생성할 수 없고, function을 생성할 수 없다.

결론적으로 해당 옵션이 OFF 상태일 경우, root 권한이 없는 user가 생성한 function을 일반 user가 실행할 수 없게된다.



해결방법 


1. 안정성 검증이 완료된 function을 super유저가 다시 생성하던가 

2. log_bin_trust_function_creators 옵션을 ON 시키는 방법으로 해결한다.

 확인 ) show global variables like 'log_bin_trust_function_creators';

 조회결과 OFF일 경우 SET GLOBAL  log_bin_trust_function_creators=ON;




 Other Contents 

댓글을 달아 주세요

티스토리 툴바