• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 1. 일반적인 보안 문제
    1. 보안 지침
    2. 비밀번호를 안전한 상태로
    3. 공격자에 대한 MySQL의 안전한 상태 유지
    4. 보안 관련 mysqld 옵션 및 변수
    5. MySQL을 일반 사용자로 실행하는 방법
    6. LOAD DATA LOCAL 보안 문제
    7. 클라이언트 프로그램의 보안 지침
    2. MySQL 권한 시스템
    3. MySQL 사용자 계정 관리
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

6.1.3 공격자에 대한 MySQL의 안전한 상태 유지

MySQL 서버에 접속할 때 암호를 사용하도록하십시오. 연결시 암호는 평문으로 전송되지 않습니다. 클라이언트 연결 시퀀스에서 암호 처리는 매우 안전한 상태를 유지하도록 MySQL 4.1.1에서 업그레이드되었습니다. 4.1.1 이전 형식의 패스워드를 아직 사용하고 있다면, 암호화 알고리즘은 새로운 알고리즘만큼 강하지 않습니다. 클라이언트와 서버 사이의 트래픽을 가로 챌 수있는 똑똑한 공격자는 약간의 노력을 걸면 암호를 해독 할 수 있습니다. (다양한 암호 처리 방법에 대한 설명은 섹션 6.1.2.4 "MySQL에서 암호 해시" 를 참조하십시오.)

다른 모든 정보는 텍스트로 전송됩니다 연결을 관찰 할 수있는 모든 사용자가 읽을 수 있습니다. 클라이언트와 서버 사이의 연결이 신뢰할 수없는 네트워크를 통해 이루어지고 그 수에 불안​​이있는 경우 압축 된 프로토콜을 사용하여 트래픽의 해독을 더욱 어렵게 할 수 있습니다. 또한 MySQL 내부 SSL 지원을 사용하여 연결을 더 안전한 상태로 할 수 있습니다. 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오. 또는 SSH를 사용하여 MySQL 서버와 MySQL 클라이언트 사이에 암호화 된 TCP / IP 연결을 제공합니다. 오픈 소스 SSH 클라이언트는 http://www.openssh.org/ 에서 찾을 수 있으며, 오픈 소스와 상용 SSH 클라이언트의 비교는 http://en.wikipedia.org/wiki/Comparison_of_SSH_clients 에 있습니다.

