mysql (mariadb) ERRORE 1698 (28000): accesso negato per l'utente 'root' @ 'localhost'


23

Sto lavorando su Xubuntu 15.04. Ho già installato il server MariaDB su vari sistemi e durante l'installazione mi è sempre stata richiesta una password di root. Questa volta, tuttavia, non ricordo di aver chiesto la password. Quando provo ad accedere senza una password (o una password vuota), ottengo l' Access denied for user 'root'@'localhost'errore. Ho provato a disinstallare completamente il pacchetto entro

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

Quando ho reinstallato, non mi veniva ancora chiesta la password di root.

Ho provato l' mysqld --skip-grant-tablesapproccio da mysql su come risolvere l'accesso negato per l'utente 'root' @ 'localhost' . Posso modificare la password per l'utente root nel database mysql - almeno il valore dell'hash cambia - ma non riesco ancora ad accedere con la nuova password dopo un riavvio del server mysql. Ottengo ancora lo stesso errore.

L'utente debian-sys-maint non esiste. Quindi, non posso usarlo per riparare nulla.

Qualche idea cos'altro potrei provare?


Un thread utile con la stessa domanda su StackOverflow: stackoverflow.com/questions/39281594/…
Kevin - Ripristina Monica

Risposte:


36

Devi reimpostare la password. quindi per quello

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

9
La "magia" non ovvia di questo approccio è che l'utente del sistema operativo root è in grado di accedere al database senza dover specificare una password perché plugin: auth_socketè abilitato, per impostazione predefinita. In altre parole, non è necessario utilizzare --skip-grant-tablescome sarebbe stato necessario nelle versioni precedenti di MySQL. (Inoltre, tecnicamente, questa misura non "reimposta la password"; sta disabilitando un plugin.)
Ben Johnson

1
+1, puoi spiegare perché?
A1Gard

4
Questo approccio causerà problemi in seguito. Se si disabilita il plug-in, il processo cron giornaliero si interromperà poiché si presume che possa accedere con quel plug-in. Vedi la mia risposta per i dettagli.
colan

11

L'idea con il nuovo set-up è che non dovresti usare le password. Vedi il plugin di autenticazione UNIX_SOCKET per i dettagli.

Ciò che è particolarmente rilevante è il contenuto di /usr/share/doc/mariadb-server-10.0/README.Debian.gz su Ubuntu 16.04:

Nelle nuove installazioni non viene impostata alcuna password di root e non viene più creato alcun utente debian-sys-maint. Invece l'account root MariaDB è impostato per essere autenticato usando il socket unix, ad es. Qualsiasi chiamata mysqld da root o via sudo permetterà all'utente di vedere il prompt mysqld.

Non puoi mai eliminare l'utente "root" di mysql. Sebbene non sia impostata alcuna password, il plug-in unix_auth garantisce che possa essere eseguito localmente solo come utente root.

Le credenziali in /etc/mysql/debian.cnf specificano l'utente che viene utilizzato dagli script init per arrestare il server ed eseguire la logrotazione. In passato si trattava dell'utente debian-sys-maint che non viene più utilizzato poiché il root può essere eseguito direttamente.

Quindi se disabiliti quel plug-in per root e imposti una password, il cron job giornaliero si interromperà poiché presume che accederà come root senza una password, ma con il plug-in.

Più tardi dice:

Gli script devono essere eseguiti quando un utente dispone delle autorizzazioni necessarie ed essere identificato tramite unix_socket.

Quindi sembra che le password non debbano più essere utilizzate dalle applicazioni.


1
Ho appena riscontrato il problema che descrivi: "So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."L'implicazione non ovvia del plug-in di autenticazione UNIX_SOCKET abilitato (che ora è l'impostazione predefinita) è che la capacità di autenticarsi come utente del database radice con una password è disabilitata. Da nessuna parte su mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin si menziona questa notevole limitazione. Di conseguenza, è impossibile accedere come root, ad esempio tramite SSH.
Ben Johnson,

2

Ho risolto il problema seguendo la risposta di questo post:

Impossibile ripristinare la password di root di MySQL (MariaDB)

Uno deve cambiare il campo plugin di mysql.user per tutte le radici in una stringa vuota.


Questo problema è descritto qui: percona.com/blog/2016/03/16/…
antonu17

3
Questo approccio causerà problemi in seguito. Se si disabilita il plug-in, il processo cron giornaliero si interromperà poiché si presume che possa accedere con quel plug-in. Vedi la mia risposta per i dettagli.
colan

1

L'ho fatto eseguendo questo comando, subito dopo l'installazione:

$ sudo mysql_secure_installation

Al primo passaggio, la password è vuota, quindi basta premere Invio.


1
Non è vuoto se già impostato, che il mio pw dimenticato è ... quindi ancora non riesco ad accedere
Dave Everitt

0

Ho avuto lo stesso problema su un raapberry pi con tratto. La mia soluzione era quella di creare un nuovo utente con tutti i privilegi nel modo seguente:

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

Ora posso accedere e noi l'utente "admin" come superutente.

Spero che questo possa aiutare qualcuno.


0

Basta usare sudo mysql -u root- tutto qui


Dettagli: le versioni più recenti si autenticano su mysql usando l'autenticazione di sistema. Quindi, se riesci ad accedere al sistema operativo, si presume che tu sia anche db root. Puoi confermarlo emettendo sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Dovresti vedere qualcosa del genere (forse con auth_socketin altre distro)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+

Ho effettuato l'accesso come root, ma per me questo comando richiede ancora la password di root di MariaDB ... che ho dimenticato :-(
Dave Everitt il
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.