Chyba oprávnění při migraci databáze Pimcore

Při deploymentu nebo "pouhém" přesunu či migraci databáze Pimcore je velmi častý postup dump - přesun - import. Bohužel, dump stávající databáze se vytvoří včetně pohledů, které při svém opětovné importu zahlásí chybu oprávnění

Access denied; you need (at least one of) the SUPER privilege(s) for this operation

V anotaci pohledu je totiž

 /*!50001 CREATE ALGORITHM=UNDEFINED */ 

u něhož je uveden DEFINER s původním uživatelem. Definer obecně slouží v (My)SQL jako identifikátor bezpečnostího kontextu. Je-li tedy v původním dumpu také původní uživatel, musel by import být prováděn s root (nebo jinými vyššími) právy, což představuje jednak riziko, v řadě případů je to navíc ze strany poskytovatele databáze v podstatě nemožné. Řešení je několik. Buď lze nahradit původního uživatele novým, tedy tím, pod nímž importujeme databázi na novou lokaci, nebo nahradit definer obecnou formulací CURRENT_USER. Ideální způsob, pokud se pohybujete v konzoli, je regulární výraz v SEDu, použít však lze libovolní editor s funkcí najít a nahradit.

Nahrazení novým uživatelem:

sed -E 's/DEFINER=`[^`]+`/DEFINER=`novy_uzivatel`/g' dump.sql

Nahrazení CURRENT_USER:

sed -E 's/DEFINER=`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' dump.sql

Co příkaz provádí:

-E - rozšířený regulární výraz

's/DEFINER=`[^`]+`/DEFINER=`novy_uzivatel`/g' - regulární výraz s globálním parametrem pro zpracování celého dokumentu

dump.sql - název/cesta souboru, nad nímž má být nahrazení provedeno.

Pro více informací klidně napište nebo napište.

Zpět na přehled článků