Acesso negado para o usuário 'test' @ 'localhost' (usando senha: SIM), exceto usuário root

100

Estou enfrentando problemas com o usuário não root / admin do mysql, estou seguindo as etapas abaixo para criar o usuário e seus privilégios, corrija-me se eu estiver fazendo algo errado,

Estou instalando mysqlem RHEL 5.7 64bit, pacotes são mencionados abaixo, uma vez que eu fiz o rpm installque somos

  1. criando mysql db usando mysql_install_db, então
  2. iniciar o serviço mysql então
  3. usando mysql_upgradetambém estamos fazendo no servidor.

Após este processo, consigo fazer login como, rootmas com um usuário não root, não consigo fazer login no servidor:

[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)

Este é o problema que estou enfrentando, existe alguma solução para isso?

user3061726
fonte
Você pode fazer o login como root e depois fazerSELECT * FROM mysql.user
Noam Rathaus
1
Aceite a resposta que funcionou para você, para que outros usuários saibam como você resolveu seu problema.
Usuário que não é usuário de

Respostas:

59

Não conceda todos os privilégios sobre todos os bancos de dados a um usuário não root, não é seguro (e você já tem "root" com essa função)

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

Esta instrução cria um novo usuário e concede privilégios selecionados a ele. IE:

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

Dê uma olhada na documentação para ver todos os privilégios detalhados

EDITAR: você pode procurar mais informações com esta consulta (faça login como "root"):

select Host, User from mysql.user;

Para ver o que aconteceu

Alberto Megía
fonte
Eu discordo dessa afirmação sobre root. Sim, você não deve dar superprivilégios, quer queira quer não. No entanto, você também geralmente não deve usar contas compartilhadas, pois não tem uma trilha de auditoria adequada no banco de dados. Se você deve ter contas compartilhadas, como root, você precisa de outras coisas envolvidas nele para garantir que a trilha de auditoria esteja intacta.
krad
36

Se você estiver se conectando ao MySQL usando uma máquina remota (Exemplo de workbench) etc., use as seguintes etapas para eliminar este erro no sistema operacional onde o MySQL está instalado

mysql -u root -p

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

Tente fazer login na instância MYSQL.
Isso funcionou para mim para eliminar esse erro.

Makarand Kulkarni
fonte
1
Nem mesmo isso está funcionando, pois avisa o erro mesmo ao executar "mysql -u root -p"
Marian Klühspies
25

Experimentar:

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

Ou ainda melhor usar: mysql_setpermissionpara criar o usuário

Noam Rathaus
fonte
1
Isso não resolve o problema. CRIAR USUÁRIO 'goldy' @ '%' IDENTIFICADO POR 'some_pass'; é uma consulta válida
pratim_b
Por alguma razão, o seu, %que deve funcionar para todos os hosts, não está resolvendo. Portanto, especificando localhostisso deve funcionar. Se isso NÃO funcionar, algo está errado no mysql
Noam Rathaus
13

Parece que você está tentando tornar um usuário 'golden' @ '%', mas um usuário diferente com o nome de 'golden' @ 'localhost' está atrapalhando / tem precedência.

Faça este comando para ver os usuários:

SELECT user,host FROM mysql.user;

Você deve ver duas entradas:

1) usuário = dourado, host =%

2) usuário = dourado, host = localhost

Faça estes comandos:

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

Reinicie o MySQL Workbench.

Em seguida, execute seus comandos originais novamente:

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

Então, quando você tentar fazer login no MySQL, digite assim:

insira a descrição da imagem aqui

Clique em 'Testar conexão' e digite sua senha 'senha'.

Gene
fonte
2
Esta é a única solução que encontrei aqui que teve algum significado. Obrigado, bom senhor.
Sumuk Shashidhar
8

Primeiro criei o usuário usando:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Depois de pesquisar no Google e ver isso , atualizei a senha do usuário usando:

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

e eu poderia me conectar depois.

ako
fonte
3

Para qualquer pessoa que deu todos os conselhos, mas o problema ainda persiste.

Verifique o procedimento armazenado e visualize DEFINERS. Esses definidores podem não existir mais.

Meu problema apareceu quando mudamos o host curinga (%) para IP específico, tornando o banco de dados mais seguro. Infelizmente, há algumas visualizações que ainda usam 'user' @ '%', embora 'user' @ '172 ....' seja tecnicamente correto.

Yorro
fonte
Obrigado por me colocar no caminho certo. Eu nem sabia sobre a configuração de segurança do SQL em visualizações e procedimentos armazenados. Acabei definindo o SQL Security como Invoker em minhas visualizações, para que ele usasse as permissões do usuário que executa o comando em vez do usuário que cria a visualização. Aqui está um link para referência: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin
2

Eu também tenho o problema semelhante, e mais tarde descobri que é porque eu mudei meu nome de host (não localhost).

Portanto, resolvo o problema especificando o --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1
4af2e9eb6
fonte
2

Certifique-se de que o usuário tenha uma entrada localhost na tabela de usuários. Esse era o problema que eu estava tendo. EX:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
RyanT
fonte
1

Da maneira que você cria seu usuário, o MySQL interpreta de uma maneira diferente. Por exemplo, se você criar um usuário assim:

create user user01 identified by 'test01';

O MySQL espera que você dê algum privilégio usando grant all on <your_db>.* to user01;

Não se esqueça de flush privileges;

Mas, se você criar um usuário assim (passando um endereço IP), você deve alterá-lo para:

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

então, para dar alguns privilégios você tem que fazer isso:

grant all on <your_db>.* to user02@localhost;
flush privileges;
Antonio Marcos
fonte
0

No meu caso, o mesmo erro aconteceu porque eu estava tentando usar o mysql digitando apenas "mysql" em vez de "mysql -u root -p"

lfvv
fonte
0

conecte seu servidor a partir do mysqlworkbench e execute este comando-> ALTER USER 'root' @ 'localhost' IDENTIFICADO POR 'sua senha';

Sachin
fonte
0

Para pesquisas irritantes, chegar aqui depois de pesquisar esta mensagem de erro:

Acesso negado para o usuário 'algum usuário @ algum lugar' (usando a senha: SIM)

O problema para mim era não colocar a senha entre aspas. por exemplo. Eu precisava usar em -p'password'vez de-ppassword

routeburn
fonte
-8

Apenas adicione o nome do computador em vez de 'localhost' no nome do host ou endereço do MySQL Host.

vipin
fonte