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

Como solucionar problemas do definidor do MySQL


Este artigo discute como solucionar problemas que podem ocorrer quando o DEFINER O atributo é usado com objetos armazenados do MySQL (visualizações, gatilhos, funções e procedimentos armazenados).

Problema


Você pode ter problemas ao visualizar ou executar objetos armazenados do MySQL (exibições, gatilhos, funções e procedimentos armazenados). Por exemplo, você pode receber a seguinte mensagem de erro no phpMyAdmin:
Error in processing request: No routine with name 'example' found in database 'example_db'. You might be lacking the necessary privileges to edit this routine.

Como alternativa, você pode enfrentar erros aparentemente aleatórios durante a operação do site ou perda da funcionalidade do banco de dados.

Causa


O DEFINER O atributo é usado para especificar uma conta de usuário MySQL que pode acessar um objeto armazenado específico. No entanto, podem ocorrer problemas quando a conta de usuário MySQL em um DEFINER O atributo não corresponde ao usuário MySQL conectado no momento. Por exemplo, isso pode ocorrer ao usar o phpMyAdmin do cPanel, que sempre faz login como o usuário da conta principal (cPanel), e não como um usuário de banco de dados definido pelo usuário.

Da mesma forma, esse problema pode ocorrer após a migração de um site se o DEFINER atributos no banco de dados não são atualizados com os usuários do banco de dados do novo ambiente de hospedagem.

Resolução


Para resolver esse problema, você pode tentar fazer login no banco de dados como o usuário do banco de dados referenciado no DEFINER atributos. (Para determinar o usuário correto do banco de dados, talvez seja necessário despejar o banco de dados e examinar o DEFINER atributos.) Existem várias maneiras de fazer login como diferentes usuários do banco de dados:
Método nº 1:use um aplicativo cliente MySQL

Você pode usar um aplicativo cliente MySQL, como MySQL Workbench, para efetuar login no banco de dados como o usuário correto do banco de dados. Você poderá editar e executar objetos armazenados usando a identidade correta. Para obter informações sobre como usar um aplicativo cliente MySQL para se conectar aos seus bancos de dados, consulte este artigo.
Método #2:Use o programa de linha de comando 'mysql'

Alternativamente, você pode usar o mysql programa de linha de comando para efetuar login no banco de dados como o usuário correto do banco de dados. Você poderá editar e executar objetos armazenados usando a identidade correta. Para obter informações sobre como usar o mysql programa de linha de comando, consulte este artigo.
Método nº 3:Use uma instalação personalizada do phpMyAdmin

Se você não quiser usar um aplicativo cliente MySQL ou a linha de comando, você pode criar uma instalação autônoma do phpMyAdmin em sua conta de hospedagem. Essa instalação personalizada permite que você efetue login no banco de dados como o usuário correto do banco de dados em vez de como o usuário da conta primária (cPanel). Para obter informações sobre como criar uma instalação personalizada do phpMyAdmin, consulte este artigo.

Às vezes, você não pode fazer login em um banco de dados como o usuário do banco de dados referenciado no DEFINER atributos. Por exemplo, um site que foi migrado de outro provedor de hospedagem pode ter convenções de nomenclatura MySQL diferentes e pode ser impossível criar um usuário de banco de dados com o nome correto. Neste caso, você deve fazer o seguinte:
  1. Descarregue todo o banco de dados em um arquivo. Para obter informações sobre como fazer isso, consulte este artigo.
  2. Use seu editor de texto preferido para atualizar manualmente o DEFINER atributos para referenciar um usuário de banco de dados que você controla.
  3. Importe o banco de dados modificado para sua conta. Para obter informações sobre como fazer isso, consulte este artigo.
  4. Teste o novo banco de dados. Agora você deve ser capaz de editar e executar objetos armazenados usando a identidade correta.

Mais informações


Para obter mais informações sobre definidores, visite https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.