• 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. 일반적인 보안 문제
    2. MySQL 권한 시스템
    3. MySQL 사용자 계정 관리
    1. 사용자 이름과 암호
    2. 사용자 계정 추가
    3. 사용자 계정 삭제
    4. 계정 자원 제한 설정
    5. 계정 암호 지정
    6. 암호 만료 및 샌드 박스 모드
    7. 플러그 인증
    8. MySQL에서 사용 가능한 인증 플러그인
    9. 프록시 사용자
    10. 보안 연결을 위해 SSL 사용
    11. SSH를 사용하여 Windows에서 MySQL에 대한 원격 연결
    12. MySQL Enterprise Audit 로그 플러그인
    13. SQL 기반의 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.3.4 계정 자원 제한 설정

MySQL 서버 리소스의 사용을 제한하는 방법 중 하나는 글로벌 max_user_connections 시스템 변수를 0이 아닌 값으로 설정하는 것입니다. 이렇게하면 특정 계정에서 실행 할 수있는 동시 연결 수가 제한되지만, 일단 클라이언트가 연결되면 실행 내용에는 제한이 부과되지 않습니다. 또한 max_user_connections 을 설정해도 각 계정의 관리는 사용할 수 없습니다. 두 가지 유형의 제어도 많은 MySQL 관리자 (특히 인터넷 서비스 공급자의 직원)에게 관심이있는 것입니다.

MySQL 5.6에서는 각 계정에 대해 다음의 서버 리소스 사용을 제한 할 수 있습니다.

  • 계정이 1 시간마다 발행 할 쿼리 수

  • 계정이 1 시간마다 발행 할 업데이트의 수

  • 계정이 1 시간마다 서버에 연결할 수있는 횟수

  • 계정으로 서버에 동시 연결 수

쿼리 제한에서 클라이언트가 발행 할 수있는 문이 계산됩니다 (그 결과가 쿼리 캐시에서 제공되는 경우는 제외). 업데이트 제한에 대해 데이터베이스 또는 테이블을 변경하는 명령문 만 카운트됩니다.

이러한 맥락에서 "계정"은 mysql.user 테이블의 행에 대응하고 있습니다. 즉, 연결에 적용되는 user 테이블 행의 User 와 Host 값에 연결이 평가됩니다. 예를 들어, 계정 'usera'@'%.example.com' 는 example.com 도메인의 모든 호스트에서 연결을 usera 허용하기 위해 usera 및 %.example.com 의 User 와 Host 값을 있는 user 테이블의 행에 대응하고 있습니다. 이 경우 이러한 연결은 모두 같은 계정이 사용되기 때문에 서버는 usera 에 따르면 example.com 도메인의 모든 호스트로부터의 모든 연결이 줄 자원 제한을 정리하고 적용합니다.

MySQL 5.0.3 이전에서는 사용자의 연결 원일 실제 호스트에 대해 "계정"이 평가되어있었습니다. --old-style-user-limits 옵션을 사용하여 서버를 시작하면이 오래된 계정 방식을 선택할 수 있습니다. 이 경우 usera 가 host1.example.com 과 host2.example.com 에서 동시에 연결하면 서버는 각 연결에 개별적으로 계정 자원 제한을 적용합니다. usera 가 host1.example.com 다시 연결하면 서버는 호스트에서 기존 연결하고, 그 연결에 대한 제한을 적용합니다.

계정에 자원 제한을 설정하려면 GRANT 문을 사용합니다 ( 섹션 13.7.1.4 "GRANT 구문" 을 참조하십시오). 제한되는 각 자원의 이름을 지정하는 WITH 절을 지정합니다. 각 제한의 기본값은 영 (제한 없음)입니다. 예를 들어, 제한된 방식으로 만 customer 데이터베이스에 액세스 할 새 계정을 만들려면 다음과 같은 명령문을 발행합니다.

 mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank';
 mysql> GRANT ALL ON customer.* TO 'francis'@'localhost'
     ->  WITH MAX_QUERIES_PER_HOUR 20
     ->  MAX_UPDATES_PER_HOUR 10
     ->  MAX_CONNECTIONS_PER_HOUR 5
     ->  MAX_USER_CONNECTIONS 2;

제한 타입의 이름을 모두 WITH 절에 지정할 필요는 없지만, 이름을 지정한 것은 임의의 순서로 표시 할 수 있습니다. 시간별 각 제한 값은 시간당 횟수를 나타내는 정수로하도록하십시오. MAX_USER_CONNECTIONS 에서는 제한된 계정에 의한 최대 동시 연결 수를 나타내는 정수입니다. 이 제한을 제로로 설정되어있는 경우, 글로벌 max_user_connections 시스템 변수의 값에 따라 동시 연결 수가 결정됩니다. max_user_connections 도 제로인 경우는 계정에 제한이 없습니다.

