2013-07-23 91 views
40

Prima di pensare che si tratti di una domanda doppia, credo di avere un caso unico, anche se un po 'debole.Rimuovere i privilegi dal database MySQL

Pochi giorni fa, ho aggiornato la versione di MySQL sul mio server Ubuntu 10.04 a 5.3.3 (è in anticipo rispetto alle versioni di Ubuntu per 10.04). Oggi ho tentato di accedere a phpMyAdmin per qualcosa e ho scoperto l'errore un po 'temuto di Connection for controluser as defined in your configuration failed.

Dopo aver seguito le descrizioni di alcune domande SO su come risolvere il problema, sono rimasto bloccato.

  • Ho tentato di reconfigure phpMyAdmin, senza successo.
  • Ho tentato di effettuare il uninstall phpMyadmin and reinstall, ma non è stato possibile rimuovere i privilegi dal db e non è riuscito.
  • Ho quindi provato a manually remove the privileges dell'utente - un po 'scioccamente, potrei aggiungere - dal db, quindi rilasciare il db, quindi l'utente (con flush privileges).
  • ho lasciato cadere l'intera installazione di phpMyAdmin completamente (eliminando l'applicazione e la directory/etc/phpMyAdmin) e reinstallato (usando apt-get), ma ha detto che le autorizzazioni per l'utente phpMyAdmin esistevano già:

granting access to database phpmyadmin for [email protected]: already exists

Quindi, ecco quello che mi rimane. Ho una borsa di studio che non posso modificare, né revocare:

mysql> show grants for 'phpmyadmin'@'localhost'; 
+-------------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                     | 
+-------------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' | 
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost'            | 
+-------------------------------------------------------------------------------------------------------------------+ 
2 rows in set (0.26 sec) 

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost'; 
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost' 

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost' identified by 'trustno1'; 
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on host 'localhost' 

(Non ti preoccupare, io non uso più la password, ma era la password utilizzata in precedenza e non è la password che ho scelto per la nuova installazione di phpmyadmin).

Come rimuovere completamente tali concessioni/privilegi? Sono felice di ricominciare da capo se necessario (phpmyadmin che è, non il db).

risposta

82

Il privilegio USAGE in mysql significa semplicemente che non ci sono privilegi per l'utente 'phpadmin' @ 'localhost' definito a livello globale *.*. Inoltre, lo stesso utente ha il privilegio ALL sul database phpmyadmin phpadmin.*.

Quindi, se si desidera rimuovere tutti i privilegi e iniziare tutto da zero effettuare le seguenti operazioni:

  • Revoca tutti i privilegi a livello di database:

    REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';

  • goccia l'utente ' phpmyadmin '@' localhost '

    DROP USER 'phpmyadmin'@'localhost';

Questa procedura rimuoverà completamente l'utente dall'istanza, ciò significa che è possibile ricrearlo da zero.

Per fornire un po 'di informazioni su quanto descritto sopra: non appena viene creato un utente, viene compilata la tabella mysql.user. Se si guarda su un record, vedrai l'utente e tutti i privilegi impostati su 'N'.Se fai un show grants for 'phpmyadmin'@'localhost'; vedrai, l'output già familiare, sopra. Semplicemente tradotto in "nessun privilegio a livello globale per l'utente". Ora la tua sovvenzione ALL a questo utente a livello di database, questa sarà memorizzata nella tabella mysql.db. Se fai un SELECT * FROM mysql.db WHERE db = 'nameofdb'; vedrai uno 'Y' su ogni privato.

Sopra descritto mostra lo scenario che si ha sul db al momento. Quindi avere un utente con il solo privilegio USAGE significa che questo utente può connettersi, ma oltre a SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS; non ha altri privilegi.

+2

Hai bisogno di "FLUSH PRIVILEGES" dopo questo? –

+0

Non ho potuto guardarlo fino ad oggi, e la tua risposta ha risolto il problema dei privilegi, grazie. Tuttavia, rimane il mio errore 'Connection for controluser as defined in configuration configuration' ma rimane un problema diverso. – Cyntech

+1

'DROP USER' è tutto ciò che serve per rimuovere completamente l'accesso degli utenti dalle tabelle mysql.user e mysql.db. 'REVOKE' semplicemente commuta i flag di autorizzazione su" N "in una o entrambe le tabelle per le autorizzazioni specificate, ma lascia intatto l'utente. E sì, è necessario 'FLUSH PRIVILEGES' dopo l'istruzione' REVOKE', ma non dopo un'operazione 'DROP'. –

12

Come nota a margine, il motivo revoke usage on *.* from 'phpmyadmin'@'localhost'; non funziona è piuttosto semplice: non esiste una sovvenzione denominata USAGE.

The actual named grants are in the MySQL Documentation

La concessione USAGE è una borsa di logica. Come? 'phpmyadmin' @ 'localhost' ha una voce in mysql.user dove user = 'phpmyadmin' e host = 'localhost'. Qualsiasi riga in mysql.user significa semanticamente USAGE. L'esecuzione di DROP USER 'phpmyadmin'@'localhost'; dovrebbe funzionare correttamente. Sotto il cofano, è davvero facendo:

DELETE FROM mysql.user WHERE user='phpmyadmin' and host='localhost'; 
DELETE FROM mysql.db WHERE user='phpmyadmin' and host='localhost'; 
FLUSH PRIVILEGES; 

Pertanto, la rimozione di una riga da mysql.user costituisce esecuzione REVOKE USAGE, anche se REVOKE USAGE non può letteralmente essere eseguito.