• 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 권한 시스템
    1. MySQL에서 제공되는 권한
    2. 권한 시스템 부여 테이블
    3. 계정 이름 지정
    4. 액세스 제어 1 단계 : 연결 확인
    5. 액세스 제어, 2 단계 : 요청 확인
    6. 권한 변경이 활성화되는시기
    7. 액세스 거부 오류의 원인
    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.2.5 액세스 제어, 2 단계 : 요청 확인

연결이 된 후 서버는 액세스 제어의 2 단계로 들어갑니다. 연결을 통해 사용자가 발행하는 각 요청에 대해 서버는 사용자가 수행 할 작업을 결정하고 작업을 할 충분한 권한을 사용자에게 부여할지 여부를 검사합니다. 여기에서 부여 테이블의 권한 컬럼이 도움이됩니다. 이러한 권한은 user , db , tables_priv , columns_priv 또는 procs_priv 테이블에서 검색 될 수 있습니다. (각각 부여 테이블에있는 컬럼의 목록을 보여주는 섹션 6.2.2 "권한 시스템 부여 테이블" 을 참조하면 도움이 될 수 있습니다.)

user 테이블은 사용자에 글로벌에 할당 기본 데이터베이스에 관계없이 적용되는 권한을 부여합니다. 예를 들어, user 테이블에서 사용자에게 DELETE 권한이 부여 된 경우 해당 서버 호스트의 모든 데이터베이스의 모든 테이블의 행을 삭제할 수 버립니다. user 테이블의 권한은 데이터베이스 관리자 등의 권한을 필요로하는 사용자에게만 부여하는 것이 현명하다. 다른 사용자는 user 테이블의 모든 권한을 'N' 으로 설정하여두고, 구체적인 수준에서만 권한을 부여하도록합니다. 특정 데이터베이스, 테이블, 열 또는 루틴에 대한 권한을 부여 할 수 있습니다.

db 테이블은 데이터베이스 고유 권한을 부여합니다. 이 테이블의 범위 컬럼의 값은 다음의 형식을 취할 수 있습니다.

  • 공백의 User 값은 익명 사용자에 일치합니다. 공백이 아닌 값은 문자 그대로 일치하고 사용자 이름에 와일드 카드가 없습니다.

  • Host 와 Db 컬럼 내에서 와일드 카드 문자 ' % '및' _ '를 사용하실 수 있습니다. 이들은 LIKE 연산자에서 실행되는 패턴 매칭 연산과 같은 의미를가집니다. 권한을 부여 할 때 모든 문자를 문자 그대로 사용하는 경우, 문자를 backslash로 이스케이프해야합니다. 예를 들어, 데이터베이스 이름의 일부로 밑줄 ( " _ ")를 포함하려면 GRANT 문에서 이것을 " \_ "로 지정합니다.

  • '%' 또는 공백의 Host 값은 "모든 호스트"를 의미합니다.

  • '%' 또는 공백의 Db 값은 "모든 데이터베이스"를 의미합니다.

서버는 user 테이블을 읽는 것과 동시에 db 테이블을 메모리에 읽어 정렬합니다. 서버는 Host , Db , 그리고 User 범위 컬럼에 따라 db 테이블을 정렬합니다. user 테이블처럼 정렬은 가장 구체적인 값이 먼저 배치되고, 가장 구체적이지 않은 값이 마지막에 배치되고 서버가 일치하는 항목을 참조 할 때 발견 된 최초의 일치가 사용 됩니다.

tables_priv , columns_priv 및 procs_priv 테이블은 테이블 별 컬럼 별 및 루틴 고유의 권한을 부여합니다. 이러한 테이블의 범위 컬럼 값은 다음 형식을 취할 수 있습니다.

  • Host 컬럼에서 와일드 카드 문자 ' % '및' _ '를 사용하실 수 있습니다. 이들은 LIKE 연산자에서 실행되는 패턴 매칭 연산과 같은 의미를가집니다.

  • '%' 또는 공백의 Host 값은 "모든 호스트"를 의미합니다.

  • Db , Table_name , Column_name 및 Routine_name 컬럼은 와일드 카드를 포함하거나 공백으로 할 수 없습니다.

