Impossibile eliminare l'utente anonimo da mysql.user


15

Sto cercando di DROP gli utenti anonimi dal mio database mysql.users. Tuttavia, ho avuto comportamenti strani. Quando inserisco il comando:

DROP User ''@'WOPR';

Stavo ricevendo un messaggio di errore generico. Quindi, ho riavviato il mio computer e l'ho provato di nuovo. Questa volta ho avuto la risposta

Query OK, 0 rows affected.

Ma quando ho inserito

SELECT User, Host, Password FROM mysql.user WHERE User='';

Il ritorno è:

+------+------+----------+
| User | Host | Password |
+------+------+----------+
|      | WOPR |          |
+------+------+----------+

(WOPR è il mio nome host)

Eseguo il comando

DROP User ''@'WOPR';

e ottieni lo stesso risultato.

Sto eseguendo una nuova installazione di MySQL 5.5 su Arch Linux, versione 2.6.33 del kernel.

Qualcuno sa cosa può causare questo comportamento?


Spargi la voce per inviare domande di questo tipo a DBA StackExchange !!!
RolandoMySQLDBA

Risposte:


15
DELETE FROM mysql.user WHERE user='' AND host='WOPR';
FLUSH PRIVILEGES;

Questo dovrebbe farlo per te.

Provaci !!!

AVVERTIMENTO

MySQL ha alcuni utenti preinstallati in mysql.user. Inoltre, mysql.db viene fornito con due utenti che hanno accesso anonimo e privilegi completi per testare i database.

Fallo e basta

SELECT * FROM mysql.db \G

e vedrai che chiunque si connette al test o a qualsiasi database che inizia con test_ può praticamente fare tutto nel database di test. Ciò è negativo poiché una persona con pieno accesso a qualsiasi database di test può consumare un disco nel giro di pochi minuti.

Esempio:

use test
CREATE TABLE junk (INT a) ENGINE=MyISAM;
INSERT INTO junk VALUES (1);

OK, un grosso problema. Crea una tabella con 4 byte.

Ora provando a eseguire questa istruzione SQL 30 volte:

INSERT INTO junk SELECT * FROM junk;

Ehi, una tabella istantanea con 1.073.741.824 righe (4 GB + file) !!! Imaging con diritti completi su un database di test in cui è possibile creare questo tipo di caos su un disco.

Il mio consiglio è di eseguire questo per ripulire l'accesso dell'utente di prova:

DELETE FROM mysql.db WHERE db LIKE 'tes%' AND user='';
FLUSH PRIVILEGES;

Per ulteriori chiarimenti, vedi il mio post MySQL: Perché ci sono voci "test" in mysql.db?

Saluti !!!


Ciao Rolando, questo ha funzionato, grazie! Attualmente sto riparando l'accesso al mio database di test.
SirTasty,

Non esiste un modo per utilizzare la drop usersintassi invece di modificare mysql.userdirettamente la tabella sottostante ?
Pacerier,

1
@Pacerier Per favore guarda la domanda originale. Il vero problema è che la DROP USERsintassi non funziona quando il campo utente è vuoto (stringa vuota). Devi farlo nel modo specificato dalla risposta.
RolandoMySQLDBA,

@RolandoMySQLDBA, ci sono altre soluzioni oltre all'hacking con il mysql.usertavolo?
Pacerier,

@Pacerier Se leggi il mio ultimo link, ti ​​accorgerai che MySQL (ora Oracle) inserisce due file direttamente mysql.dbdurante l'installazione che consentiranno agli utenti anonimi di accedere a un database di test. È interessante notare che mi è stato detto che l'installazione di Percona Server elimina quelle righe prima che sia completata ( dba.stackexchange.com/questions/66584/… ). Dato che stai usando MySQL, esegui mysql_secure_installation o elimina queste due righe da solo.
RolandoMySQLDBA,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.