Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi MySQL 1449:Người dùng được chỉ định làm trình xác định không tồn tại

Đ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

  1. 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';
    
  2. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli:nó có thể chuẩn bị nhiều truy vấn trong một câu lệnh không?

  2. Các chỉ mục MySQL hoạt động như thế nào?

  3. Chèn vào bảng MySQL hoặc cập nhật nếu tồn tại

  4. Cách gọi thủ tục lưu trữ MySQL bằng Python

  5. MySQL SELECT WHERE datetime khớp với ngày (và không nhất thiết phải là thời gian)