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


382

Sto configurando un nuovo server e continuo a riscontrare questo problema.

Quando provo ad accedere al database MySQL con l'utente root, ottengo l'errore:

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

Non importa se mi collego tramite il terminale (SSH), tramite PHPMyAdmin o un client MySQL, ad esempio Navicat. Tutti falliscono.

Ho cercato nella tabella mysql.user e ho ottenuto quanto segue:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Come puoi vedere, root dovrebbe avere accesso.

Il server è abbastanza semplice, poiché ho cercato di risolvere questo problema per un po 'di tempo ..

Esegue Ubuntu 16.04.1 LTS con Apache, MySQL e PHP, in modo che possa ospitare siti Web e iRedMail 0.9.5-1, in modo che possa ospitare la posta.

L'accesso al database MySQL funziona bene prima di installare iRedMail. Ho anche provato, basta installare iRedMail, ma poi root, inoltre, non funziona ...

Se qualcuno potesse dirmi come posso risolvere il mio problema di accesso a MySQL o come installo iRedMail, oltre a un'installazione MySQL esistente. E sì, ho provato i suggerimenti per l' installazione e non riesco a trovare quelle variabili nei file di configurazione.


Ho seguito questo link e la prima opzione ha funzionato per me: askubuntu.com/questions/763336/…
Mikael Arhelger

3
sudo mysql_secure_installationè il modo più semplice per risolverlo
Sergey Ponomarev,

Risposte:


1121

Alcuni sistemi come Ubuntu, mysql utilizza per impostazione predefinita il plug-in UNIX auth_socket .

Fondamentalmente significa che: db_users che lo utilizza, sarà "auth" dalle credenziali dell'utente di sistema. Puoi vedere se il tuo rootutente è configurato in questo modo procedendo come segue:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Come puoi vedere nella query, l' rootutente sta usando il auth_socketplugin

Ci sono 2 modi per risolvere questo:

  1. È possibile impostare l'utente root per utilizzare il mysql_native_passwordplug-in
  2. Puoi crearne uno nuovo db_usercon te system_user(consigliato)

Opzione 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Opzione 2: (sostituisci YOUR_SYSTEM_USER con il nome utente che hai)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Ricorda che se usi l'opzione # 2 dovrai connetterti a mysql come nome utente di sistema ( mysql -u YOUR_SYSTEM_USER)

Nota: su alcuni sistemi (ad es. Debian stretch) il plugin 'auth_socket' è chiamato 'unix_socket' , quindi il comando SQL corrispondente dovrebbe essere:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Aggiornamento: dal commento di @ andy sembra che mysql 8.xx abbia aggiornato / sostituito il auth_socketper caching_sha2_passwordNon ho una configurazione di sistema con mysql 8.xx per testare questo, tuttavia i passaggi sopra dovrebbero aiutarti a capire il problema. Ecco la risposta:

Una modifica rispetto a MySQL 8.0.4 è che il nuovo plug-in di autenticazione predefinito è "caching_sha2_password". Il nuovo 'YOUR_SYSTEM_USER' avrà questo plug-in di autenticazione e ora puoi accedere dalla shell bash con "mysql -u YOUR_SYSTEM_USER -p" e fornire la password per questo utente al prompt. Non è necessario il passaggio "UPDATE SET utente plug-in". Per l'aggiornamento del plugin di autenticazione 8.0.4 predefinito, consultare https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/


5
L'opzione 1 ha funzionato per me. Ma poi dovevo anche correre sudo gedit /etc/phpmyadmin/config.inc.php. Poi ho fatto una ricerca AllowNoPassworde decommentato entrambe le righe che lo contenevano. Quindi sono stato in grado di accedere come root senza password.
Joe,

7
L'opzione 2 funziona. Penso che sia sempre la migliore pratica per creare un nuovo utente e usare lasciando root per essere lì!
PasinduJay

2
il IDENTIFIED BY ''pezzo dovrebbe probabilmente essereIDENTIFIED BY 'YOUR_PASSWD'
YakovL

4
Finalmente una risposta che funziona davvero !! Ci sono milioni di risposte là fuori che dicono di fare mysqld_safe --skip-grant-tablesecc, e non ha funzionato.
Stewart,

