programing

저장 프로시저를 작성할 때 'definer'가 필요합니까?

jooyons 2023. 11. 6. 21:47
반응형

저장 프로시저를 작성할 때 'definer'가 필요합니까?

모든 MySQL 프로시저를 다음과 같이 작성했습니다.root@localhost:

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`(...)

문제는 다른 서버에 배포할 때 교체해야 한다는 것입니다.root현재 사용자 및 대체 사용자와 함께localhost현재 IP로, 귀찮습니다.

제 데이터베이스와 절차를 사용하려는 사람이 각 절차의 정의를 수정할 필요가 없도록 절차를 작성할 수 있는 방법이 있습니까?

여기 MySQL 설명서에 명시된 바와 같이

CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body

따라서 DEFINER 부분은 필수가 아니며 CREATE PROCEDURE만 작동하면 됩니다.

[EDIT: ref 페이지 업데이트]

프로시저 본문(선언 후)에 다음 문을 추가하여 실행 권한을 지정할 수 있습니다.

SQL SECURITY INVOKER

예:

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`()
SQL SECURITY INVOKER
(...)

이렇게 하면 실제 호출자 권한이 적용되고DEFINER스키마 가져오기 중에 자동으로 추가되는 경우에도 part가 생략됩니다.여기 전체 참조: https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html

CREATE DEFINER=[your_web_user]@% PROCEDURE p_add_user(...)

확인..절차에 따라 사용자를 정의하고 싶다면 아마 이 방법이 도움이 될 것입니다.

언급URL : https://stackoverflow.com/questions/2666286/is-definer-required-when-creating-a-stored-procedure

반응형