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

Come risolvere i problemi di definizione di MySQL

Questo articolo illustra come risolvere i problemi che possono verificarsi quando il DEFINER viene utilizzato con gli oggetti archiviati MySQL (viste, trigger, funzioni e procedure archiviate).

Problema

Potrebbero verificarsi problemi nella visualizzazione o nell'esecuzione di oggetti archiviati MySQL (viste, trigger, funzioni e procedure archiviate). Ad esempio, potresti ricevere il seguente messaggio di errore in 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.

In alternativa, potresti riscontrare errori apparentemente casuali durante il funzionamento del sito Web o una perdita di funzionalità del database.

Causa

Il DEFINATORE viene utilizzato per specificare un account utente MySQL che può accedere a un particolare oggetto memorizzato. Tuttavia, possono verificarsi problemi quando l'account utente MySQL in un DEFINER l'attributo non corrisponde all'utente MySQL attualmente connesso. Ad esempio, ciò può verificarsi quando si utilizza phpMyAdmin di cPanel, che accede sempre come utente dell'account principale (cPanel) e non come utente del database definito dall'utente.

Allo stesso modo, questo problema può verificarsi dopo la migrazione di un sito se il DEFINER gli attributi nel database non vengono aggiornati con gli utenti del database del nuovo ambiente di hosting.

Risoluzione

Per risolvere questo problema, puoi provare ad accedere al database come utente del database a cui si fa riferimento nel DEFINER attributi. (Per determinare l'utente corretto del database, potrebbe essere necessario eseguire il dump del database ed esaminare il DEFINER attributi.) Esistono diversi modi per accedere come diversi utenti del database:

Metodo n. 1:utilizzare un'applicazione client MySQL

È possibile utilizzare un'applicazione client MySQL, come MySQL Workbench, per accedere al database come utente corretto del database. Sarai quindi in grado di modificare ed eseguire oggetti archiviati utilizzando l'identità corretta. Per informazioni su come utilizzare un'applicazione client MySQL per la connessione ai database, consulta questo articolo.

Metodo n. 2:usa il programma a riga di comando 'mysql'

In alternativa, puoi usare mysql programma da riga di comando per accedere al database come utente del database corretto. Sarai quindi in grado di modificare ed eseguire oggetti archiviati utilizzando l'identità corretta. Per informazioni su come utilizzare mysql programma da riga di comando, vedere questo articolo.

Metodo n. 3:usa un'installazione personalizzata di phpMyAdmin

Se non desideri utilizzare un'applicazione client MySQL o la riga di comando, puoi creare un'installazione autonoma di phpMyAdmin sul tuo account di hosting. Questa installazione personalizzata consente di accedere al database come utente del database corretto anziché come utente dell'account primario (cPanel). Per informazioni su come creare un'installazione personalizzata di phpMyAdmin, consulta questo articolo.

A volte, non puoi accedere a un database come l'utente del database a cui fa riferimento nel DEFINER attributi. Ad esempio, un sito che è stato migrato da un altro provider di hosting potrebbe avere convenzioni di denominazione MySQL diverse e potrebbe essere impossibile creare un utente del database con il nome corretto. In questo caso, devi fare quanto segue:

  1. Esegui il dump dell'intero database in un file. Per informazioni su come eseguire questa operazione, consultare questo articolo.
  2. Utilizza il tuo editor di testo preferito per aggiornare manualmente il DEFINER attributi per fare riferimento a un utente del database che controlli.
  3. Importa il database modificato nel tuo account. Per informazioni su come eseguire questa operazione, consultare questo articolo.
  4. Testare il nuovo database. Ora dovresti essere in grado di modificare ed eseguire oggetti archiviati utilizzando l'identità corretta.

Maggiori informazioni

Per ulteriori informazioni sui definitori, visitare https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.