MySQL view importálás hiba ( SELECT command denied to user ”@’ )

Amennyiben adatbázisokat költöztetünk, előfordulhat, hogy a view-t létrehozó felhasználó az új helyen már nem létezik. Ez jó kis galibát tud okozni, mert a hibaüzenetek nem utalnak egyértelműen a hiba valódi okára.

root@z:~# ERROR 1143 (42000) at line 1:
SELECT command denied to user ''@'85.90.....' for column 'oszlop'
 in table 'tabla'

Persze a szokásos MySQL használatot megkönnyítő programok nem működnek. A PHPMyAdmin csak részben listázza a táblákat és az information schema-ban kutakodva is több helyen errort kapunk. A HeidiSQL pedig egyáltalán nem tudja megnyitni az adatbázist, amiben a hibás jogosultság szerepel.
A neten a válaszok 99%-a sajnos nem oldja meg a problémát, mert nem GRANT-olni kell neki jogot.

Első lépésben meg kell nézni, hogy melyik VIEW lehet a hibás.
Sajnos ebben az INFORMATION SCHEMA és a MYSQL.PROC tábla nem lesz barátunk, – ha segédprogramot használunk – mert egyáltalán nem mutatja a hibás VIEW-t a tábla sorai között. Marad a jó öreg konzolos módszer:

SHOW FULL TABLES IN adatbazis WHERE TABLE_TYPE NOT LIKE '%table%';

Majd a SHOW CREATE VIEW … segítségével megnézhetjük, hogy ki a DEFINER. A nem létező felhasználót hozzuk létre, vagy módosítsuk a VIEW-ban, pl.:

UPDATE mysql.proc SET definer='felhasznalo@localhost' WHERE db=adatbazis
 AND name=nezet_statisztika

A definer eltávolítása:

sed -i 's/DEFINER=[^*]*\*/\*/g' mydump.sql