Dette sker ofte, når der eksporteres visninger/triggere/procedurer fra én database eller server til en anden, da den bruger, der oprettede det pågældende objekt, ikke længere eksisterer.
Du har to muligheder:
1. Skift DEFINER
Dette er muligvis nemmest at gøre, når du først importerer dine databaseobjekter, ved at fjerne enhver DEFINER
udtalelser fra lossepladsen.
Det er lidt mere vanskeligt at ændre definereren senere:
Sådan ændres definereren for visninger
-
Kør denne SQL for at generere de nødvendige ALTER-sætninger
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Kopier og kør ALTER-sætningerne
Sådan ændres definereren for lagrede procedurer
Eksempel:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Vær forsigtig, for dette vil ændre alle definerere for alle databaser.
2. Opret den manglende bruger
Hvis du har fundet følgende fejl under brug af MySQL-database:
The user specified as a definer ('someuser'@'%') does not exist`
Så kan du løse det ved at bruge følgende :
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;
Fra http://www. .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Dette fungerede som en charme - du skal kun ændre someuser
til navnet på den manglende bruger. På en lokal udviklerserver kan du typisk bare bruge root
.
Overvej også, om du rent faktisk skal give brugeren ALL
tilladelser eller om de kunne klare sig med mindre.