[MySQL] Definer와 SQL Security 옵션

스토어드 프로그램은 다음과 같은 옵션이 있습니다.

Definer ; 스토어드 프로그램이 기본적으로 가지는 옵션. 스토어드 프로그램을 작성한 유저. 프로그램이 실행될 때의 권한

SQL Security 옵션 : 프로그램을 실행할 누구의 권한으로 실행할지 결정하는 옵션.

Invoker 또는 Definer둘중에 하나로 선택. definer 스토어드 프로그램을 생성한 사용자를 의미하며 Invoker 해당 프로그램을 호출한 사용자.

 

아래와같이 definer creator@%으로 생성된 스토어드 프로그램을 executer@% 사용자가 실행한다고 가정합니다 . SQL SECURITY INVOKER DEFINER일때 스토어드 프로그램이 어느 사용자의 권한으로 실행되는지 나타내는 표입니다.


SQL SECURITY=DEFINER SQL SECURITY=INVOKER
스토어드 프로그램을 실행하는 사용자 계정 creator@% executer@%
실행에 필요한 권한 creator 스토어드 프로그램을 실행할 권한이 있어야 하며, 스토어드 프로그램 내의 SQL문장이 사용하는 테이블에 대해서도 권한을 가지고 있어야 한다. executer 스토어드 프로그램을 실행할 권한이 있어야 하며, 스토어드 프로그램 내의 SQL문장이 사용하는 테애블에 대해서도 권한을 가지고 있어야 한다.

 

DEFINER 모든 스토어드 프로그램이 기본적으로 가지는 옵션이지만, SQL SECURITY옵션은 스토어드 프로시저와 스토어드 함수, 뷰만 가질 있습니다.

SQL SECURITY DEFINER 설정되므로 트리거나 이벤트 DEFINER 명시된 사용자의 권한으로 항상 실행되는 것입니다.

 

스토어드 프로그램의 DEFINER SQL SECURITY 옵션을 조합해서 복잡한 문제를 해결할 수도 있다. 예를 들어 mysql DB MySQL서버의 유저 정보와 같이 보안에 민감한 정보가 저장돼 있는 데이터베이스입니다. 그런데 만약 일반 사용자에게 mysql DB 있는 테이블 가운데 일부를 제한된 수준으로 조회하거나 변경하는 작업을 허용해야 , 필요한 작업만 스토어드 프로그램으로 개발하고 DEFINER SQL SECURITY옵션을 적절히 조절해주면 됩니다. 관리자 계정을 DEFINER 설정하고 SQL SECURITY DEFINER 설정하면, 스토어드 프로그램을 호출하는 사용자는 주요 테이블에 대해 권한을 전혀 갖고 있지 않아도 스토어드 프로그램으로 해당 작업을 수행할 있다. 이때 스토어드 프로그램은 일반 사용자가 실행하지만 사실은 관리자 계정의 권한으로 실행하는 것입니다.

 

MySQL스토어드 프로그램도 보안 취약점이 수도 있으므로 필요한 용도가 아니라면 SQL SECURITY DEFINER보다는 INVOKER 설정하는 것이 좋습니다. SQL SECURITY INVOKER 설정하면 해당 스토어드 프로그램을 누가 생성했느냐와 관계없이 항상 스토어드 프로그램을 호출하는 사용자의 권한으로 실행되기 때문에 무조건 실행되는것을 막아줍니다.

 

스토어드 프로그램을 생성하면서 DEFINER옵션을 부여하지 않으면 기본적으로 현재 사용자로 DEFINER 자동 설정된다. 하지만 DEFINER 다른 사용자로 설정할 때는 스토어드 프로그램을 생성하는 사용자는 SUPER 권한을 가지고 있어야 합니다. SUPER권한을 가지지 않은 일반 사용자가 스토어드 프로그램의 DEFINER 관리자 계정으로 생성하는 것은 불가능합니다. 이러한 보안상의 이슈로 인해 SUPER 권한을 일반 사용자에게 부여하는 것은 절대 해서는 안됩니다.

Designed by JB FACTORY