non può accedere come utente root mysql dal normale account utente in ubuntu 16.04

124

Ho appena installato Ubuntu 16.04 LTS insieme ai pacchetti php , mariadb e nginx . Ho eseguito mysql_secure_installation e ho modificato la password di root.

Ora quando provo ad accedere a mysql usando l'account root mentre ho effettuato l'accesso a Ubuntu come account utente normale ottengo l'accesso negato.

Quando accedo utilizzando sudo mysql , mysql non mi chiede nemmeno la password. Se eseguo mysql_secure_installtion vedo che le vecchie impostazioni non sono mai state impostate in modo permanente.

Che cosa sto sbagliando?

    
posta codescope 02.05.2016 - 13:45

10 risposte

228

Recentemente ho aggiornato la mia Ubuntu 15.04 alla 16.04 e questo ha funzionato per me:

  1. Innanzitutto, connettiti in sudo mysql

    sudo mysql -u root
    
  2. Controlla i tuoi account presenti nel tuo db

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Elimina l'account root root @ localhost

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Ricrea il tuo utente

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Assegna le autorizzazioni al tuo utente (non dimenticare di svuotare i privilegi)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. Esci da MySQL e prova a riconnettersi senza sudo.

Spero che questo possa aiutare qualcuno:)

    
risposta data Loremhipsum 08.06.2016 - 11:04
79
  

Se installi 5.7 e non fornisci una password all'utente root , it   userà il plugin auth_socket . Questo plugin non interessa e   non ha bisogno di una password. Controlla solo se l'utente si sta connettendo   utilizzando un socket UNIX e quindi confronta il nome utente.

Tratto da Cambia password utente in MySQL 5.7 Con "plugin: auth_socket "

Quindi, per cambiare il plugin di nuovo in mysql_native_password :

  1. Accedi con sudo:

    sudo mysql -u root
    
  2. Cambia plugin e imposta una password con un singolo comando:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

Ovviamente puoi anche usare il comando precedente per impostare una password vuota.

Solo per il record, (e MariaDB < 10.2 utenti) c'è anche un altro modo di cambiare solo plugin senza fornire una password (lasciandola vuota):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;
    
risposta data Todor 23.07.2016 - 09:46
6

Il problema qui è che quando MariaDB o MySQL sono installati / aggiornati (specialmente se a un certo punto la radice è impostata senza una password) quindi nella tabella Utenti la password è effettivamente vuota (o ignorata), e il login dipende dal utente di sistema corrispondente a un utente MySQL. È possibile verificare ciò come segue passando a root di sistema, quindi digitare:

mysql -uroot -p

Quindi inserisci nessuna password o la password errata . Probabilmente sarai lasciato entrare. (Potresti anche essere in grado di accedere dalla radice unix semplicemente # mysql dato che la password è irrilevante e l'utente è definito).

Quindi cosa sta succedendo? Bene, se accedi come root e fai quanto segue:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

noterai auth_socket (che potrebbe leggere unix_socket su MariaDB). Questi socket ignorano le password e consentono all'utente corrispondente di Unix di senza un controllo della password. Questo è il motivo per cui puoi accedere con root ma non con un utente diverso.

Quindi la soluzione è aggiornare gli utenti per non utilizzare auth_socket/unix_socket e impostare correttamente una password.

Su MariaDB (& lt; 10.2) che è sulla versione 16 di Ubuntu a partire dal 2017 dovrebbe essere sufficiente:

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(È possibile che l'impostazione del plug-in per svuotarlo funzionerebbe. YMMV. Non l'ho provato.)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

In caso contrario:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

Quindi

FLUSH PRIVILEGES;

Per la cronaca, la soluzione che comporta l'eliminazione dell'utente e la sua creazione con '%' mi ha completamente escluso dal database e può causare altri problemi a meno che non si ottenga esattamente l'istruzione grant - più semplice aggiornare semplicemente il radice che hai già.

Nella mia esperienza, il problema si verifica solo con l'utente root, in quanto altri utenti verranno aggiunti manualmente non facenti parte di un'installazione / aggiornamento iniziale.

    
risposta data Gazzer 14.10.2017 - 06:18
2

Prova a creare un nuovo account mysql, per me ha funzionato (mysql 5.7.12):

  1. Accedi come sudo:

    sudo mysql -uroot
    
  2. Crea un nuovo utente e concedigli i privilegi (nessuna password):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Accedi come nuovo utente:

    mysql -uadmin
    
risposta data Alex Yakovlev 28.05.2016 - 11:37
2

Se hai installato MySQL / MariaDB dal repository di base, gli utenti non possono accedere a MySQL come utente root di MySQL dai loro login Unix (non applicabile se hanno sudo accesso)

  1. Accedi alla shell di root MySQL:

    $ sudo mysql -u root -p
    
  2. Esegui sotto le query:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Apri una nuova shell, quindi:

    $ mysql -u root -p
    

Fonte:

link

    
risposta data Gayan Weerakutti 02.12.2017 - 09:31
1

Prova prima questo codice,

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

e poi,

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

quindi premi Ctrl+Z e digita: bg per eseguire il processo dal primo piano allo sfondo, quindi verifica il tuo accesso con:

mysql -u root -proot
mysql> show grants;
    
risposta data ADHITHYA SRINIVASAN 28.05.2016 - 11:47
1

Se esegui il comando mysql sotto utente root, ti verrà concesso l'accesso senza richiesta di password, perché l'autenticazione socket è abilitata per root @ localhost. .

L'unico modo per impostare la password è passare all'autenticazione nativa come:

  

$ sudo mysql

     

mysql & gt; ALTER USER 'root' @ 'localhost' IDENTIFICATO CON   mysql_native_password BY 'test';

    
risposta data Vadiaz 26.07.2017 - 17:23
1

Ho dovuto fare due cose (grazie a @Todor e @Loremhipsum):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

e poi:

FLUSH PRIVILEGES;

Non consiglierei di eliminare l'utente root .

    
risposta data Franc Drobnič 03.01.2018 - 17:43
0

Ho adattato alcuni script di provisioning che ho creato per utilizzare MariaDB e mi sono imbattuto in questo esatto problema. Mettendo insieme un sacco di informazioni ecco una risposta di Gazzer che contiene davvero degli zeri nel problema; tutto si riduce all'impostazione auth_socket / unix_socket .

Quindi quando si utilizza MariaDB 5.5 (sotto Ubuntu 14.04) e MariaDB 10 sotto (Ubuntu 16.04), l'accesso a MySQL e l'esecuzione di questo comando risolvono immediatamente le cose:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

Le altre risposte, tra cui la la risposta più votata a partire da questo post di Loremhipsum - incoraggiano vere pratiche scorrette raccomandando di lasciar perdere un utente e quindi ricrearli. Per me, questa è una soluzione piuttosto radicale. La soluzione migliore / più semplice per annullare il valore plugin , i privilegi di svuotamento e andare avanti con la vita.

    
risposta data JakeGould 20.10.2017 - 02:54
-1

Ho avuto lo stesso problema e il seguente problema è stato risolto:

mysql_upgrade --force
    
risposta data klob 03.05.2016 - 08:48

Leggi altre domande sui tag