2010-03-07 4 views
14

데이터베이스 MySQL 5.1을 사용하고 있습니다. 나는 web.config에서 올바른 연결 문자열을 지정했다. 하지만 내 웹 앱을 실행할 때. 그것은이 예외를 throw : -이 오류가 정확히 무엇입니까?

MySql.Data.MySqlClient.MySqlException을하십시오 디파로 지정된 사용자 ('루트'@ '%')

어떤 도움을 존재하지 않습니다. 내가 왜 이걸 얻는거야?

답변

28

당신은 로딩이 아마 포함되어있는 저장 프로 시저의 소스 코드 "DEFINER = 루트 @ '%'"정의의 일부로서 -이 같은 비트 찾고 :

create definer='root'@'%' procedure sp_test() begin end; 

문제를 여기에 'root'@ '%'에 대한 시스템 계정이 없다는 것입니다. 이것은 쉽게 증명할 수 있습니다.

show grants for 'root'@'%'; 

나는이 다시 오류 메시지가 올 것으로 기대 :

ERROR 1141 (42000): There is no such grant defined for user 'root' on host '%' 

수정하여 저장 프로 시저의 소스를 변경하거나 누락 된 계정을 만드는 것입니다 MySQL의 명령 행에서 :

grant all on *.* to 'root'@'%' identified by 'password' with grant option; 

어디에서나 액세스 할 수있는 강력한 계정을 보유하는 것은 일반적으로 좋지 않지만 다른 이야기입니다.

+0

+1 멋진! 필자는 사용자 이름의 호스트 사양과 관련이 있습니다. 우리는 그것이 그 종류를 분류하는지 보게 될 것입니다. –

2

저장 프로 시저에 있습니까? 그러면 this blog post이 도움이 될 수 있습니다 (강조 표시).

모든 설정이 문제가되지 않았으며 문제의 원인을 알고 싶습니다. 처음에는 서버에 xcache를 갖도록 요청 했으므로 캐시가 될 수 있다고 생각했습니다.

하지만 사실이 아닙니다. 그 오류는 심지어 상상할 수있는 것보다 훨씬 어리 석다. 특정 스크립트는 저장 프로 시저를 사용하여 MySQL에 데이터를 삽입/가져옵니다. sp를 만든 사용자가 삭제 된 사용자입니다. 그리고 그것이 문제였습니다. MySQL의 용어로 "Definer"라는 용어는 스토어드 프로 시저를 생성하고 스토어드 프로 시저를 실행하여 사용자가 존재해야한다는 것을 의미합니다.

+0

감사합니다. 나는 링크에서 주어진 해결책을 시도했다. 전체 데이터베이스를 삭제하고 로그인 한 사용자 (루트)로 다시 만들었습니다. 그래도 여전히 같은 오류가 발생합니다 – Jango

+0

+1 - 나는 Pekka가 옳다고 생각합니다. 더 자세히 설명하려고하는 또 다른 대답을 추가했습니다. – Martin

3

나는이 답변이 매우 늦다는 것을 알고 있지만, 나는 권리를 전혀 변경하지 않는 해결책을 발견했다.

저장 프로 시저로 가서 DEFINER 절을 삭제하십시오. 서버는 로그인 한 사용자 정보와 일치하는 새 DEFINER에 기록해야합니다.

나를 위해 일했습니다 ...

관련 문제