**9/4/2010: ho dovuto aggiornare la procedura perchè la vecchia non permetteva al nuovo utente root di concedere i privilegi. Ora sembra tutto a posto.**
Mi è capitata un’installazione di mysql senza l’utente di root e senza altri utenti che avessero privilegi di amministrazione.
Questo quindi impediva ogni utilizzo del db, ovviamente la reinstallazione non era un’opzione e quindi ho dovuto escogitare un sistema.
Dopo un po’ di ricerche ho definito questa procedura:
- Arresto di mysqld.
uccidendo il demone
kill `cat /var/run/mysqld/mysql.pid`
Sono essenziali i backticks (`) perchè sostituiscono alla stringa l’output del comando; il loro codice ASCII è 96.
Probabilmente il resto della procedura funziona anche con un semplice
service mysqld stop
o analoghi, fate sapere se provate. - Riavvio del servizio in una modalità che ci consenta spazio di manovra, quindi
mysqld_safe --skip-grant-tables
dove l’opzione –skip-grant-tables fa tutta la magia che ci serve, portandoci in un mondo dove non abbiamo più bisogno di un utente per connetterci a mysql - ed infatti la connessione al server
mysql
ci lascia nella consolle di mysql liberi di creare un nuovo utente.Fermi là illusi
CREATE USER bla bla
non funziona, questa modalità non permette certi giochini quindi si fa tutto a mano.
USE mysql;
INSERT INTO user VALUES ('localhost','toor','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');
FLUSH PRIVILEGES;
il FLUSH in fondo è essenziale, perchè altrimenti i privilegi faticosamente inseriti non verranno recepiti; a proposito le ‘Y’ sono 26. - non ci resta che uscire dalla consolle, uccidere di nuovo il demone con il kill di cui sopra e riavviare il servizio con il vostro comando preferito.
-
rientramo nella consolle questa volta con il solito metodo usando l’utente appena aggiunto
mysql -u toor -p
-
e creiamo finalmente l’utente root nel modo canonico:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-
dopo aver testato il funzionamento del nuovo(?!) utente root cancelliamo l’ utente toor perchè è pericoloso lasciare in giro due amministratori
DELETE FROM mysql.user WHERE User LIKE 'toor';
La procedura è semplice e veloce; ora che è anche testata si potrebbe anche saltare la parte di creazione dell’utente ‘toor’ e buttare dentro direttamente root, ma io non rischierei, quella query lunga e tutta uguale è sinistramente “error prone” (come dicono anche sul sito ufficiale di mysql).
Aproposito, ‘toor’ è il contrario di ‘root’, che sia l’amministratore buono che tutti cercano?
0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.