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