본문 바로가기
DataBase/MySQL 오류해결

MySQL 함수 생성 오류 해결 ERROR 1418 (HY000)

by 코딩이라구 2022. 10. 5.

MySQL 함수(FUNCTION) 생성 오류 해결 방법 ERROR 1418 (HY000)

 

MySQL에서 함수(FUNCTION)를 생성하는 과정에서 오류가 발생하였습니다. 5.7 버전에서는 CREATE FUNCTION Query문을 실행하여 함수가 정상적으로 생성이 되었는데, 8.0 버전대에서는 아래와 같은 오류가 발생하였습니다.

 

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)

 

이번에는 ERROR 1418 오류 해결 방법에 대하여 알아보도록 하겠습니다.

 


1. 원인

MySQL 8.0 버전대에서 SUPER 권한이 없는 사용자에게 발생할 수 있는 문제입니다. 함수 생성 시 제약 처리를 할 수 있으며, 함수를 생성할 수 있는 옵션이 OFF 값이면 함수 생성에 제약이 발생합니다. 이 옵션은 MySQL global variable 중에서 log_bin_trust_function_creators 옵션입니다.

 

ERROR 1418 (HY000) 오류 사항에 대해 구글링 해본 결과 log_bin_trust_function_creators 옵션은 MySQL에서 함수(Function), 트리거(Trigger) 생성에 대한 제약을 강제할 수 있는 기능이며, 해당 옵션의 기본값은 OFF입니다. 이 옵션 값이 OFF 상태인 경우 권한이 있더라도 함수와 트리거를 생성할 수 없습니다.

 

결과적으로 log_bin_trust_function_creators 옵션이 OFF 상태일 경우 root 권한이 없는 사용자가 생성한 함수는 일반 유저가 실행할 수 없습니다.

 


2. 해결 방법

저는 먼저 log_bin_trust_function_creators 옵션 값을 확인하고, 옵션 값이 OFF로 설정되어 있는 경우 ON으로 변경 후 다시 함수 생성을 시도해보니 성공하였습니다. 그리고 안정성을 위하여 옵션 값을 ON에 OFF값으로 변경해두었습니다.

 

log_bin_trust_function_creators 옵션 값 확인 방법

SHOW GLOBAL VARIABLES LIKE 'log_bin_trust_function_creators';

 

log_bin_trust_function_creators 옵션 값 변경 방법

1) OFF > ON으로 변경 (함수 생성 가능)

SET GLOBAL log_bin_trust_function_creators = ON;
-- 또는
SET GLOBAL log_bin_trust_function_creators = 1;

 

2) ON > OFF로 변경 (함수 생성 불가능)

SET GLOBAL log_bin_trust_function_creators = OFF;
-- 또는
SET GLOBAL log_bin_trust_function_creators = 0;

 


3. 참고 자료 링크

 


'DataBase > MySQL 오류해결' 카테고리의 다른 글

MySQL 별칭 오류 해결 SQL ERROR (1248)  (0) 2022.10.06

댓글