È un insieme normale di privilegi MySQL?


9

Usando phpmyadmin su un'impostazione locale di test wamp e oltre agli stati del titolo, ci sono 3 utenti contrassegnati come user = ANY, password = NO, come:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

Nessuno dei 3 utenti ha privilegi specifici per le tabelle, quindi sembra che non possano fare molto. Si tratta di una sorta di misura di sicurezza generica per affermare esplicitamente che "qualsiasi" utente che non rientra in nessun altro gruppo di utenti non ha privilegi?


Questa è in realtà un'ottima domanda perché mysql viene fornito con autorizzazioni predefinite che non sono pubblicate. +1 !!!
RolandoMySQLDBA,

Risposte:


6

In realtà, questi tre account utente sono in realtà abbastanza pericolosi. Costituiscono una grandissima minaccia per testare i database.

Sfortunatamente, mysql ha pieno accesso ai database di test. Come puoi trovarli?

Esegui questa query:

 SELECT user,host,db from mysql.db;

All'installazione di mysql, vedrai due righe che danno pieno accesso a qualsiasi database chiamato 'test' o i cui primi 5 caratteri sono 'test_'.

Perché questo è un problema ???

Prova a eseguire questo comando:

$ mysql -u'' -Dtest

Avrai collegato il database di test senza una password.

Ora crea una tabella e caricala con una riga:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

OK, un grosso problema. Potresti raddoppiare questa tabella nella dimensione 30 volte ???

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

Che cosa ottieni ?? Una tabella con 1.073.741.824 righe. Facilmente, 4 GB +.

Immagina di creare qualsiasi tabella di qualsiasi dimensione. Che ne dici di creare un gruppo di tabelle nel database di test e accedervi liberamente a piacimento?

La cosa migliore che puoi fare in queste circostanze è eseguire questa query:

DELETE FROM mysql.db;

e riavvia mysql. Quindi, quei tre account verranno resi correttamente non operativi.

Provaci !!!

AGGIORNAMENTO 2011-09-12 10:00 EDT

Questo elimina:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

è proprio ciò di cui hai bisogno per un'installazione iniziale. Tuttavia, se hai già utenti stabiliti, puoi invece eseguire questo:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

Ciò rimuoverà le due autorizzazioni DB specifiche.

Come ho detto nella mia risposta, le tre autorizzazioni sono molto pericolose per i database di test. L'esecuzione di questo DELETE neutralizzerà quegli account per avere diritti completi per testare i database.


Grazie per la spiegazione, ma ELIMINA DA mysql.db eliminerà qualcos'altro da una parte di quei 3 utenti? Non voglio cancellare nessun dato / privilegio a parte quelli 3
Chris,

@Chris - Ho aggiornato la mia risposta 3 ore fa per rispondere al tuo commento.
RolandoMySQLDBA,

-1

Il pericolo di tenere questi account anonimi è già stato ben spiegato.

Il manuale fornisce un elenco di controllo completo dei passaggi da eseguire per " Proteggere gli account MySQL iniziali ".

In particolare, la sezione "Assegnazione di password account anonime" consiglia di rimuovere questi account.

Inoltre, il capitolo "Protezione dei database di test" consiglia:

Per impostazione predefinita, la mysql.dbtabella contiene righe che consentono l'accesso di qualsiasi utente al testdatabase e ad altri database con nomi che iniziano con test_. (...) Ciò significa che tali database possono essere utilizzati anche da account che altrimenti non dispongono di privilegi. Se si desidera rimuovere l'accesso di qualsiasi utente ai database di test, procedere come segue:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) Con la modifica precedente, solo gli utenti che dispongono di privilegi o privilegi di database globali concessi esplicitamente per il database di prova possono usarlo.

In particolare, su sistemi non Windows, si consiglia di eseguire lo mysql_secure_installationscript. Credo che il programma di installazione di Windows offra diversi profili di installazione. Alcuni disabiliteranno automaticamente le impostazioni non sicure. In caso contrario, l'elenco di controllo dovrà essere eseguito manualmente.

Prestare attenzione con installatori di terze parti come WAMP. Le autorizzazioni predefinite indicate nel manuale MySQL ufficiale potrebbero non essere sempre applicabili a queste installazioni personalizzate (come "al di fuori dell'ambito del manuale). Naturalmente, per un server di produzione, le installazioni WAMP e simili devono essere evitate a tutti i costi .


perché il downvote su questa risposta?
user12345,
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.