MySQL 시스템을 안전한 상태로하려면 다음 권장 사항을 잘 검토하도록하십시오.

  • 모든 MySQL 계정이 암호를 요구합니다. 클라이언트 프로그램은 그것을 실행하는 사람의 ID를 반드시 인식하고있는 것은 아닙니다. 클라이언트 / 서버 응용 프로그램은 사용자가 클라이언트 프로그램에 임의의 사용자 이름을 지정할 수있는 것이 일반적입니다. 예를 들어, other_user 에 암호가없는 경우, mysql 프로그램을 mysql -u other_user db_name 으로 호출하여 모든 사용자가이 프로그램을 사용하여 다른 사용자와 연결할 수 있습니다. 모든 계정에 암호가있는 경우 다른 사용자 계정을 사용하여 연결은 더 어려워집니다.

    암호 설정 방법에 대한 설명은 섹션 6.3.5 "계정 암호 할당" 을 참조하십시오.

  • 데이터베이스 디렉토리의 읽기 및 쓰기 권한을 가진 Unix 사용자 계정 만 mysqld 실행에 사용되는 계정에있게하십시오.

  • MySQL 서버를 유닉스 root 사용자로 절대로 실행하지 마십시오. 이렇게하면 FILE 권한을 가진 모든 사용자가 root 로 서버에 파일을 생성시킬 수 있기 때문에 ( ~root/.bashrc 등) 매우 위험합니다. 이를 방지하기 위해 mysqld는 --user=root 옵션을 사용하여 명시 적으로 지정된 경우를 제외하고 root 로 실행하는 것을 거부합니다.

    mysqld는 권한이없는 일반 사용자로 실행할 수 있습니다 (또한 그렇게 실행해야합니다). mysql 이라는 다른 Unix 계정을 만들어 모두 더 안전한 상태로 할 수 있습니다. 이 계정은 MySQL의 관리에만 사용하십시오. mysqld를 다른 Unix 사용자로 시작하려면 서버 옵션을 지정한 my.cnf 옵션 파일의 [mysqld] 그룹에서 사용자 이름을 지정하는 user 옵션을 추가합니다. 예 :

     [mysqld]
     user = mysql
    

    이렇게하면 서버를 수동으로 시작하는 경우도 mysqld_safe 또는 mysql.server를 사용하여 부팅 한 경우에도 지정된 사용자로 서버를 시작합니다. 자세한 내용은 섹션 6.1.5 "MySQL을 일반 사용자로 실행하는 방법" 을 참조하십시오.

    root 이외의 Unix 사용자로 mysqld를 실행해도 user 테이블에서 root 사용자 이름을 변경할 필요가 있다는 것을 의미하는 것은 아닙니다. MySQL 계정의 사용자 이름은 Unix 계정의 사용자 이름과는 아무 상관도 없습니다.

  • 관리자가 아닌 사용자에 FILE 권한을 부여하지 마십시오. 이 권한을 가진 모든 사용자는 mysqld 데몬의 권한으로 파일 시스템의 모든 위치에서 파일에 쓸 수 있습니다. 이것은 권한 테이블을 구현하는 파일을 저장하는 서버의 데이터 디렉토리를 포함합니다. FILE 권한의 작업을 좀 더 안전하게하기 위해 SELECT ... INTO OUTFILE 로 생성 된 파일은 기존 파일을 덮어 쓰지 않고 모든 사용자가 쓸 수있게합니다.

    FILE 권한은 모든 사용자가 읽기 가능한지 서버를 실행하는 Unix 사용자가 액세스 할 수있는 모든 파일을 읽는 경우에도 사용할 수 있습니다. 이 권한을 사용하여 모든 파일을 데이터베이스 테이블에 읽을 수 있습니다. 이것은 부정 사용 될 수 있으며, 예를 들어 LOAD DATA 를 사용하여 /etc/passwd 를 테이블에로드하고 SELECT 를 사용하여이를 표시 할 수 있습니다.

    파일을 읽고 쓸 수있는 장소를 제한하려면 secure_file_priv 시스템을 특정 디렉토리로 설정합니다. 섹션 5.1 "서버 시스템 변수" 를 참조하십시오.

  • 관리자가 아닌 사용자에게 PROCESS 또는 SUPER 권한을 부여하지 마십시오. mysqladmin processlist와 SHOW PROCESSLIST 의 출력은 현재 실행되고있는 모든 문 텍스트가 표시되므로 서버 프로세스 목록을 표시 할 수있는 모든 사용자가 다른 사용자에 의해 발행 된 UPDATE user SET password=PASSWORD('not_secure') 등의 문을 표시 할 수 있습니다.

    mysqld는 SUPER 권한을 가진 사용자를 위해 특별히 연결을 보장하고 있기 때문에 정상적인 연결이 사용중인 경우에도 MySQL root 사용자는 로그인 서버의 활동을 검사 할 수 있습니다.

    SUPER 권한은 클라이언트 접속을 종료하거나 시스템 변수의 값을 변경하여 서버 작업을 변경하거나 복제 서버를 제어 할 데 사용할 수 있습니다.

  • 테이블에 대한 심볼릭 링크를 허용하지 마십시오. (이 기능은 --skip-symbolic-links 옵션에서 비활성화 할 수 있습니다.) 이것은 mysqld를 root 로 실행하는 경우에 특히 중요합니다. 이것은 서버의 데이터 디렉토리에 대한 쓰기 액세스 권한이있는 모든 사용자는 시스템의 모든 파일을 삭제 할 수있게되기 때문입니다. 섹션 8.11.3.1.2 "Unix 기반 MyISAM에 대한 심볼릭 링크 사용" 을 참조하십시오.

  • 저장 프로그램 및보기는 섹션 20.6 "저장 프로그램 및 뷰의 액세스 제어" 에 기재되어있는 보안 지침을 사용하여 설명하도록하십시오.

  • DNS를 신뢰하지 않는 경우, 부여 테이블에서 호스트 이름 대신 IP 주소를 사용하도록하십시오. 두 경우 모두 와일드 카드를 포함한 호스트 이름 값을 사용하여 부여 테이블 항목을 작성하는 것에 대해서는 충분히주의하도록하십시오.

  • 단일 계정에 허용되는 연결 수를 제한하려면 mysqld의 max_user_connections 변수를 설정하여이를 수행 할 수 있습니다. GRANT 문은 계정에 허용되는 서버 사용의 범위를 제한하는 자원 제어 옵션을 지원합니다. 섹션 13.7.1.4 "GRANT 구문" 을 참조하십시오.

  • 플러그인 디렉토리 서버가 쓰기 가능한 경우 사용자는 SELECT ... INTO DUMPFILE 를 사용하여 디렉토리의 파일에 실행 코드를 작성할 수 있습니다. 이를 방지하기 위해 plugin_dir 을 서버에 읽기 전용으로하거나 SELECT 쓰기가 안전하게 실행할 수있는 디렉토리에 --secure-file-priv 를 설정할 수 있습니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved