6.1.6 LOAD DATA LOCAL 보안 문제
LOAD DATA
명령문은 서버 호스트에 배치되어있는 파일을로드하거나 LOCAL
키워드가 지정된 경우, 클라이언트 호스트에 배치되어있는 파일을로드 할 수 있습니다.
LOAD DATA
문 LOCAL
버전 지원 정보는 보안에 대한 잠재적 인 문제가 2 개 있습니다.
클라이언트 호스트에서 서버 호스트로 파일 전송은 MySQL 서버가 시작됩니다. 이론적으로는 패치 된 서버를 구축하여
LOAD DATA
문에서 클라이언트에 의해 지정된 파일이 아닌 서버 선택 파일을 전송하도록 서버가 클라이언트 프로그램에 지시하도록 할 수 있습니다 . 그러한 서버는 클라이언트 사용자가 읽기 권한을 가진 클라이언트 호스트의 모든 파일에 액세스 할 수 있습니다.클라이언트가 Web 서버로부터 접속하는 Web 환경에서 사용자는
LOAD DATA LOCAL
을 사용하여 Web 서버 프로세스가 읽기 권한을 가진 모든 파일을 읽을 수 있습니다 (사용자가 SQL Server에 대한 모든 명령을 실행할 수있는 경우). 이 환경에서 MySQL 서버를 기준으로했을 때 클라이언트는 실제로는 Web 서버로서, Web 서버에 연결하는 사용자에 의해 실행되는 원격 프로그램은 없습니다.
이러한 문제를 해결하기 위해 MySQL 3.23.49 및 MySQL 4.0.2 (Windows에서는 4.0.13) 이후에 LOAD DATA LOCAL
처리 방법이 변경되었습니다.
기본적으로 바이너리 배포판에있는 모든 MySQL 클라이언트와 라이브러리는
-DENABLED_LOCAL_INFILE=1
옵션으로 컴파일되어 MySQL 3.23.48 이전과의 호환성을 유지하고 있습니다.MySQL을 소스에서 빌드했지만
-DENABLED_LOCAL_INFILE=1
옵션을 지정하여 CMake를 호출하지 않는 경우,LOAD DATA LOCAL
은mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0)
을 호출하도록 명시 적으로 기술 된 경우를 제외하고 어느 클라이언트에서 사용할 수 없습니다. 섹션 23.8.7.49 "mysql_options ()" 를 참조하십시오.--local-infile=0
옵션을 지정해 mysqld를 시작함으로써 서버 측에서 모든LOAD DATA LOCAL
문을 해제 할 수 있습니다.mysql 명령 행 클라이언트의 경우,
--local-infile[=1]
옵션을 지정하여LOAD DATA LOCAL
을 활성화하거나--local-infile=0
옵션을 지정하여 이것을 무효로합니다. mysqlimport의 경우 로컬 데이터 파일의로드는 기본적으로 꺼져 있으며,--local
또는-L
옵션을 사용하여이를 활성화합니다. 어떤 경우에도 로컬로드 조작을 제대로 사용하려면 서버가이 조작을 허가하고있는 것이 필요.옵션 파일에서
[client]
그룹을 읽을 수있는 Perl 스크립트 또는 다른 프로그램에서LOAD DATA LOCAL
을 사용하는 경우,local-infile=1
옵션을 그 그룹에 추가 할 수 있습니다. 그러나local-infile
을 인식하지 못하는 프로그램에서 문제가 발생하지 않도록하기 위해loose-
프리픽스를 사용하여이를 지정합니다.[client] loose-local-infile = 1
서버 또는 클라이언트 중 하나에서
LOAD DATA LOCAL
가 무효 인 경우, 그런 문을 발행하고자하는 클라이언트는 다음과 같은 오류 메시지가 나타납니다.ERROR 1148 : The used command is not allowed with this MySQL version