데이터베이스 MySQL 5.1을 사용하고 있습니다. 나는 web.config에서 올바른 연결 문자열을 지정했다. 하지만 내 웹 앱을 실행할 때. 그것은이 예외를 throw : -이 오류가 정확히 무엇입니까?
MySql.Data.MySqlClient.MySqlException을하십시오 디파로 지정된 사용자 ('루트'@ '%')
어떤 도움을 존재하지 않습니다. 내가 왜 이걸 얻는거야?
데이터베이스 MySQL 5.1을 사용하고 있습니다. 나는 web.config에서 올바른 연결 문자열을 지정했다. 하지만 내 웹 앱을 실행할 때. 그것은이 예외를 throw : -이 오류가 정확히 무엇입니까?
MySql.Data.MySqlClient.MySqlException을하십시오 디파로 지정된 사용자 ('루트'@ '%')
어떤 도움을 존재하지 않습니다. 내가 왜 이걸 얻는거야?
당신은 로딩이 아마 포함되어있는 저장 프로 시저의 소스 코드 "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;
어디에서나 액세스 할 수있는 강력한 계정을 보유하는 것은 일반적으로 좋지 않지만 다른 이야기입니다.
저장 프로 시저에 있습니까? 그러면 this blog post이 도움이 될 수 있습니다 (강조 표시).
모든 설정이 문제가되지 않았으며 문제의 원인을 알고 싶습니다. 처음에는 서버에 xcache를 갖도록 요청 했으므로 캐시가 될 수 있다고 생각했습니다.
하지만 사실이 아닙니다. 그 오류는 심지어 상상할 수있는 것보다 훨씬 어리 석다. 특정 스크립트는 저장 프로 시저를 사용하여 MySQL에 데이터를 삽입/가져옵니다. sp를 만든 사용자가 삭제 된 사용자입니다. 그리고 그것이 문제였습니다. MySQL의 용어로 "Definer"라는 용어는 스토어드 프로 시저를 생성하고 스토어드 프로 시저를 실행하여 사용자가 존재해야한다는 것을 의미합니다.
나는이 답변이 매우 늦다는 것을 알고 있지만, 나는 권리를 전혀 변경하지 않는 해결책을 발견했다.
저장 프로 시저로 가서 DEFINER
절을 삭제하십시오. 서버는 로그인 한 사용자 정보와 일치하는 새 DEFINER에 기록해야합니다.
나를 위해 일했습니다 ...
+1 멋진! 필자는 사용자 이름의 호스트 사양과 관련이 있습니다. 우리는 그것이 그 종류를 분류하는지 보게 될 것입니다. –