Magento 2 – Quá trình nhập cơ sở dữ liệu bị hủy bỏ do thiếu SUPER quyền

Khi nhập cơ sở dữ liệu xuất từ ​​máy chủ khác, lỗi ERROR 1227 (42000) tại dòng 15126: truy cập bị từ chối; bạn cần (ít nhất một trong) đặc quyền SIÊU(S) cho hoạt động này, - bạn đã nhìn vào bãi rác vào thời điểm này, đã được tìm thấy ở đó

/*!50001 TẠO ALGORITHM = HIỂU */
/*!50013 DEFINER = `MEINDBUSER` @`% `HÓA ĐƠN BẢO MẬT SQL */

Vấn đề ở đây là phần DEFINER = `MEINDBUSER` @`% `' (MEINDBUSER tất nhiên chỉ được xem là một ví dụ). Người dùng cơ sở dữ liệu được sử dụng để nhập và trong trường hợp này cũng phải lưu trữ localhost tại đây. Nó trông như thế này

/*!50001 TẠO ALGORITHM = HIỂU */
/*!50013 DEFINER = MEINDBUSERNEU @ localhost SQL HÓA ĐƠN BẢO MẬT */

Nó cũng quan trọng để loại bỏ các trích dẫn cá nhân, rằng chỉ MEINDBUSERNEU @ localhost còn lại ở đó. Sau đó, nhập khẩu làm việc mà không có bất kỳ vấn đề.

cập nhật từ 11.05.2020

Bây giờ vấn đề này lại phát sinh, nhưng lần này không dễ. Phần kích hoạt lỗi khi nhập cơ sở dữ liệu là lần này:

/*!50003 TẠO NÊN*/ /*!50017 DEFINER = `[MEINDBUSER]`@` localhost` * / /*!50003 TRIGGER trg_catalog_carget_entity_after_insert SAU KHI XÁC NHẬN TRÊN catalog_carget_entity CHO MACHI ROW

Definer bây giờ rất phổ biến - và không chỉ một lần như trong phần trước- gọi.

Vì vậy, có hai lựa chọn:

  1. Ngăn chặn, rằng khi sao lưu / Kết xuất cơ sở dữ liệu của những người dùng cơ sở dữ liệu này được ghi vào tệp sao lưu HOẶC
  2. Sau đó xóa người dùng khỏi tệp và sau đó nhập tệp.

Có những lựa chọn cho cả hai. Tôi đã tự tạo tệp sao lưu bằng lệnh SSH, Tôi có thể điều chỉnh lệnh một chút và đạt được nó, rằng không có người sử dụng cụ thể nhưng “Người dùng hiện tại” được sử dụng. Lệnh sẽ là cái này:

mysqldump -u "[người sử dụng]" --opt --single-giao dịch --password ="[mật khẩu]" -h "[Máy chủ lưu trữ z.B. localhost]" "[Tên cơ sở dữ liệu]" | sed -E 's / DEFINER = `[^ `]+`@`[^ `]+`/ DEFINER = CURRENT_USER / g ' | gzip -9 > DATEINAME.sql.gz;

Điều này tạo ra một bản sao lưu cơ sở dữ liệu với tên DATEINAME.sql.gz (vì vậy nó được đóng gói ngay lập tức). Trong quá trình tạo tệp, lệnh SED biến dữ liệu người dùng được xác định cơ sở dữ liệu so với dữ liệu chung “NGƯỜI DÙNG HIỆN TẠI”-Thông tin trao đổi. Vì vậy, tập tin có thể được nhập sau. (Để giải nén tệp trên máy chủ đích một lần nữa “gunzip DATEINAME.sql.zip” vào. Tôi có lẽ không phải đề cập đến điều đó, tên có thể được gán tự do. Tương tự, các ngăn chứa không gian trong dấu ngoặc vuông INCL. dấu ngoặc được thay thế bằng dữ liệu riêng của họ.)

Nhưng tôi phải sửa lại tệp SQL đã hoàn thành, nhập khẩu chúng, Tôi có thể thực hiện việc này thông qua SSH bằng lệnh sau và nhận được kết quả tương tự như trên

sed -E 's / DEFINER = `[^ `]+`@`[^ `]+`/ DEFINER = CURRENT_USER / g 'DATEINAME.sql > Tên tệp new.sql

Vì lý do bảo mật, tập tin không chỉ đơn giản là ghi đè, một tập tin mới được tạo ra, trong đó có tên là FILENAMEnew.sql.

cập nhật từ 04.05.2021

Hôm nay chúng tôi lại gặp sự cố này khi tạo cửa hàng thử nghiệm. Đã xảy ra lỗi khi nhập cơ sở dữ liệu cửa hàng trực tiếp vào cơ sở dữ liệu mới

ERROR 1227 (42000) at line 717: Access denied; you need (at least one of) the SU          PER privilege(s) for this operation

Sau đó, chúng tôi đã đào lại bài viết này và bây giờ có khả năng, để mở rộng điều này một chút với một khả năng mới để giải quyết vấn đề này. Lệnh sau đây loại bỏ tất cả các tham chiếu đến người dùng và do đó có thể nhập mà không gặp bất kỳ sự cố nào:

 sed -i.bak -e "s/\/\*[^*]*DEFINER=[^*]*\*\///" meindumpfile.sql

Xuất bản bởi sợi Dệt

từ 2009 Tôi đã làm việc chặt chẽ với Magento. Tôi bắt đầu với việc tạo ra và hoạt động của các cửa hàng B2C. Điều này đã được mở rộng thông qua công việc của tôi trong lĩnh vực logistics. Điều này dẫn đến hệ thống B2E đầu tiên chuyên. Hôm nay tôi làm việc ngày một ngày với B2C thú vị, B2B- và các dự án B2E và báo cáo trong blog này về những thách thức và đưa ra lời khuyên trong cuộc.

Để lại một trả lời

Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *