← wszystkie artykuły
// artykuł

Magento audit trail: kto zmienił cenę lub usunął produkt?

2026-08-24

Dlaczego w standardowym Magento 2 Open Source nie widać, kto zmienił cenę?

W czystym Magento 2 Open Source (wersje 2.4.6, 2.4.7 na PHP 8.3) nie sprawdzisz bezpośrednio z poziomu panelu, kto zmienił cenę z 499 PLN na 49 PLN ani kto skasował kluczowy produkt. Domyślna baza danych platformy przechowuje wyłącznie aktualny stan encji EAV w tabeli catalog_product_entity_decimal, nadpisując poprzednie wartości bez pozostawiania identyfikatora admin_user_id. Aby rejestrować pełną historię takich zdarzeń wraz z wartością przed i po edycji, wdrożyliśmy w SISL dedykowane narzędzie SISL Time Machine — audit log dla Magento, które monitoruje mutacje modeli i operacje w repozytoriach bez obciążania warstwy bazodanowej.

Standardowa instalacja Magento loguje jedynie autoryzację do panelu w tabeli admin_user_session oraz błędy systemowe w var/log/system.log. Oznacza to, że jeśli pięciu pracowników ma konto z rolą Administratora, a zewnętrzny integrator z Subiekt GT lub Comarch ERP Optima korzysta z tokenu integracji REST API (Bearer token), platforma nie powiąże konkretnego żądania modyfikacji rekordu z człowiekiem lub skryptem, chyba że wdrożysz dedykowany mechanizm śledzenia zdarzeń (Audit Trail).

Jakie realne straty w polskich realiach e-commerce generuje brak audytu zmian?

Błąd ludzki lub źle skonfigurowana synchronizacja stanów magazynowych potrafi w kilkanaście minut wywołać lawinę problemów prawno-finansowych. Typowy scenariusz z polskiego rynku: pracownik omyłkowo zmienia stawkę VAT z 23% na 8% dla kategorii elektroniki użytkowej albo obniża cenę flagowego ekspresu do kawy z 3499 PLN na 349 PLN. Zanim ktokolwiek zorientuje się w panelu, oferta zostaje zaciągnięta przez dwukierunkowy integrator na Allegro.

Klienci kupują 80 sztuk w ramach Allegro Smart, płacąc przez BLIK lub szybki przelew Przelewy24. Zamówienia trafiają natychmiast do Comarch ERP Optima lub Subiekt nexo, gdzie generowany jest dokument, a następnie przesyłany do Krajowego Systemu e-Faktur (KSeF). Odkręcenie tego procesu to koszmar księgowy: korekty faktur w KSeF, niezgodności w pliku JPK_V7, spory konsumenckie przed UOKiK o odmowę realizacji z powodu oczywistego błędu (art. 84 Kodeksu cywilnego) oraz zablokowane środki na bramkach płatniczych. Gdy właściciel pyta: „Kto za to odpowiada?”, w panelu Magento widzi jedynie datę updated_at bez żadnego nazwiska.

Czym różni się śledzenie akcji w Adobe Commerce od Magento Open Source?

Płatna wersja Adobe Commerce (dawniej Magento Enterprise, której licencja zaczyna się od około 22 000 USD rocznie) posiada wbudowany moduł Magento_Logging. Rejestruje on akcje w panelu w dedykowanych tabelach magento_logging_event oraz magento_logging_event_changes. System ten zbiera:

Adobe Commerce nie rozwiązuje jednak problemu całkowicie. Moduł potrafi drastycznie zwolnić zapis przy masowych operacjach (np. aktualizacja 50 000 produktów przez harmonogram zadań cron). Ponadto domyślnie pomija część zapytań wysyłanych przez GraphQL oraz endpointy asynchroniczne RabbitMQ. W darmowej edycji Open Source modułu Magento_Logging nie ma wcale — jego instalacja poprzez kopiowanie plików z wersji Commerce narusza licencję Adobe.

Moduły audit trail od dostawców trzecich (Amasty, Mirasvit, MageWorx) — gdzie tkwią pułapki?

Większość sklepów ratuje się gotowymi wtyczkami dostępnymi na rynku komercyjnym. Moduły takie jak Amasty Admin Actions Log, Mirasvit Action Log czy MageWorx Admin Activity Kosztują zazwyczaj między 149 a 299 USD za licencję. Choć na papierze wyglądają kompletnie, podczas realnego wdrożenia na produkcji w Magento 2.4.7 wychodzą ich ograniczenia architektoniczne:

  1. Puchnięcie bazy danych: Wtyczki zapisują pełny zrzut obiektu modelu przed i po zapisie w formie JSON w MySQL. Przy sklepie posiadającym 40 000 SKU i częstych aktualizacjach z ERP (stany magazynowe aktualizowane co 10 minut), tabela logów potrafi urosnąć o 15 GB w 3 miesiące, blokując operacje I/O na dyskach NVMe.
  2. Brak wsparcia dla asynchroniczności: Rejestrowanie diffu następuje w tym samym procesie PHP, co zapis produktu. W efekcie zapis produktu w panelu zamiast 400 ms trwa 2,5 sekundy.
  3. Konflikty z kompilacją Dependency Injection: Po przejściu na PHP 8.3 i wykonaniu bin/magento setup:di:compile nieaktualizowane regularnie moduły potrafią rzucić błędem typu Fatal error: Declaration of ... must be compatible with ... w pluginach przechwytujących metody save() repozytoriów.
  4. Kompatybilność z nowymi interfejsami: Jeśli panel admina korzysta z niestandardowych nakładek lub headless API pod Hyvä Theme / Hyvä Checkout, niektóre zdarzenia interfejsu (UI components) nie są w ogóle rejestrowane.

Jak namierzyć sprawcę usunięcia produktu bez zainstalowanego modułu audytu?

Jeśli produkt zniknął ze sklepu wczoraj, a Ty nie masz żadnego narzędzia audit log, nie wszystko jest stracone. Śledztwo wymaga jednak dostępu do serwera przez SSH i bezpośredniej analizy logów systemowych oraz bazy danych.

Krok 1: Analiza access logów Nginx / Apache

Usunięcie produktu z panelu generuje żądanie HTTP POST na trasę administracyjną. Przeszukaj logi serwera Nginx za pomocą polecenia grep:

grep -E "catalog/product/delete|catalog_product/delete" /var/log/nginx/magento_access.log

W odpowiedzi otrzymasz linię zawierającą:

Krok 2: Powiązanie adresu IP z kontem administratora

Mając adres IP oraz dokładną godzinę żądania, przeanalizuj tabelę admin_user_session lub logi logowania, aby sprawdzić, który użytkownik miał aktywną sesję z tego konkretnego IP w danym przedziale czasowym:

SELECT user_id, ip, login_at, logout_at, status FROM admin_user_session WHERE ip = '195.136.25.14' AND '2024-10-14 11:25:00' BETWEEN login_at AND logout_at;

Następnie odpytaj tabelę admin_user o identyfikator user_id, aby uzyskać imię, nazwisko oraz adres e-mail pracownika.

Krok 3: Analiza binarnego logu MySQL (MySQL Binlog)

Gdy rekord został usunięty kaskadowo ze wszystkich tabel EAV (catalog_product_entity, catalog_product_entity_varchar, itp.), a brakowało wpisu w logach Nginx (ponieważ usunięcie nastąpiło przez skrypt CLI lub bezpośrednie zapytanie SQL), jedynym ratunkiem jest binlog bazy danych. Za pomocą narzędzia mysqlbinlog możesz wyodrębnić operacje DELETE:

mysqlbinlog --base64-output=DECODE-ROWS -v /var/log/mysql/mysql-bin.000123 | grep -B 5 -A 10 "DELETE FROM catalog_product_entity"

Dzięki temu dowiesz się, czy usunięcia dokonał proces PHP-FPM (żądanie webowe), worker kolejki (cron bin/magento cron:run), czy bezpośrednie połączenie z bazą przez klienta typu DBeaver/HeidiSQL.

Jak zaprojektować wydajny audyt zmian w architekturze Magento 2?

U nas w projektach wychodzimy z założenia, że mechanizm audytu nie może obciążać głównej bazy transakcyjnej sklepu. Skuteczna architektura audit trail w Magento 2 powinna spełniać cztery kryteria techniczne:

Jeśli mierzysz się z powtarzającymi się błędami asortymentu, niewyjaśnionymi zmianami cen na marketplace'ach lub problemami z wydajnością zewnętrznych wtyczek śledzących — napisz do nas. Przeanalizujemy konfigurację Twojego środowiska Magento i dobierzemy rozwiązanie, które zabezpieczy operacje w sklepie bez spowalniania panelu administracyjnego.

Masz podobny problem?

Wolny, niestabilny albo przejęty po kimś sklep Magento? Robimy audyt techniczny: wydajność (Lighthouse, INP), bezpieczeństwo (OWASP), SEO, kod. Raport PDF z rekomendacjami w 3-5 dni, od 1 500 zł.

Zleć audyt swojego sklepu Magento →

Sprawdź swój sklep, zanim zrobi to klient

Darmowy skan Magento 2 w ~30 sekund: wystawione pliki, nagłówki bezpieczeństwa, SEO techniczne i wydajność mierzona na realnych użytkownikach. Bez logowania i bez instalowania czegokolwiek w sklepie.

Uruchom darmowy skan →