Skip to content


All’appello root è assente

**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:

  1. 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.
  2. 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
  3. 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.

  4. 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.
  5. rientramo nella consolle questa volta con il solito metodo usando l’utente appena aggiunto

    mysql -u toor -p
  6. e creiamo finalmente l’utente root nel modo canonico:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY ' ' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  7. 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?

Posted in system administration.

Tagged with , , , , .


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.