2010-03-07 51 views
14

Cơ sở dữ liệu tôi đang sử dụng là MySQL 5.1. Tôi đã chỉ định, tôi tin rằng, đúng chuỗi kết nối trong web.config của tôi. nhưng khi tôi chạy ứng dụng web của mình. nó ném ngoại lệ này: -Lỗi chính xác này là gì?

MySql.Data.MySqlClient.MySqlException: Người dùng quy định như một DEFINER ('root' @ '%') không tồn tại

Bất kỳ sự giúp đỡ. Tại sao tôi nhận được điều này?

Trả lời

28

Các mã nguồn cho các thủ tục được lưu trữ mà bạn đã tải có thể chứa "DEFINER = root @ '%'" như là một phần của định nghĩa - nhìn một chút như thế này:

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

Vấn đề ở đây là bạn không có tài khoản trên hệ thống của bạn cho 'root' @ '%'. Điều này có thể dễ dàng chứng minh. Từ dòng lệnh MySQL:

show grants for 'root'@'%'; 

Tôi hy vọng điều này sẽ trở lại với một thông báo lỗi:

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

Việc sửa chữa là để thay đổi nguồn gốc của các thủ tục lưu trữ của bạn, hoặc để tạo tài khoản mất tích :

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

Thường không phải là một ý tưởng hay để có tài khoản được hỗ trợ cao từ bất kỳ đâu, nhưng đó là một câu chuyện khác.

+0

+1 tốt đẹp! Tôi đã có một inkling nó đã làm với các đặc điểm kỹ thuật máy chủ lưu trữ trong tên người dùng. Chúng tôi sẽ xem liệu có sắp xếp hay không. –

2

Đây có phải là quy trình được lưu trữ không? Sau đó, có thể this blog post giúp (nhấn mạnh mỏ).

Tất cả các cài đặt đều ổn và tôi đã tự hỏi điều gì gây ra sự cố. Lúc đầu, tôi nghĩ rằng nó có thể là một bộ nhớ đệm, như tôi đã yêu cầu gần đây để có xcache trên máy chủ của chúng tôi.

Nhưng không phải như vậy. Các lỗi đã được nhiều hơn nữa ngu ngốc hơn ngay cả một người có thể tưởng tượng. Tập lệnh cụ thể đó sử dụng một thủ tục được lưu trữ để chèn/lấy dữ liệu đến/từ MySQL. Người dùng đã tạo ra sp là người đã bị xóa. Và đó là vấn đề. Thuật ngữ "Definer" về MySQL là một trong những người tạo ra các thủ tục được lưu trữ và cho các thủ tục được lưu trữ được thực thi mà người dùng phải tồn tại.

+0

Cảm ơn. Tôi đã thử giải pháp được đưa ra trong liên kết. Tôi đã bỏ toàn bộ cơ sở dữ liệu, được tái tạo thành người dùng đã đăng nhập (root). nhưng vẫn gặp lỗi tương tự – Jango

+0

+1 - Tôi nghĩ Pekka đúng. Tôi đã thêm một câu trả lời khác nhằm giải thích mọi thứ chi tiết hơn. – Martin

3

Tôi biết câu trả lời này đến trễ, nhưng tôi đã tìm thấy giải pháp không liên quan đến việc thay đổi bất kỳ quyền nào.

Đi vào các Quy trình được lưu trữ của bạn và xóa mệnh đề DEFINER. Máy chủ nên ghi vào một DEFINER mới phù hợp với thông tin người dùng mà bạn đã đăng nhập.

Làm việc cho tôi ...