본문 바로가기
DBMS/MYSQL

[MySQL] function 생성 시 관련 오류(log_bin_trust_function_creators)

by 각종정보라구 2024. 7. 3.

안녕하세요.

MySQL 5.7 버전에서 8.0 버전을 새로 설치 후 Database 및 Table를 정상적으로 추가를 하였습니다.

하지만 function을 추가할 때 발생한 오류가 있어서 공유해드리려고 합니다.

 

MySQL 5.7 버전에서는 정상적으로 추가되는 것을 확인하였고, 8.0 버전에서 다시 시도해보았지만 같은 현상이 확인되었습니다.


MySQL function 생성 관련 오류(log_bin_trust_function_creators)

 

1. 오류사항

ERROR 1418 (HY000): 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 생성 Query문을 실행 시 위와 같은 오류가 발생하였습니다.

 

2. 원인

MySQL 8.0 버전대에서 Super 권한이 없는 user에게 발생할 수 있는 문제이다.
함수 생성 시 생성 제약처리를 할 수 있었고, 생성할 수 있는 부분이 OFF 값으로 되어있는걸 볼 수 있었다.
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가 실행할 수 없게된다.

 

3. 해결방법

저는 log_bin_trust_function_creators 옵션값을 확인하고, 그 값이 OFF로 되어 있어서 ON으로 변경한 후 function 생성을 시도해보니 성공하였습니다. 그리고 안정성을 위하여 다시 옵션값은 OFF로 바꾸어 주었습니다.

-- 옵션값 확인 방법
show global variables like 'log_bin_trust_function_creators';

-- 옵션값 변경 방법 ( ON , OFF를 명시하여 변경하여주면 된다. )
-- OFF > ON으로 변경 시 (함수 생성 가능)
SET GLOBAL log_bin_trust_function_creators = ON;
-- ON > OFF로 변경 시
SET GLOBAL log_bin_trust_function_creators = OFF;

 

 

 

 

 

참조한 문서 1 : https://www.leafcats.com/271

참조한 문서 2 : https://myhappyman.tistory.com/154

댓글