• 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 사용
    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.6 Stored Programs 및 Views 액세스 제어

저장 프로그램과 뷰는 사용하기 전에 정의 된 참조 될 때 그 권한을 결정하는 보안 컨텍스트에서 실행합니다. 이러한 권한은 DEFINER 속성과 존재하는 경우는 SQL SECURITY 특성으로 제어됩니다.

모든 저장 프로그램 (프로 시저, 함수, 트리거 및 이벤트)와보기는 MySQL 계정을 지명하는 DEFINER 속성을 포함 할 수 있습니다. DEFINER 속성을 저장 프로그램 또는 뷰 정의에서 생략하면 기본 계정은 개체를 만드는 사용자입니다.

또한, 스토어드 루틴 (프로 시저 및 함수)와보기는 값이 DEFINER 또는 INVOKER 인 SQL SECURITY 특성이 개체가 정의 측의 컨텍스트에서 실행하거나 호출자의 컨텍스트에서 실행 여부를 지정할 수 있습니다 . SQL SECURITY 특성을 생략하면 기본값은 정의 측의 컨텍스트입니다.

트리거와 이벤트는 SQL SECURITY 특성이없이 항상 정의 측의 컨텍스트에서 실행합니다. 서버가 필요에 따라 자동으로 이러한 개체를 호출하므로, 호출 사용자는 존재하지 않습니다.

정의 측과 호출자의 보안 컨텍스트는 다음과 같이 다릅니다.

  • 정의 측의 보안 컨텍스트에서 실행되는 저장 프로그램이나 뷰 DEFINER 특성에 지명 된 계정의 권한으로 실행합니다. 이러한 권한은 호출 사용자의 권한과는 완전히 다를 수 있습니다. 호출자는 개체를 참조하는 데 적절한 권한 (예를 들어 저장 프로 시저를 호출하는 EXECUTE 또는 뷰에서 선택하는 SELECT )가 필요하지만 객체가 실행 호출자의 권한은 무시됩니다 , DEFINER 계정 권한 만이 중요합니다. 이 계정의 권한이 낮은 경우 개체가 수행 할 수있는 작업은 그에 따라 제한됩니다. DEFINER 계정에 높은 권한이 부여 된 경우 ( root 계정) 호출 사용자에 관계없이 개체는 강력한 작업을 수행 할 수 있습니다.

  • 호출자의 보안 컨텍스트에서 실행되는 스토어드 루틴 또는 뷰는 호출자가 권한이있는 작업 만 수행 할 수 있습니다. DEFINER 속성을 지정할 수 있지만 호출자의 컨텍스트에서 실행되는 개체에 영향을주지 않습니다.

다음 저장 프로 시저를 검토하십시오.

CREATE DEFINER = 'admin'@'localhost' PROCEDURE p1()
SQL SECURITY DEFINER
BEGIN
  UPDATE t1 SET counter = counter + 1;
END;

p1 대한 EXECUTE 권한을 갖는 모든 사용자도 CALL 문을 사용하여이를 호출 할 수 있습니다. 그러나 p1 실행하는 경우에는 DEFINER 의 보안 컨텍스트에서 실행하기 때문에 DEFINER 특성에 지명 된 계정 인 'admin'@'localhost' 의 권한으로 실행합니다. 이 계정은 p1 의 EXECUTE 권한 외에, 테이블 t1 의 UPDATE 권한이 필요합니다. 그렇지 않으면, 프로 시저가 실패합니다.

이어 다음 저장 프로 시저를 검토하십시오. 이것은 p1 과 동일하지만, 그 SQL SECURITY 특성이 INVOKER 인 점이 다릅니다.

CREATE DEFINER = 'admin'@'localhost' PROCEDURE p2()
SQL SECURITY INVOKER
BEGIN
  UPDATE t1 SET counter = counter + 1;
END;

p2 는 p1 와 달리 INVOKER 의 보안 컨텍스트에서 실행합니다. DEFINER 속성은 무관하며, p2 는 호출 사용자의 권한으로 실행합니다. 호출자에게 p2 대한 EXECUTE 권한 또는 테이블 t1 에 대한 UPDATE 권한이 부족한 경우, p2 는 실패합니다.

MySQL은 다음 규칙을 사용하여 사용자가 객체의 DEFINER 속성에서 지정할 수있는 계정을 제어합니다.

  • SUPER 권한이있는 경우에 한해, 자신의 계정 이외의 DEFINER 값을 지정할 수 있습니다.

  • SUPER 권한이없는 경우에만 정당한 사용자 값은 말 그대로 지정하거나 CURRENT_USER 를 사용하여 지정한 자신의 계정입니다. 정의들을 다른 계정으로 설정할 수 없습니다.

저장 프로그램 및보기 작성 및 사용의 가능한 위험을 최소화하기 위해 다음 지침을 따르십시오.

  • 가능한 경우, 스토어드 루틴 또는 뷰에 대해 개체 정의 SQL SECURITY INVOKER 를 사용하여 객체가 수행하는 작업에 적합한 권한을 가진 사용자 만이 사용할 수 있도록합니다.

  • SUPER 권한을 가진 계정을 사용하는 동안 정의 측의 컨텍스트 저장 프로그램 또는 뷰를 만들려면 객체가 수행하는 작업에 필요한 권한만을 소유하고있는 계정을 지명하는 명시적인 DEFINER 속성을 지정합니다. 높은 권한을 가진 DEFINER 계정은 반드시 필요한 경우에만 지정하십시오.

  • 관리자는 SUPER 권한을 사용자에게 부여해야 높은 권한을 가진 DEFINER 계정을 사용자가 지정할 수 없도록 할 수 있습니다.

  • 정의 측 컨텍스트의 개체를 만들 때 호출 사용자에게 권한이없는 데이터에 정의 측이 액세스 할 수 있습니다. 권한이없는 사용자에게 특정 권한을 부여해야 이러한 개체에 대한 참조를 방지 할 수 있습니다.

    • 저장 프로 시저 또는 저장 함수에 대한 EXECUTE 권한이없는 사용자가이를 참조 할 수 없습니다.

    • 뷰에 대한 적절한 권한 (보기에서 선택하는 SELECT 뷰에 삽입하는 INSERT 등)을 가지고 있지 않은 사용자는 뷰를 참조 할 수 없습니다.

    그러나 트리거에 대한 이러한 제어는 존재하지 않습니다. 사용자가 직접 트리거를 참조하는 것은 아니기 때문입니다. 트리거는 항상 DEFINER 컨텍스트에서 실행 특별한 권한이없는 사용자가 일반 테이블 액세스를 포함하여 트리거가 연결된 테이블에 액세스 할 수 있으면 활성화됩니다. DEFINER 계정에 높은 권한이 부여 된 경우 트리거는 신중을 요하는 작업이나 위험한 작업을 수행 할 수 있습니다. 트리거 작성에 필요한 SUPER 및 TRIGGER 권한이 만든 사용자 계정에서 삭제 된 경우에도이를 계속 적용됩니다. 관리자는이 권한의 조합을 사용자에게 인정하는 경우 특히주의해야합니다.


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