sql >> Database teknologi >  >> RDS >> Mysql

MySQL fejl 1449:Brugeren angivet som definerer eksisterer ikke

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

  1. 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';
    
  2. 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.



  1. Sådan viser du alle datoer mellem to datoer

  2. SQL Server CTE og rekursion eksempel

  3. Procedure for at eksportere tabel til flere csv-filer

  4. Hvordan trunkerer du alle tabeller i en database ved hjælp af TSQL?