2010-04-19 4 views
17

은 내가 [email protected]로 MySQL의 모든 절차를 서면으로 작성했습니다 : 다른 서버에 배포 할 때저장 프로 시저를 만들 때`definer`가 필요합니까?

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

문제는, 내가 현재 사용자와 root을 교체하고 짜증나는 현재 IP와 localhost을 교체해야합니다.

데이터베이스와 프로 시저를 사용하려는 사람이 각 프로 시저의 정의자를 수정할 필요가 없도록 프로 시저를 작성할 수있는 방법이 있습니까? here

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

그래서 MySQL의 문서에 명시된 바와 같이

답변

13

의 DEFINER 부분은 필수 아닌, 단지 절차가 작동합니다 CREATE. 당신은 프로 시저 본문에 다음 문을 추가하여 실행 권한을 지정할 수 있습니다

+0

"DEFINER 절은 트리거 활성화 시간에 액세스 권한을 확인할 때 사용할 보안 컨텍스트를 결정합니다. 자세한 내용은이 섹션 뒷부분에 나와 있습니다." 그래서 절차가 권한이있는 사용자에 의해서만 사용된다는 것을 알기 때문에 나는 전체 정의자를 완전히 제거 할 수 있습니까? – Xorty

+0

네, 그렇 겠지요. 나는 사용자의 권한을 정의 할 때 "실행 절차"권한이 부여/거부 될 수 있다고 생각합니다. (확실하지는 않습니다 ...) – maid450

+0

좋았어, 나중에 다시 시도해보고 작동하면 다시 응답 할 것입니다. 고맙습니다 – Xorty

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

은 후 (... 당신이 당신의 프로 시저에서 사용자를 정의하려면이 .. 아마이, 당신을 도울 것입니다 확인 선언)

SQL SECURITY INVOKER 

예 :

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

그렇게 실제 피 호출자 rivileges가 적용되고 DEFINER 부분이 생략됩니다 (스키마 가져 오기 중에 자동 추가되는 경우에도 마찬가지 임). 여기에서 전체 참조 : https://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html

+2

DEFINER 속성을 설명 할 수 있습니까? %는 모든 IP 주소의 사용자를 허용합니까? Pls. 저를 회신. DEFINER가 자동으로 생성되고 제거 할 수없는 godaddy 공유 호스트를 사용하고 있습니다. 그 DEFINER = [databasename] @ %로 언급하지만 그게 내 로컬 응용 프로그램에서 저장 프로 시저를 통신 할 수 있도록; 하지만 난 정상적인 쿼리를 사용하는 경우 의사 소통을 할 수 있습니다 (선택 : tablenm에서 선택 *) 이 점에서 저를 도울 수 있습니까? – Sensa

관련 문제