1.언제 어떻게 오류가?
mySQL에서 new functions, 새로운 함수를 만드려는데 아래와같은 오류가 발생했다.
DELIMITER ; ERROR 1418: 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
2.해결방법
show global variables like 'log_bin_trust_function_creators';
- off인지 on인지 확인하는 방법.
SET GlOBAL log_bin_trust_function_creators = 1;
-on으로 변경.
ctrl + enter 후 다시 확인 해보면.
on으로 변경되어있다.
이제 다시 new functions를 해보면! 정상적으로 된다!
의도했던 함수도 잘 적용!
3.원인
3.1 인간의 설명
: log_bin_trust_function_creators 옵션은 MySQL이 function, trigger 생성에 대한 제약을 강제할 수 있는 기능.
mySQL '특정 버전에서' 해당 옵션의 default는 OFF인데,
OFF상태의 경우 권한이 있더라도 functions, 함수를 생성할 수 없고 SUPER 권한이 있는 사용자만 함수를 생성 및 변경할 수 있다.
따라서 On을 해주면 해결된다.
3.2 gpt의 설명 (요약)
-함수를 생성할 때는 함수의 특성을 명시해야 하는데, 이 중에서 DETERMINISTIC, NO SQL, 또는 READS SQL DATA 중 어떤 것도 선언에 포함되지 않았기 때문에 오류가 발생.
-MySQL은 함수의 실행 방식을 판단할 수 없어서 보안상의 이유로 해당 함수의 생성을 막는 것.
-log_bin_trust_function_creators는 MySQL 설정 중 하나로, 바이너리 로깅( MySQL 서버에서 변경된 데이터베이스 내용을 기록하는 메커니즘입니다)과 관련된 옵션.
-log_bin_trust_function_creators = 0: (기본값) 이 설정을 사용하면 MySQL에서 DETERMINISTIC, NO SQL, 또는 READS SQL DATA 선언 없이 함수를 생성할 수 없다. 이렇게 설정되어 있을 때, 보안상의 이유로 해당 함수의 생성이 제한.
-위 값을 1로 바꾸면 새로 등록한 함수가 바이너리 로그에 기록되기 때문에, 보안 측면에서 주의가 필요. 따라서 먼저 함수에 DETERMINISTIC, NO SQL, 또는 READS SQL DATA와 같은 옵션을 추가하는걸 권장한다고 한다.
'Back-End > DB' 카테고리의 다른 글
ERD 작성법 : 기호(사상수,참여도)와 선(식별/비식별)의 의미 정리 (ERD Cloud / IE표기법 기준) (0) | 2023.12.13 |
---|---|
RDBMS, mySQL 기초, 기초 쿼리 (Select, Insert, Create, update, delete) (0) | 2023.07.21 |
mySQl 다운로드 / 설치방법 (간단) (0) | 2023.07.19 |