안녕하세요.
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
'DBMS > MYSQL' 카테고리의 다른 글
[MYSQL] INSERT문 사용법 및 예제 ( 다중 레코드, SELECT문 추가 ) (0) | 2024.07.03 |
---|---|
[MYSQL] 데이터 조회, 삽입, 수정, 삭제(Select, Insert, Update, Delete) (0) | 2024.07.03 |
[MYSQL]SELECT문 WHERE 조건에서 날짜(DATE)를 이용한 검색 사용법 및 예제 (0) | 2024.07.03 |
[MySQL] 데이터베이스 주석(Comment) 사용 방법 (0) | 2024.07.03 |
[MySQL] 데이터베이스 인덱스(INDEX) 확인, 추가(ADD), 삭제(DROP) 사용법 및 예제 (UNIQUE 포함) (0) | 2024.07.03 |
댓글