4
Ok, come fare, se sudo mysql -u root -pnon mi fa entrare?
Hrvoje T,

173

Controlla qui:

La NUOVA versione di MYSQL funziona in questo modo.

Nel nuovo my-sql se la password viene lasciata vuota durante l'installazione, si basa sul auth_socketplug-in.

Il modo corretto è accedere a my-sql con sudoprivilegio.

$ sudo mysql -u root -p

E quindi aggiornando la password usando:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Fatto ciò, stop and startil server mysql.

$  sudo service mysql stop
$  sudo service mysql start

Per i dettagli completi è possibile fare riferimento a questo link .

Commenta per qualsiasi dubbio.


4
Questo ha funzionato per me usando Ubuntu 18. Grazie mille.
Peter Drinnan,

10
Ha funzionato anche su Ubuntu 18.04
sgtkuncoro il

2
Esattamente quello che stavo cercando. Grazie :) Ha lavorato su Ubuntu 18
Manthan_Admane il

2
questo ha funzionato come un incanto, lubuntu 19.04
Kvvaradha,

3
Funziona bene Il link è utile
kjohri,

9

Stavo riscontrando questo problema su una VM Debian 8 con cui interagivo tramite Putty sul desktop di Windows 10.

Ho provato i vari suggerimenti qui, ma niente ha funzionato e sto eseguendo MariaDB sull'host Debian. Alla fine ho scoperto che non ero in grado di avviare il server db in modalità provvisoria, ma non avevo bisogno e i seguenti comandi hanno funzionato per me, ovvero consentire a un utente MySql appena creato di accedere al server MySql / MariaDB:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Se quanto sopra non funziona abbastanza per te, segui i passaggi descritti nel post di zetacu sopra ( zetacu ), quindi segui i miei passi.

Ora dovresti essere in grado di utilizzare un client terminale remoto e accedere in modo sicuro a mysql usando il comando:

mysql -u your_user_name -p

* digitare la password quando richiesto


Così semplice. Bene, solo il primo comando non consente di eseguire il secondo, quindi lo modificherò modificando - per favore, vedi se ho ragione ...
Kokbira,

7

Vorrei suggerire di rimuovere la connessione Mysql -

AGGIORNAMENTO-Questo è per Mysql versione 5.5, se la tua versione è diversa, cambia la prima riga di conseguenza

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

E installa di nuovo Ma questa volta imposta tu stesso una password di root. Ciò farà risparmiare molto sforzo.

sudo apt-get update
sudo apt-get install mysql-server

@ingernet forse è a causa di alcuni altri problemi che hai trascurato durante l'installazione di nuovo
Eminem347

@PJBrunet forse la tua versione di Mysql è diversa
Eminem347,

Abbastanza giusto, ma una soluzione per tutti gli usi è la migliore.
PJ Brunet,

6

Dopo ore di lotta senza soluzione qui, questo ha funzionato per me, quindi ho trovato un video di YouTube in cui si dice che la colonna della password è ora chiamata authentication_string. Quindi sono stato in grado di cambiare la mia password come segue: prima di tutto entrare in mysql dal terminale

sudo mysql

quindi all'interno di mysql digitare qualunque cosa dopo mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

a questo punto sei fuori da mysql tornando al tuo normale terminal. È necessario riavviare mysql affinché questo abbia effetto. per quel tipo il seguente:

sudo service mysql restart

Fare riferimento a questo collegamento video per una migliore comprensione


5

passo 1. sudo mysql -u root -p

passo 2. USE mysql;

passaggio 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Qui 'admin' è la tua nuova password, puoi cambiarla.

passaggio 4. exit

Grazie. Hai fatto.


5

Non c'è bisogno di sudo

Il database è inizializzato con 2 account con tutti i privilegi: il primo è "root" che è inaccessibile e il secondo con il tuo nome utente (verifica con comando whoami).

Per abilitare l'accesso all'account di root, devi accedere con il tuo nome utente

mysql -u $(whoami)

e cambia manualmente la password per root

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

Accedi come 'root'

mysql -u root -p

Sei la risposta corretta per la versione attuale di mysql, grazie!
Hugo S,

3

Primo passo: vai su /etc/phpmyadmin/config.inc.php quindi linee di commento in cui trovi AllowNoPassword. Secondo passaggio: accedi al tuo account predefinito mysql

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

