sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fel 1449:Användaren som anges som definierare finns inte

Detta inträffar vanligtvis när man exporterar vyer/triggers/procedurer från en databas eller server till en annan eftersom användaren som skapade det objektet inte längre existerar.

Du har två alternativ:

1. Ändra DEFINER

Detta är möjligen lättast att göra när du initialt importerar dina databasobjekt, genom att ta bort någon DEFINER uttalanden från soptippen.

Att ändra definieraren senare är lite mer knepigt:

Hur du ändrar definieraren för vyer

  1. Kör denna SQL för att generera nödvändiga ALTER-satser

    SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", 
    table_name, " AS ", view_definition, ";") 
    FROM information_schema.views 
    WHERE table_schema='your-database-name';
    
  2. Kopiera och kör ALTER-satserna

Hur du ändrar definieraren för lagrade procedurer

Exempel:

UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'

Var försiktig, eftersom detta kommer att ändra alla definierare för alla databaser.

2. Skapa den saknade användaren

Om du har hittat följande fel när du använder MySQL-databasen:

The user specified as a definer ('someuser'@'%') does not exist`

Sedan kan du lösa det genom att använda följande :

GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;

Från http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html

Detta fungerade som en charm - du behöver bara ändra someuser till namnet på den saknade användaren. På en lokal dev-server kanske du vanligtvis bara använder root .

Fundera också på om du verkligen behöver ge användaren ALL behörigheter eller om de skulle kunna göra med mindre.



  1. Hur man visar radvärden som kolumner i MySQL

  2. Hur man skickar strängarray i SQL-parameter till IN-sats i SQL

  3. Är du sorterad? Tips angående T-SQL-fönsterbeställning

  4. Det är inte du, det är jag (I/O-felsökning)