Bài viết này thảo luận về cách khắc phục sự cố có thể xảy ra khi DEFINER thuộc tính được sử dụng với các đối tượng được lưu trữ trong MySQL (khung nhìn, trình kích hoạt, chức năng và thủ tục được lưu trữ).
Sự cố
Bạn có thể gặp sự cố khi xem hoặc chạy các đối tượng được lưu trữ trong MySQL (chế độ xem, trình kích hoạt, chức năng và thủ tục được lưu trữ). Ví dụ:bạn có thể nhận được thông báo lỗi sau trong phpMyAdmin:
Error in processing request: No routine with name 'example' found in database 'example_db'. You might be lacking the necessary privileges to edit this routine.
Ngoài ra, bạn có thể gặp các lỗi dường như ngẫu nhiên trong quá trình vận hành trang web hoặc mất chức năng cơ sở dữ liệu.
Nguyên nhân
DEFINER thuộc tính được sử dụng để chỉ định một tài khoản người dùng MySQL có thể truy cập một đối tượng được lưu trữ cụ thể. Tuy nhiên, sự cố có thể xảy ra khi tài khoản người dùng MySQL trong DEFINER thuộc tính không khớp với người dùng MySQL hiện đang đăng nhập. Ví dụ:điều này có thể xảy ra khi sử dụng phpMyAdmin của cPanel, luôn đăng nhập với tư cách người dùng tài khoản chính (cPanel) chứ không phải với tư cách người dùng cơ sở dữ liệu do người dùng xác định.
Tương tự, sự cố này có thể xảy ra sau khi di chuyển trang web nếu DEFINER các thuộc tính trong cơ sở dữ liệu không được cập nhật với người dùng cơ sở dữ liệu của môi trường lưu trữ mới.
Độ phân giải
Để giải quyết vấn đề này, bạn có thể cố gắng đăng nhập vào cơ sở dữ liệu với tư cách là người dùng cơ sở dữ liệu được tham chiếu trong DEFINER thuộc tính. (Để xác định người dùng cơ sở dữ liệu chính xác, bạn có thể cần kết xuất cơ sở dữ liệu và kiểm tra ĐỊNH NGHĨA thuộc tính.) Có một số cách bạn có thể đăng nhập với tư cách là những người dùng cơ sở dữ liệu khác nhau:
Phương pháp # 1:Sử dụng ứng dụng khách MySQL
Bạn có thể sử dụng ứng dụng khách MySQL, chẳng hạn như MySQL Workbench, để đăng nhập vào cơ sở dữ liệu với tư cách là người dùng cơ sở dữ liệu chính xác. Sau đó, bạn sẽ có thể chỉnh sửa và chạy các đối tượng được lưu trữ bằng cách sử dụng danh tính phù hợp. Để biết thông tin về cách sử dụng ứng dụng khách MySQL để kết nối với cơ sở dữ liệu của bạn, vui lòng xem bài viết này.
Phương pháp # 2:Sử dụng chương trình dòng lệnh 'mysql'
Ngoài ra, bạn có thể sử dụng mysql chương trình dòng lệnh để đăng nhập vào cơ sở dữ liệu với tư cách là người dùng cơ sở dữ liệu chính xác. Sau đó, bạn sẽ có thể chỉnh sửa và chạy các đối tượng được lưu trữ bằng cách sử dụng danh tính phù hợp. Để biết thông tin về cách sử dụng mysql chương trình commnand-line, vui lòng xem bài viết này.
Phương pháp # 3:Sử dụng cài đặt tùy chỉnh của phpMyAdmin
Nếu bạn không muốn sử dụng ứng dụng khách MySQL hoặc dòng lệnh, bạn có thể tạo cài đặt phpMyAdmin độc lập trên tài khoản lưu trữ của mình. Cài đặt tùy chỉnh này cho phép bạn đăng nhập vào cơ sở dữ liệu với tư cách là người dùng cơ sở dữ liệu chính xác thay vì với tư cách là người dùng tài khoản chính (cPanel). Để biết thông tin về cách tạo cài đặt phpMyAdmin tùy chỉnh, vui lòng xem bài viết này.
Đôi khi, bạn không thể đăng nhập vào cơ sở dữ liệu vì người dùng cơ sở dữ liệu được tham chiếu trong DEFINER thuộc tính. Ví dụ:một trang web đã được di chuyển từ một nhà cung cấp dịch vụ lưu trữ khác có thể có các quy ước đặt tên MySQL khác nhau và có thể không thể tạo người dùng cơ sở dữ liệu với tên chính xác. Trong trường hợp này, bạn phải làm như sau:
- Kết xuất toàn bộ cơ sở dữ liệu vào một tệp. Để biết thông tin về cách thực hiện việc này, vui lòng xem bài viết này.
- Sử dụng trình chỉnh sửa văn bản ưa thích của bạn để cập nhật DEFINER theo cách thủ công để tham chiếu đến người dùng cơ sở dữ liệu mà bạn kiểm soát.
- Nhập cơ sở dữ liệu đã sửa đổi vào tài khoản của bạn. Để biết thông tin về cách thực hiện việc này, vui lòng xem bài viết này.
- Kiểm tra cơ sở dữ liệu mới. Giờ đây, bạn có thể chỉnh sửa và chạy các đối tượng được lưu trữ bằng cách sử dụng danh tính phù hợp.
Thông tin khác
Để biết thêm thông tin về bộ định nghĩa, vui lòng truy cập https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.