서버는 Host , Db , 및 User 컬럼에 따라 tables_priv , columns_priv 및 procs_priv 테이블을 정렬합니다. 이것은 db 테이블의 정렬과 비슷하지만 Host 컬럼 만 와일드 카드를 포함 할 수 있기 때문에보다 간단합니다.

서버는 정렬 된 테이블을 사용하여 서버가 수신 요청을 확인합니다. SHUTDOWN 과 RELOAD 등의 관리 권한이 필요한 요청이 서버는 user 테이블 행만을 체크합니다. 이것은 관리 권한을 지정하는 것은이 테이블뿐이기 때문입니다. 요청 된 조작이 그 행에 의해 허용 된 경우 서버는 액세스 권한을 부여하고, 그렇지 않은 경우 액세스를 거부합니다. 예를 들어, 사용자가 mysqladmin shutdown을 실행하고 싶지만, user 테이블 행에 의해 SHUTDOWN 권한이 부여되어 있지 않은 경우, 서버는 db 테이블조차도 확인하지 않고 액세스를 거부합니다. (여기에는 Shutdown_priv 열이 없기 때문에 실행하지 않아도됩니다.)

데이터베이스 관련 요청 ( INSERT , UPDATE 등)의 경우, 서버는 user 테이블 행을 참조하여 사용자의 전역 권한을 먼저 확인합니다. 요청 된 조작이 행이 허용되는 경우 액세스 권한이 부여됩니다. user 테이블의 글로벌 권한이 충분하지 않은 경우, 서버는 db 테이블을 선택하여 사용자의 데이터베이스 고유의 권한을 확인합니다.

서버는 db 테이블을 참조 Host , Db , 및 User 컬럼의 일치가 있는지 확인합니다. Host 와 User 컬럼 연결하는 사용자의 호스트 이름과 MySQL 사용자 이름에 일치됩니다. Db 컬럼은 사용자가 액세스하려고하는 데이터베이스에 일치됩니다. Host 와 User 에 해당하는 행이없는 경우 액세스가 거부됩니다.

db 테이블 엔트리에 의해 부여되는 데이터베이스 고유의 권한을 판별 한 후 서버는 user 테이블에 의해 부여되는 글로벌 권한에 그 권한을 추가합니다. 그 결과, 요청 된 조작이 허가되는 경우 액세스 권한이 부여됩니다. 그렇지 않은 경우, 서버는 계속 tables_priv 와 columns_priv 테이블에서 사용자의 테이블 권한과 컬럼 권한을 확인하고이를 사용자의 권한에 추가하고 결과에 따라 액세스를 허용하거나 거부합니다. 스토어드 루틴 조작의 경우, 서버는 tables_priv 와 columns_priv 대신 procs_priv 테이블을 사용합니다.

boolean 조건으로 표현하면 사용자의 권한을 계산하는 방법에 대한 전술의 설명은 다음과 같이 요약 할 수 있습니다.

 global privileges
 OR (database privileges AND host privileges)
 OR table privileges
 OR column privileges
 OR routine privileges

요청 된 작업에 user 행 글로벌 권한은 처음에 충분하지 것을 알고있는 경우 서버가 그 권한을 나중에 데이터베이스 권한 테이블 권한과 컬럼 권한과 결합의 이유가 불명확 않을지도 모릅니다. 그 이유는 하나의 요청이 여러 유형의 권한을 필요로 할 수 있기 때문입니다. 예를 들어, INSERT INTO ... SELECT 문을 실행하는 경우 INSERT 및 SELECT 권한이 모두 필요합니다. 사용 권한이 user 테이블 행에 하나의 권한을 부여하고 db 테이블 행에서 또 다른 권한을 부여하도록되어있는 경우가 있습니다. 이 상황에서 요청을 실행하는 데 필요한 권한은 있지만 서버는 어느 테이블에서 온 것인지를 알 수없이 두 테이블의 항목에 의해 부여 된 권한을 결합해야합니다.

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