[MySQL][Object]Procedure 및 Function에서 User와 Execute의 관계

Procedure Function에서 User Execute 관계

 

▶︎ Execute 권한관련

보통 Function Procedure 생성하면 세션에 접속되어 있는 User IP 이용해서 Definer라는 정보를 생성하게 됩니다.

그런데 이때 조심해야 것이 있습니다.

Definer EXECUTE권한이 없으면 Procedure Function 생성권한이 있더라도 수행이 되지 않습니다. 즉 Create권한만 있으면 자신이 생성했다 하더라도 Procedure나 Function을 수행할 수 없는 것입니다.

 

▶︎ Definer 생성 User 존재 여부

Function이나 Procedure 만든 User 반드시 존재해야 합니다.

예를 들어 user1@IP 가지는 User 특정 Proc1프로시저를 만들었다고 가정합니다.

이때 user1@IP 삭제했다면 프로시저를 다른 유저가 사용할 없습니다.

이유는 다음과 같습니다. Procedure Function 수행 프로세스를 유추해볼때

Proc1에서 user1@IP 가지는 Definer 있고 일반 다른 사용자는 Execute권한을 가진다고 가정합니다.

이때 user1@IP 가진 사용자를 삭제합니다. 그럼 Proc1 절대로 수행되지 않습니다.

Procedure Function 수행하는 방법은 definer, user1@IP 수행하게 되는데 User 삭제되었기 때문에  프로시저나 Function 수행할 있는 주체가 사라져버리게 것입니다.

 

user1@IP Definer 가지는 프로시저 Proc1 있고 Procedure 수행하려는 user2 있다면 Proc 수행순서는 다음과 같습니다.

user2 Procedure Function 수행할 있는 Execute권한을 가지고 있어야 합니다user2 user1@IP 가지는 Proc1 수행하게 되면 user!@IP 통해  Procdure 수행되게 됩니다. 그래서 Procedure Function 수행이 갑자기 되지 않는다면  않는다면 definer@IP 유저가 존재하는지 반식시 한번 확인해 보셔야 합니다.

 

또한가지 특이한점은 user2@IP user1@IP 프로시저 수행 수행해도 수행 Processlist 확인해보면 user1@IP 수행이 되는것을 확인해 있습니다. 이 특성을 알아야 Procedure나 Function을 수행할때 에러가 발생되는 원인을 파악하기 쉬울 수 있습니다.

Designed by JB FACTORY