• 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. 보안
  • 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
  • 1. Stored Programs 정의
    2. 스토어드 루틴 (프로시저 및 함수)의 사용
    3. 트리거 사용
    4. Event Scheduler 사용
    1. Event Scheduler 개요
    2. Event Schedule 구성
    3. Event 구문
    4. Event Metadata
    5. Event Scheduler Status
    6. Event Scheduler와 MySQL권한
    5. Views 사용
    6. Stored Programs 및 Views 액세스 제어
    7. Stored Programs의 Binary Logging
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

20.4.6 Event Scheduler와 MySQL권한

예약 된 이벤트의 실행을 활성화 또는 비활성화하려면 event_scheduler 글로벌 시스템 변수의 값을 설정해야합니다. 여기에는 SUPER 권한이 필요합니다.

EVENT 권한은 이벤트 만들기, 수정 및 삭제를 제어합니다. 이 권한은 GRANT 를 사용하여 제공 할 수 있습니다. 예를 들어, 다음 GRANT 문은 myschema 라는 스키마에 대한 EVENT 권한을 사용자 jon@ghidora 에게 있습니다.

GRANT EVENT ON myschema.* TO jon@ghidora;

(이 사용자 계정이 존재하는지와 다른 점은 변경되지 않은 상태 인 것으로 상정하고 있습니다.)

이 같은 사용자가 모든 스키마에 대한 EVENT 권한을 인정하는 다음 문을 사용합니다.

GRANT EVENT ON *.* TO jon@ghidora;

EVENT 권한은 전역 또는 스키마 레벨 범위가 있습니다. 따라서 하나의 테이블에 대하여이를 주려고하면 다음과 같은 오류가 발생합니다.

mysql> GRANT EVENT ON myschema.mytable TO jon@ghidora;
ERROR 1144 (42000): Illegal GRANT/REVOKE command; please
consult the manual to see which privileges can be used

이벤트는 정의 자 권한으로 실행되고 정의가 필수 권한을 보유하지 않은 작업을 수행 할 수 없습니다. 예를 들어, jon@ghidora 가 myschema 대한 EVENT 권한을 보유하고 있다고합니다. 또한이 사용자는 myschema 대한 SELECT 권한은 보유하고 있지만,이 스키마에 대한 다른 권한은 보유하고 있지 않다고합니다. jon@ghidora 은 다음과 같은 새로운 이벤트를 만들 수 있습니다.

CREATE EVENT e_store_ts
    ON SCHEDULE
      EVERY 10 SECOND
    DO
      INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());

이 사용자는 1 분 정도 기다린 후 테이블에 여러 새로운 행이 표시되는 것을 예상하고 SELECT * FROM mytable; 쿼리를 실행합니다. 실제로, 테이블은 비어 있습니다. 사용자는 해당 테이블에 대한 INSERT 권한이 없으므로 이벤트의 효과가 없습니다.

MySQL 에러 로그 ( hostname .err )를 조사하면 이벤트가 실행되어 있지만, RetCode=0 으로 표시된대로 이벤트가 실행하려고하고있는 액션은 실패하고 있음을 알 수 있습니다.

060209 22:39:44 [Note]     EVEX EXECUTING event newdb.e [EXPR:10]
060209 22:39:44 [Note]     EVEX EXECUTED event newdb.e  [EXPR:10]. RetCode=0
060209 22:39:54 [Note]     EVEX EXECUTING event newdb.e [EXPR:10]
060209 22:39:54 [Note]     EVEX EXECUTED event newdb.e  [EXPR:10]. RetCode=0
060209 22:40:04 [Note]     EVEX EXECUTING event newdb.e [EXPR:10]
060209 22:40:04 [Note]     EVEX EXECUTED event newdb.e  [EXPR:10]. RetCode=0

이 사용자는 오류 로그에 액세스 할 가능성이 매우 높기 때문에, 직접 그것을 실행하여 이벤트의 액션 문이 유효한지 여부를 확인 할 수 있습니다.

mysql> INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());
ERROR 1142 (42000): INSERT command denied to user
'jon'@'ghidora' for table 'mytable'

INFORMATION_SCHEMA.EVENTS 테이블을 검사하여 e_store_ts 가 존재 활성화되어 있지만, 그 LAST_EXECUTED 컬럼이 NULL 로되어있는 것을 알 수 있습니다.

mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS
     >     WHERE EVENT_NAME='e_store_ts'
     >     AND EVENT_SCHEMA='myschema'\G
*************************** 1. row ***************************
   EVENT_CATALOG: NULL
    EVENT_SCHEMA: myschema
      EVENT_NAME: e_store_ts
         DEFINER: jon@ghidora
      EVENT_BODY: SQL