계정에 대한 기존의 제약을 변경하려면 글로벌 수준 ( ON *.* )에서 GRANT USAGE 명령문을 사용합니다. 다음 명령문은 francis 대한 쿼리 제한을 100로 변경합니다.

 mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'
     -> WITH MAX_QUERIES_PER_HOUR 100;

이 문은 지정된 제한 값만을 변경하고 다른 계정은 변경되지 않은 상태로합니다.

제한을 제거하려면 그 값을 0으로 설정합니다. 예를 들어, francis 가 연결 시간당 횟수에 대한 제한을 제거하려면 다음 문을 사용합니다.

 mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'
     -> WITH MAX_CONNECTIONS_PER_HOUR 0;

이미 설명했듯이 계정에 대한 동시 연결 제한은 MAX_USER_CONNECTIONS 제한 및 max_user_connections 시스템 변수에 의해 결정됩니다. 글로벌 max_user_connections 값이 10이고, 3 개의 계정을 GRANT 를 사용하여 지정된 자원 제한을 가지고 있다고 가정합니다.

 GRANT ... TO 'user1'@ 'localhost'WITH MAX_USER_CONNECTIONS 0;
 GRANT ... TO 'user2'@ 'localhost'WITH MAX_USER_CONNECTIONS 5;
 GRANT ... TO 'user3'@ 'localhost'WITH MAX_USER_CONNECTIONS 20;

user1 의 MAX_USER_CONNECTIONS 은 제로이기 때문에 연결 제한은 10 (글로벌 max_user_connections 값)입니다. user2 및 user3 의 MAX_USER_CONNECTIONS 0이 아닌이기 때문에 연결 제한은 각각 5와 20입니다.

서버는 계정에 해당하는 user 테이블 행에 계정에 대한 자원 제한을 저장합니다. max_questions , max_updates 또는 max_connections 컬럼에는 시간당 제한이 포함되어 max_user_connections 컬럼은 MAX_USER_CONNECTIONS 제한이 포함됩니다. 섹션 6.2.2 "권한 시스템 부여 테이블" 을 참조하십시오.

모든 계정에 의한 자원 중 하나의 사용에 제로 이외의 제한이 설정되어있는 경우 자원 사용 카운트가 발생합니다.

서버가 실행되면 각 계정이 자원을 사용하는 횟수가 계산됩니다. 지난 1 시간 이내에 계정이 연결 수에 대한 제한에 도달하면 해당 시간이 경과 할 때까지 해당 계정에 의한 이후의 연결이 거부됩니다. 마찬가지로, 계정이 쿼리 나 업데이트 횟수에 대한 제한에 도달 한 경우에도 그 시간이 경과 할 때까지 이후의 쿼리 또는 갱신이 거부됩니다. 이러한 경우는 모든 적절한 오류 메시지가 발행됩니다.

리소스 카운트는 각 클라이언트가 아닌 계정마다 실행됩니다. 예를 들어, 계정의 쿼리 제한이 50 인 경우는 서버에 두 개의 동시 클라이언트 연결을 만들어도 제한을 100으로 증가 할 수 없습니다. 두 연결에서 발행 된 쿼리를 함께 계산됩니다.

현재 1 시간마다 자원 사용 카운트는 모든 계정에 대해 전체적으로 재설정하거나 특정 계정에 대해 개별적으로 재설정 할 수 있습니다.

  • 모든 계정에 대해 현재의 카운트를 0으로 재설정하려면 FLUSH USER_RESOURCES 문 발행합니다. 또한 (예를 들어, FLUSH PRIVILEGES 명령문 또는 mysqladmin reload 명령을 사용하여) 부여 테이블을 다시로드하여 카운트를 재설정 할 수 있습니다.

  • 각 계정의 제한 중 하나를 다시 부여하면 그 수를 0으로 설정할 수 있습니다. 이렇게는 전술 한 바와 같이 GRANT USAGE 를 사용하여 계정이 현재 가지고있는 값과 동일한 제한을 지정합니다.

카운터를 재설정해도 MAX_USER_CONNECTIONS 제한은 영향을받지 않습니다.

서버가 시작되면 모든 카운트가 제로에서 시작됩니다. 다시 시작되면 카운트가 이월되지 않습니다.

MAX_USER_CONNECTIONS 제한은 계정이 허용되는 최대 연결 수를 현재 열려있는 경우에 가장자리 경우가 발생할 수 있습니다. 연결이 발생하는 시점까지 서버에서 절단이 완전히 처리되지 않은 경우, 절단 후 바로 연결하면 오류 ( ER_TOO_MANY_USER_CONNECTIONS 또는 ER_USER_LIMIT_REACHED )가 발생할 수 있습니다. 서버에서 절단 처리가 완료되면 다른 연결이 다시 허용됩니다.


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