Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro MySQL 1449:o usuário especificado como definidor não existe


Isso geralmente ocorre ao exportar exibições/gatilhos/procedimentos de um banco de dados ou servidor para outro, pois o usuário que criou esse objeto não existe mais.

Você tem duas opções:

1. Altere o DEFINER


Isso é possivelmente mais fácil de fazer ao importar inicialmente seus objetos de banco de dados, removendo qualquer DEFINER declarações do lixão.

Alterar o definidor mais tarde é um pouco mais complicado:

Como alterar o definidor de visualizações


  1. Execute este SQL para gerar as instruções ALTER necessárias
    SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", 
    table_name, " AS ", view_definition, ";") 
    FROM information_schema.views 
    WHERE table_schema='your-database-name';
    

  2. Copie e execute as instruções ALTER

Como alterar o definidor para procedimentos armazenados


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

Tenha cuidado, pois isso alterará todos os definidores de todos os bancos de dados.

2. Crie o usuário ausente


Se você encontrou o seguinte erro ao usar o banco de dados MySQL:
The user specified as a definer ('someuser'@'%') does not exist`

Então você pode resolvê-lo usando o seguinte:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;

De http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definir-root.html

Isso funcionou como um encanto - você só precisa alterar someuser para o nome do usuário ausente. Em um servidor de desenvolvimento local, normalmente você pode usar apenas root .

Considere também se você realmente precisa conceder ao usuário ALL permissões ou se eles poderiam fazer com menos.