Điều này thường xảy ra khi xuất chế độ xem / trình kích hoạt / thủ tục từ cơ sở dữ liệu hoặc máy chủ này sang cơ sở dữ liệu hoặc máy chủ khác khi người dùng đã tạo đối tượng đó không còn tồn tại.
Bạn có hai lựa chọn:
1. Thay đổi ĐỊNH NGHĨA
Điều này có thể dễ thực hiện nhất khi nhập các đối tượng cơ sở dữ liệu ban đầu của bạn, bằng cách xóa bất kỳ DEFINER
nào câu lệnh từ bãi chứa.
Thay đổi trình xác định sau này hơi phức tạp hơn một chút:
Cách thay đổi trình định nghĩa cho các chế độ xem
-
Chạy SQL này để tạo các câu lệnh ALTER cần thiết
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Sao chép và chạy các câu lệnh ALTER
Cách thay đổi trình xác định cho các thủ tục được lưu trữ
Ví dụ:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Hãy cẩn thận, vì điều này sẽ thay đổi tất cả các bộ định nghĩa cho tất cả các cơ sở dữ liệu.
2. Tạo người dùng bị thiếu
Nếu bạn đã tìm thấy lỗi sau khi sử dụng cơ sở dữ liệu MySQL:
The user specified as a definer ('someuser'@'%') does not exist`
Sau đó, bạn có thể giải quyết nó bằng cách sử dụng sau:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Từ http:// www .lynnnayko.com / 2010/07 / mysql-user-specific-as-definer-root.html
Điều này hoạt động như một sự quyến rũ - bạn chỉ phải thay đổi someuser
đến tên của người dùng bị mất tích. Trên máy chủ nhà phát triển cục bộ, bạn thường có thể chỉ sử dụng root
.
Ngoài ra, hãy cân nhắc xem bạn có thực sự cần cấp cho người dùng ALL
hay không quyền hoặc liệu họ có thể làm với ít hơn.