Accesso negato per l'utente 'test' @ 'localhost' (utilizzando la password: YES) eccetto utente root


100

Sto affrontando un problema con mysql utente non root / amministratore, sto seguendo i passaggi seguenti per la creazione dell'utente e dei suoi privilegi, correggimi se sbaglio,

Sto installando mysqlsu RHEL 5.7 64bit, i pacchetti sono menzionati di seguito, una volta fatto il rpm installwe are

  1. creando mysql db usando mysql_install_db, quindi
  2. quindi avviare il servizio mysql
  3. utilizzando mysql_upgradeanche che stiamo facendo al server.

Dopo questo processo posso accedere come rootma con un utente non root non sono in grado di accedere al server:

[root@clustertest3 ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5


[root@clustertest3 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[root@clustertest3 ~]# ls -ld /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Nov  30 11:09 /var/lib/mysql/mysql.sock

mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

[root@clustertest3 ~]# mysql -ugolden -p
Enter password:
ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)

Questo è il problema che sto affrontando, c'è qualche soluzione a questo?


Puoi accedere come root e poi farloSELECT * FROM mysql.user
Noam Rathaus

1
Accetta la risposta che ha funzionato per te, in modo che gli altri utenti sappiano come hai risolto il tuo problema.
Utente che non è un utente

Risposte:


59

Non concedere tutti i privilegi su tutti i database a un utente non root, non è sicuro (e hai già "root" con quel ruolo)

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Questa istruzione crea un nuovo utente e gli concede i privilegi selezionati. IE:

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Dai un'occhiata ai documenti per vedere tutti i privilegi dettagliati

EDIT: puoi cercare maggiori informazioni con questa query (accedi come "root"):

select Host, User from mysql.user;

Per vedere cosa è successo


Non sono d'accordo con questa affermazione su root. Sì, non dovresti dare super privilegi, volenti o nolenti. Tuttavia, in genere non dovresti utilizzare account condivisi poiché non hai un audit trail appropriato all'interno del DB. Se è necessario disporre di account condivisi come root, è necessario avvolgere altri elementi per garantire che l'audit trail sia intatto.
krad

36

Se ti stai connettendo a MySQL utilizzando una macchina remota (esempio workbench) ecc., Utilizza i seguenti passaggi per eliminare questo errore sul sistema operativo in cui è installato MySQL

mysql -u root -p

CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

Prova ad accedere all'istanza MYSQL.
Questo ha funzionato per me per eliminare questo errore.


1
Nemmeno questo funziona, in quanto richiede l'errore anche quando si esegue "mysql -u root -p"
Marian Klühspies

25

Provare:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

O ancora meglio usare: mysql_setpermissionper creare l'utente


1
Questo non risolve il problema. CREA UTENTE 'goldy' @ '%' IDENTIFICATO DA 'some_pass'; è una query valida
pratim_b

Per qualche ragione il suo %che dovrebbe funzionare per tutti gli host, non è risolverlo. Quindi specificando localhostche dovrebbe funzionare. Se NON funziona, qualcosa non va in mysql
Noam Rathaus

13

Sembra che tu stia cercando di rendere un utente 'golden' @ '%' ma un utente diverso dal nome 'golden' @ 'localhost' si sta intromettendo / ha la precedenza.

Fai questo comando per vedere gli utenti:

SELECT user,host FROM mysql.user;

Dovresti vedere due voci:

1) utente = golden, host =%

2) utente = golden, host = localhost

Eseguire questi comandi:

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

Riavvia MySQL Workbench.

Quindi esegui di nuovo i comandi originali:

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

Quindi, quando provi ad accedere a MySQL, digitalo in questo modo:

inserisci qui la descrizione dell'immagine

Premi "Verifica connessione" e inserisci la tua password "password".


2
Questa è l'unica soluzione che ho trovato qui che aveva un significato. Grazie buon signore.
Sumuk Shashidhar

8

Per prima cosa ho creato l'utente utilizzando:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Dopo aver cercato su Google e visto questo , ho aggiornato la password dell'utente utilizzando:

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

e potrei connettermi in seguito.


3

Per chiunque altro abbia fornito tutti i consigli ma il problema persiste.

Verificare la stored procedure e visualizzare i DEFINER. Quei definitori potrebbero non esistere più.

Il mio problema si è manifestato quando abbiamo cambiato l'host con caratteri jolly (%) in uno specifico IP, rendendo il database più sicuro. Sfortunatamente ci sono alcune visualizzazioni che utilizzano ancora "user" @ "%" anche se "user" @ "172 ...." è tecnicamente corretto.


Grazie per avermi messo sulla strada giusta. Non sapevo nemmeno dell'impostazione di sicurezza SQL su viste e stored procedure. Ho finito per impostare la sicurezza SQL su Invoker sulle mie viste in modo che usasse le autorizzazioni dell'utente che esegue il comando piuttosto che l'utente che crea la vista. Ecco un collegamento di riferimento: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin

2

Ho anche il problema simile, e in seguito ho scoperto che è perché ho cambiato il mio nome host (non localhost).

Pertanto ottengo risolto specificando il file --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1

2

Assicurati che l'utente abbia una voce localhost nella tabella degli utenti. Quello era il problema che stavo avendo. EX:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

1

A seconda del modo in cui crei il tuo utente, MySQL interpreta in modo diverso. Ad esempio, se crei un utente come questo:

create user user01 identified by 'test01';

MySQL si aspetta che tu dia qualche privilegio usando grant all on <your_db>.* to user01;

Non dimenticare di farlo flush privileges;

Ma se crei un utente in questo modo (passando un indirizzo IP), devi cambiarlo in:

create user 'user02'@'localhost' identified by 'teste02';

quindi, per dare alcuni privilegi devi farlo:

grant all on <your_db>.* to user02@localhost;
flush privileges;

0

Nel mio caso si è verificato lo stesso errore perché stavo cercando di utilizzare mysql semplicemente digitando "mysql" invece di "mysql -u root -p"


0

connetti il ​​tuo server da mysqlworkbench ed esegui questo comando-> ALTER USER 'root' @ 'localhost' IDENTIFICATO DA 'yourpassword';


0

Per la ricerca fastidiosa che arriva qui dopo aver cercato questo messaggio di errore:

Accesso negato per l'utente "someuser @ somewhere" (utilizzando la password: SI)

Il problema per me non era racchiudere la password tra virgolette. per esempio. Avevo bisogno di usare al -p'password'posto di-ppassword


-8

Basta aggiungere il nome del computer invece di "localhost" nel nome host o nell'indirizzo dell'host MySQL.

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.