2022.04.06 - [MySQL] ERROR 2068 (HY000) : LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. 글에서 구글링을 통해 조치한 내용과 공식 문서에서 안내한 내용이 조금 달랐다. 차이점은 다음과 같다.
구글링 | 공식문서 | |
Group | mysql, mysqld | client |
Variables name | local-infile | loose-local-infile |
이전 글에서는 운영 서버에 조치하느라 테스트하지 못했기 때문에, 이 글에서 공식 문서대로 조치했을 때도 mysql-client가 local-infile을 활성화하는지 확인해보려고 한다.
테스트한 서버 OS와 MySQL 클라이언트 버전은 아래와 같다.
- OS : Amazon Linux 2 (CentOS와 유사함)
- MySQL client : Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
MySQL 서버 측에서의 local_infile 활성화 여부는 고려하지 않기로 한다.
MySQL 클라이언트 옵션 파일/그룹 확인
mysql --help
서버에서 설치된 mysql-cli가 사용하는 옵션 파일과 그룹은 다음과 같다.
- 옵션 파일 : /etc/mysql/my.cnf, /etc/my.cnf, ~/.my.cnf
- 그룹 : mysql, client, client-server, client-mariadb
이 서버에서는 /etc/mysql/my.cnf 파일이 존재하지 않아, /etc/my.cnf에 조치하고자 한다. 아마 해당 파일이 없으면 생성하면 될 것 같긴 하다.
MySQL 클라이언트 local-infile 활성화 여부
비활성화되어 있는 것을 확인할 수 있다.
/etc/my.cnf 수정
/etc/my.cnf 파일 수정에는 sudo 권한이 필요하다.
사진에 표시한 것처럼 내용을 추가한 뒤 저장한다. 설정 파일 내에 client 그룹이 이미 명시되어 있었다면 그 아래에 Variables 이름과 값만 추가한다. loose- 접두사는 local-infile 옵션을 인식하지 못하는 프로그램의 문제를 방지하기 위함이다.
참고로 local-infile의 경우 값은 생략해도 된다.
MySQL 클라이언트 local-infile 활성화 여부 재확인
이상 없이 활성화된 상태를 확인할 수 있다.
참고 ) Group과 Variables에 따른 local-infile 활성화 여부
Variables \ Group | mysql | mysqld | client |
local-infile | O | X | O |
local_infile | O | X | O |
loose-local-infile | O | X | O |
loose_local_infile | O | X | O |
MySQL 클라이언트는 설정 파일의 -, _ 를 구분하지 않는 것으로 보인다.
참고 문서
https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html