e questo è tutto!


3

Ha funzionato per me:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3

Ho anche affrontato lo stesso problema per la prima volta.

Ora è stato risolto:

Innanzitutto, copia il /etc/mysql/mysql.conf.d/mysqld.cnffile e passa a /etc/mysql/my.cnf.

Puoi farlo con il comando:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

Ora riposiamo la password:

Utilizzare i seguenti comandi nel terminale:

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

Ora sei all'interno della console mysql.

Quindi scriviamo alcune query per reimpostare la nostra password di root

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

Ora possiamo pulire /etc/mysql/my.cng

Apri il file sopra nel tuo editor e rimuovi tutte le righe all'interno del file.

Dopodiché, riavvia mysql:

sudo mysql service restart 

Ora usiamo mysql con la password appena creata:

sudo mysql -u root -p

Infine inserisci la password appena creata.


1
Ha funzionato bene! ma la tua risposta deve essere aggiornata !! /etc/mysql/my.cnf e non /etc/mysql/my.cng e per il servizio riavvia il suo servizio sudo mysql restart
essayoub

3

Ho trovato la mia soluzione dopo ore di ricerca qui.

Ferma MySQL

sudo service mysql stop

Crea directory di servizio MySQL.

sudo mkdir /var/run/mysqld

Autorizzare l'utente MySQL a scrivere nella directory di servizio.

sudo chown mysql: /var/run/mysqld

Avviare MySQL manualmente, senza controlli di autorizzazione o di rete.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Accedi senza password.

 mysql -uroot mysql

aggiorna la password

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

Disattiva MySQL.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Avviare normalmente il servizio MySQL.

sudo service mysql start

Questo mi ha dato un prompt mysql quando NIENTE ALTRO sarebbe! Grazie!
UtenteX

2

Vuoi accedere a MySQL con l'utente root ma non stai fornendo la password corretta di root.

Se devi impostare una nuova password per root , il sito di MySQL ha un'ottima documentazione su come farlo: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Non mostrerò il processo qui perché la documentazione di MySql sul link sopra è chiara e concisa .


Grazie per la risposta, ma non sono riuscito a farlo funzionare, quindi ho scelto di installare iRedMail con un database pgSQL.
Folkmann,

Roger Folkman! Buono a sapersi che hai risolto il tuo problema comunque.
Cristian Gonçalves,

I collegamenti si rompono. mysql.com ha avuto molti collegamenti interrotti nel corso degli anni. Dovresti copiare e incollare qui le informazioni pertinenti, il che va bene finché attribuisci la fonte.
Oca,

1

os: Ubuntu18.04

mysql: 5.7

  1. aggiungi il skip-grant-tablesfile alla fine del file mysqld.cnf

  2. cp my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. reimpostare la password
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. rimuovere il skip-grant-tablesda my.cnf
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. apri il mysql
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  1. controlla la politica della password
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. cambia la configurazione di validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

nota che dovresti sapere che errore causato da cosa? validate_password_policy?

dovresti decidere di reimpostare la password per riempire la politica o modificare la politica.


0

Questo è successo anche a me. Il problema è con il repository mysql che arriva già con la distribuzione Linux. Quindi, quando lo fai semplicemente: $ sudo apt install mysql-server installa mysql dal loro repository predefinito che dà questo problema. Quindi, per ovviare a questo, devi disinstallare quel mysql installato $ sudo apt remove mysql* --purge --auto-remove

Quindi scaricare mysql repo dal sito Web ufficiale di mysql MySQL APT Repo Segui la loro documentazione su come aggiungere repo e installarlo. Questo non dà problemi. Inoltre, come risposto da @zetacu, puoi verificare che il mysql root ora usi effettivamente il plugin mysql_native_password


0

nel mio caso,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Sono sicuro che la mia password fosse corretta, altrimenti sarebbe il codice di errore ERROR 1045 (28000): Access denied for user

quindi mi riconnetto usando sudo,

dev@Dev-007:~$ sudo mysql -u root -p

questa volta ha funzionato per me. vedi i documenti

e poi cambia la password di root,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

quindi riavviare il server utilizzando sudo /etc/init.d/mysql restart

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.