EVENT_DEFINITION: INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP())
      EVENT_TYPE: RECURRING
      EXECUTE_AT: NULL
  INTERVAL_VALUE: 5
  INTERVAL_FIELD: SECOND
        SQL_MODE: NULL
          STARTS: 0000-00-00 00:00:00
            ENDS: 0000-00-00 00:00:00
          STATUS: ENABLED
   ON_COMPLETION: NOT PRESERVE
         CREATED: 2006-02-09 22:36:06
    LAST_ALTERED: 2006-02-09 22:36:06
   LAST_EXECUTED: NULL
   EVENT_COMMENT:
1 row in set (0.00 sec)

EVENT 권한을 취소하려면 REVOKE 문을 사용합니다. 이 예에서는 스키마 myschema 대한 EVENT 권한이 jon@ghidora 사용자 계정에서 삭제됩니다.

REVOKE EVENT ON myschema.* FROM jon@ghidora;
중요

사용자 EVENT 권한을 취소해도 사용자가 생성 한 이벤트가 제거되거나 비활성화되거나하는 것은 아닙니다.

만든 사용자의 이름을 변경하거나 삭제해도 이벤트가 이동 또는 삭제 될 것은 없습니다.

사용자 jon@ghidora 에 myschema 스키마에 대한 EVENT 및 INSERT 권한이 있다고합니다. 이어이 사용자가 다음 이벤트를 만듭니다.

CREATE EVENT e_insert
    ON SCHEDULE
      EVERY 7 SECOND
    DO
      INSERT INTO myschema.mytable;

이 이벤트를 만든 후 root 는 jon@ghidora 의 EVENT 권한을 취소합니다. 그러나 e_insert 계속 실행 7 초마다 새로운 행이 mytable 에 삽입됩니다. root 가 다음 중 하나의 문을 발행 한 경우에도 마찬가지입니다.

  • DROP USER jon@ghidora;

  • RENAME USER jon@ghidora TO someotherguy@ghidora;

DROP USER 또는 RENAME USER 문을 발행 전후에서 mysql.event 테이블 (이 섹션에서 설명합니다) 또는 INFORMATION_SCHEMA.EVENTS 테이블 ( 섹션 21.7 "INFORMATION_SCHEMA EVENTS 테이블" 을 참조하십시오)를 살펴보면, 이것이 들어 맞는 것 를 확인할 수 있습니다.

이벤트 정의는 mysql.event 테이블에 저장되어 있습니다. 다른 사용자 계정이 생성 한 이벤트를 삭제하려면 MySQL root 사용자 (또는 필요한 권한을 보유한 다른 사용자)이이 테이블에서 행을 삭제할 수 있습니다. 예를 들어, 위의 이벤트 e_insert 을 제거하려면 root 는 다음 문을 사용할 수 있습니다.

DELETE FROM mysql.event
    WHERE db = 'myschema'
      AND definer = 'jon@ghidora'
      AND name = 'e_insert';

mysql.event 테이블에서 행을 삭제하는 경우에는 이벤트 이름, 데이터베이스 스키마 이름, 사용자 계정을 일치시키는 것이 중요합니다. 이것은 같은 사용자가 다른 스키마에 같은 이름의 다른 이벤트를 만들 수 있기 때문입니다.

사용자 EVENT 권한은 mysql.user 및 mysql.db 테이블의 Event_priv 컬럼에 저장되어 있습니다. 두 경우 모두,이 컬럼에는 「Y」 또는 「N」 중 하나의 값이 포함되어 있습니다. 「N」 이 기본입니다. 지정된 사용자가 글로벌 EVENT 권한을 보유하고있는 경우 (즉, GRANT EVENT ON *.* 을 사용하여 권한이 부여 된 경우)에만 해당 사용자의 mysql.user.Event_priv 는 「Y」 로 설정됩니다. 스키마 수준의 EVENT 권한의 경우 GRANT 는 mysql.db 에 줄을 만들고 그 행의 Db 컬럼을 스키마 이름에 User 컬럼을 사용자 이름에 Event_priv 컬럼을 「Y」 로 설정합니다. GRANT EVENT 및 REVOKE EVENT 문이이 테이블에서 필요한 작업을 수행하기 때문에 이러한 테이블을 직접 조작 할 필요가 없습니다.

5 개의 상태 변수가 이벤트 관련 작업의 수를 제공합니다 (그러나 이벤트가 실행 문의 계산은 제공하지 않습니다. 섹션 D.1 "저장 프로그램 제한 사항" 을 참조하십시오). 이러한 다음과 같습니다.

  • Com_create_event : 서버가 마지막으로 재부팅 후 실행 된 CREATE EVENT 문 수.

  • Com_alter_event : 서버가 마지막으로 재부팅 후 실행 된 ALTER EVENT 문 수.

  • Com_drop_event : 서버가 마지막으로 재부팅 후 실행 된 DROP EVENT 문 수.

  • Com_show_create_event : 서버가 마지막으로 재부팅 후 실행 된 SHOW CREATE EVENT 문 수.

  • Com_show_events : 서버가 마지막으로 재부팅 후 실행 된 SHOW EVENTS 문 수.

문 SHOW STATUS LIKE '%event%'; 를 실행하면 이러한 모든 현재 값을 한 번에 볼 수 있습니다.

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