Quando executo a seguinte consulta, recebo um erro:
SELECT
`a`.`sl_id` AS `sl_id`,
`a`.`quote_id` AS `quote_id`,
`a`.`sl_date` AS `sl_date`,
`a`.`sl_type` AS `sl_type`,
`a`.`sl_status` AS `sl_status`,
`b`.`client_id` AS `client_id`,
`b`.`business` AS `business`,
`b`.`affaire_type` AS `affaire_type`,
`b`.`quotation_date` AS `quotation_date`,
`b`.`total_sale_price_with_tax` AS `total_sale_price_with_tax`,
`b`.`STATUS` AS `status`,
`b`.`customer_name` AS `customer_name`
FROM `tbl_supplier_list` `a`
LEFT JOIN `view_quotes` `b`
ON (`b`.`quote_id` = `a`.`quote_id`)
LIMIT 0, 30
A mensagem de erro é:
#1449 - The user specified as a definer ('web2vi'@'%') does not exist
Por que estou recebendo esse erro? Como faço para corrigir isso?
mysql
permissions
Tech MLG
fonte
fonte
view_quotes
exibição.Respostas:
Isso geralmente ocorre ao exportar visualizaçõ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. Mude o DEFINADOR
Isso é possivelmente mais fácil ao importar inicialmente seus objetos de banco de dados, removendo quaisquer
DEFINER
instruções do dump.Alterar o definidor mais tarde é um pouco mais complicado:
Como alterar o definidor de visualizações
Execute este SQL para gerar as instruções ALTER necessárias
Copie e execute as instruções ALTER
Como alterar o definidor para procedimentos armazenados
Exemplo:
Cuidado, pois isso mudará todos os definidores para todos os bancos de dados.
2. Crie o usuário ausente
From http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Isso funcionou como um encanto - você só precisa mudar
someuser
para o nome do usuário ausente. Em um servidor de desenvolvimento local, você normalmente pode apenas usarroot
.Considere também se você realmente precisa conceder
ALL
permissões ao usuário ou se elas poderiam fazer com menos.fonte
mysql
.proc
P SET definidor = 'usuário @%' WHERE definidor = 'raiz @%'" ", pois os definidores dos procedimentos são atualizados somente então.DEFINER=`user`@`host`
e reimportei. Funcionou como um encanto. : ok_hand:O usuário que criou originalmente a visualização ou procedimento SQL foi excluído. Se você recriar esse usuário, ele deverá solucionar o seu erro.
fonte
SELECT
eEXECUTE
ao usuário adicionado. Encontrei isso ao exportar um backup de banco de dados de um servidor para outro, onde o usuário que criou as rotinas não existia no servidor de teste.DROP
depois reCREATE
) usar um usuário válido no sistema de destino deve fazer o truque.UPDATE mysql.proc SET definer = 'my_new_user@localhost' WHERE db = 'mydatatbase';
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Eu recebi o mesmo erro depois de atualizar o mysql.
O erro foi corrigido após este comando:
fonte
Se o usuário existir, então:
fonte
Crie o usuário excluído assim:
ou
fonte
ERROR 1142 (42000): TRIGGER command denied to user 'web2vi'@'%' for table 'foo'
e deve adicionar este comandogrant all on *.* to 'web2vi'@'%' identified by ''
após a criação do usuárioSiga esses passos:
Espero que ajude
fonte
A solução é apenas uma consulta de linha única, como abaixo:
Substitua
ROOT
pelo seu nome de usuário mysql. SubstituaPASSWORD
pela sua senha do mysql.fonte
flush privileges
depois disso e funciona. Obrigado.Corrigido executando os seguintes comentários.
se você estiver recebendo
some_other
em vez dissoweb2vi
, precisará alterar o nome de acordo.fonte
Para futuros googlers: recebi uma mensagem semelhante tentando atualizar uma tabela em um banco de dados que não continha exibições. Após algumas escavações, verificou-se que eu havia importado gatilhos nessa tabela e essas eram as coisas definidas pelo usuário inexistente. Soltar os gatilhos resolveu o problema.
fonte
O usuário 'web2vi' não existe no seu servidor mysql.
Consulte http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user
Se esse usuário existir, verifique em quais servidores ele pode acessar, embora eu achasse que seria um erro diferente (por exemplo, você pode ter web2vi @ localhost, mas está acessando o banco de dados como web2vi @% (em qualquer coisa)
fonte
correção rápida para contornar e despejar o arquivo:
fonte
--single-transaction
altera a maneira como o Lock Tables é implementado durante um despejo. Ou algo assim. Não me lembro de onde li, mas isso me ajudou a me sentir confortável com "apenas jogar a bandeira". Também estou desconfortável com inexplicáveis 'apenas faça isso' "respostas". De qualquer maneira, funcionou para o meu caso.exemplo:
fonte
Isso aconteceu comigo depois de mover o banco de dados de um servidor para outro servidor. Inicialmente, o definidor estava usando o host local e o usuário. No novo servidor, não temos esse usuário, e o host também foi alterado. Fiz uma cópia de segurança dessa tabela específica e removi todos os gatilhos manualmente do phpmyadmin . Depois disso, está funcionando bem para mim.
fonte
Eu tive o mesmo problema com o usuário root e ele funcionou para mim quando substituí
de
Portanto, se o usuário 'web2vi' tiver permissão para se conectar a partir de 'localhost', você pode tentar:
Estou conectado remotamente ao banco de dados.
fonte
Meus 5 centavos.
Eu tive o mesmo erro enquanto tentava selecionar uma visualização.
No entanto, o problema parece ser que essa exibição, selecionada de outra exibição que foi restaurada do backup de um servidor diferente.
e, de fato, SIM, o usuário era inválido, mas não era óbvio para onde desde o primeiro olhar.
fonte
Eu tive o mesmo problema minutos atrás, deparei-me com este problema após excluir um usuário não utilizado da tabela mysql.user, mas, ao fazer uma alteração alterada, foi corrigido, aqui está um comando útil que o torna muito simples:
Misture isso com a linha de comando do mysql (assumindo * nix, não familiarizado com o windows):
Nota: o comando gera um SELECT CONCAT extra no arquivo, causando
mysql -uuser -ppass databasename < alterView.sql
falha se você não o remover.Fonte: /dba/4129/modify-definer-on-many-views
fonte
Tente definir seu procedimento como
SECURITY INVOKER
O padrão do Mysql define a segurança dos procedimentos como "DEFINER" (CREATOR OF) .. você deve definir a segurança como "invocador".
fonte
Sua visualização, "view_quotes" pode ter sido copiada de um banco de dados diferente em que "web2vi" é um usuário válido em um banco de dados em que "web2vi" não é um usuário válido.
Adicione o usuário "web2vi" ao banco de dados ou altere a exibição (normalmente remover a parte DEFINER = 'web2vi' @ '%' e executar o script fará o truque)
fonte
No meu caso, a tabela teve um gatilho com um usuário DEFINER que não existia.
fonte
Da referência do MySQL de
CREATE VIEW
:Este usuário deve existir e é sempre melhor usar 'localhost' como nome do host. Portanto, acho que se você verificar a existência do usuário e alterá-lo para 'localhost' na exibição de criação, não terá esse erro.
fonte
O problema é claro - o MySQL não consegue encontrar o usuário especificado como definidor.
Encontrei esse problema depois de sincronizar o modelo de banco de dados do servidor de desenvolvimento, aplicá-lo ao localhost, fazer alterações no modelo e reaplicá-lo ao localhost. Aparentemente, havia uma visualização (modificada) definida e, portanto, não pude atualizar minha versão local.
Como consertar (facilmente) :
Nota: envolve a exclusão, portanto funciona bem para visualizações, mas verifique se você possui backup dos dados se tentar isso em tabelas.
PS: Esta não é uma solução adequada nem a melhor para todos. Acabei de publicá-lo como uma solução possível (e muito simples).
fonte
Você pode tentar isso:
fonte
Passei uma hora antes de encontrar uma decisão para um problema como esse. Mas, no meu caso, executei o seguinte:
Se você realmente deseja encontrar o problema, execute estes comandos um por um:
... e, depois de cada um deles, procure o campo 'definer'.
No meu caso, era um gatilho velho barbudo, que alguém dos desenvolvedores esqueceu de excluir.
fonte
Vá para a seção de edição de rotina e, na parte inferior, altere o Tipo de segurança de Definer para Invoker.
fonte
Uma ou várias visualizações foram criadas / registradas por outro usuário. Você precisará verificar o proprietário da visualização e:
'web2vi'
usando ALTER VIEWEu tive esse problema uma vez.
Eu estava tentando migrar visualizações, do BD1 para o BD2, usando o SQLYog. O SQLYog recriou as visualizações no outro DataBase (DB2), mas manteve o usuário do BD1 (onde eram diferentes). Mais tarde, percebi que as visualizações que eu estava usando na minha consulta estavam apresentando o mesmo erro que você, mesmo quando não estava criando nenhuma visualização.
Espero que esta ajuda.
fonte
Se este for um procedimento armazenado, você poderá:
Mas isso não é aconselhável.
Para mim, a melhor solução é criar o definidor:
fonte
quando o mysql.proc estiver vazio, mas o sistema sempre aviso "[email protected].%" para table_name não existe, basta fazer root na linha de comando do mysql e digitar:
sobre!
fonte
Isso aconteceu depois que eu importei um despejo no Windows 10 com a Comunidade MYSQL Workbench 6.3, com "root @% is not exist". Mesmo que o usuário existisse. Primeiro, tentei comentar o DEFINER, no entanto, isso não funcionou. Em seguida, substitui uma string em "root @%" por "root @ localhost" e reimportei o dump. Isso fez o truque para mim.
fonte
Tente isto Esta é uma solução simples
mais em https://stackoverflow.com/a/42183702/5407056
fonte
O usuário do banco de dados também parece fazer distinção entre maiúsculas e minúsculas; portanto, enquanto eu tinha um usuário raiz '@'%, não tinha um usuário ROOT '@'%. Alterei o usuário para maiúsculas via ambiente de trabalho e o problema foi resolvido!
fonte