Primeiro, deixe-me mencionar que passei por muitas perguntas sugeridas e não encontrei resposta relevante. Aqui está o que estou fazendo.
Estou conectado à minha instância do Amazon EC2. Eu posso entrar com a raiz do MySQL com este comando:
mysql -u root -p
Em seguida, criei uma nova conta de usuário com o host%
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Concedidos todos os privilégios para a conta do usuário:
grant all privileges on *.* to 'bill'@'%' with grant option;
Então eu saio do usuário root e tento fazer o login com bill:
mysql -u bill -p
digitou a senha correta e obteve este erro:
ERRO 1045 (28000): acesso negado para o usuário 'bill' @ 'localhost' (usando a senha: YES)
mysql
access-denied
Todos
fonte
fonte
FLUSH PRIVILEGES
?Respostas:
Você provavelmente tem um usuário anônimo
''@'localhost'
ou''@'127.0.0.1'
.Conforme o manual :
Portanto, esse usuário anônimo "mascararia" qualquer outro usuário
'[any_username]'@'%'
ao se conectarlocalhost
.'bill'@'localhost'
corresponde'bill'@'%'
, mas corresponderia (por exemplo) de''@'localhost'
antemão.A solução recomendada é descartar esse usuário anônimo (isso geralmente é uma boa coisa a se fazer).
As edições abaixo são principalmente irrelevantes para a questão principal. Estes destinam-se apenas a responder a algumas questões levantadas em outros comentários neste tópico.
Editar 1
Autenticando como
'bill'@'%'
através de um soquete.Editar 2
Exatamente a mesma configuração, exceto que eu reativei a rede e agora crio um usuário anônimo
''@'localhost'
.Editar 3
A mesma situação da edição 2, agora fornecendo a senha do usuário anônimo.
Conclusão 1, da edição 1: Pode-se autenticar como
'bill'@'%'
através de um soquete.Conclusão 2, da edição 2: Se alguém se conecta através de TCP ou através de um soquete não tem impacto no processo de autenticação (exceto que um não pode se conectar como qualquer outra pessoa, mas
'something'@'localhost'
através de um soquete, obviamente).Conclusão 3, da edição 3: Embora eu tenha especificado
-ubill
, recebi acesso como usuário anônimo. Isso ocorre devido às "regras de classificação" recomendadas acima. Observe que na maioria das instalações padrão, existe um usuário anônimo sem senha (e deve ser protegido / removido).fonte
DROP USER ''@'localhost';
. Eles não são necessários para algum propósito especial.Tentar:
fonte
Quando você correu
e recebi este erro
O mysqld espera que você se conecte como
bill@localhost
Tente criar
bill@localhost
Se você deseja se conectar remotamente, especifique o nome DNS, o IP público ou 127.0.0.1 usando TCP / IP:
Depois de fazer o login, execute este
USER () relata como você tentou se autenticar no MySQL
CURRENT_USER () relata como você pôde se autenticar no MySQL a partir da tabela mysql.user
Isto lhe dará uma visão melhor de como e por que você teve permissão para acessar o mysql. Por que essa visão é importante? Tem a ver com o protocolo de pedidos de autenticação do usuário.
Aqui está um exemplo: vou criar um usuário anônimo no meu desktop MySQL
OK, assista-me a fazer login como usuário anônimo:
O pedido de autenticação é muito rigoroso. Ele verifica do mais específico ao menos. Eu escrevi sobre esse estilo de autenticação no DBA StackExchange .
Não se esqueça de chamar explicitamente o TCP como o protocolo para o cliente mysql quando necessário.
fonte
'bill'@'localhost'
deve combinar'bill@%'
, não deveria?SELECT USER(),CURRENT_USER();
. Você quase nunca vê usuários anônimos aparecerem nessas duas funções, exceto em configurações realmente ruins.mysql.user
. De fato, se você ler minha resposta novamente, verá que eu disse (na verdade, o manual diz) que a ordem de classificação é baseada nahost
coluna primeiro. Você escreveu muito sobre como verificar suas credenciais atuais, mas vejo poucas informações sobre por'bill'@'localhost'
que não é possível fazer login como'bill'@'%'
, que é a pergunta de hoje AFAIK. O OP provavelmente tem uma configuração ruim, é por isso que ele recebe esses erros.--protocol=TCP
foi a chave. Muito obrigado!Super tarde para isso
Eu tentei todas essas outras respostas e executei muitas versões diferentes,
mysql -u root -p
mas nunca apenasmysql -u root -p
E apenas pressionando
[ENTER]
a senha.Uma vez eu fiz isso funcionou. Espero que isso ajude alguém.
fonte
Um problema relacionado no meu caso estava tentando se conectar usando:
Aparentemente, o espaço em branco é permitido entre -u # uname #, mas NÃO entre -p e # password #
Portanto necessário:
Caso contrário, com espaço em branco entre -p mypass, o mysql usará 'mypass' como o nome db
fonte
Quando você digita
mysql -u root -p
, está se conectando ao servidor mysql através de um soquete unix local.No entanto, a concessão que você concedeu,
'bill'@'%'
corresponde apenas a conexões TCP / IP com curiosidade.Se você deseja conceder acesso ao soquete unix local, é necessário conceder privilégios para 'bill' @ 'localhost', que curiosamente não é o mesmo que 'bill'@'127.0.0.1'
Você também pode se conectar usando TCP / IP com o cliente de linha de comando mysql, para corresponder aos privilégios que você já concedeu, por exemplo, execute
mysql -u root -p -h 192.168.1.123
ou o endereço IP local que sua caixa possui.fonte
skip-networking
'bill'@'%'
através de um soquete em uma v5.5.Se você esquecer sua senha ou desejar modificá-la, siga estas etapas:
Bingo! Você pode conectar seu banco de dados com seu nome de usuário e nova senha:
fonte
mysql.server stop
. No meu caso, não consegui atualizar a coluna do usuário porque não há uma; também não pôde criar um porque está no modo de segurança. Pelo que estou fazendo agora, não me importo, mas realmente aprecio esse formato de resposta com entradas e saídas exatas mostradas. obrigado!Salve-se de uma grande dor de cabeça ... Seu problema pode ser o fato de você não ter as aspas em torno da senha. Pelo menos foi o meu caso que me desviou por 3 horas.
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
Pesquise "Aqui está um arquivo de opção do usuário típico:" e veja o exemplo que eles indicam lá. Boa sorte, e espero poupar alguém mais algum tempo.
fonte
A solução é excluir o usuário anônimo (Qualquer)!
Eu também enfrentei o mesmo problema em uma configuração de servidor por outra pessoa. Normalmente, não escolho criar um usuário anônimo ao instalar o MySQL, por isso não havia percebido isso. Inicialmente, entrei como usuário "raiz" e criei alguns usuários "normais" (também conhecidos como usuários com privilégios apenas no dbs com o nome de usuário como prefixo), depois saí e verifiquei o primeiro usuário normal. Não consegui efetuar login. Nem pelo phpMyAdmin nem pelo shell. Acontece que o culpado é esse usuário "Qualquer".
fonte
Eu tive um problema semelhante - na minha primeira tentativa de entrar no MySQL, pois
root
ele me dizia que o acesso era negado. Acontece que eu esqueci de usar osudo
...Portanto, se você falhar na
root
primeira tentativa, tente:e digite sua senha, isso deve funcionar.
fonte
A melhor solução que encontrei para mim é.
meu usuário é sonar e sempre que estou tentando conectar ao meu banco de dados a partir de uma máquina externa ou outra, estou recebendo um erro como
Também como eu estou tentando isso de outra máquina e através do trabalho Jenkins minha URL para acessar é
se você quiser se conectar remotamente, poderá especificá-lo de diferentes maneiras, como a seguir:
Para acessar isso com o URL, basta executar a seguinte consulta.
fonte
Ok, não tenho certeza, mas provavelmente este é o arquivo my.cnf no diretório de instalação do mysql, o culpado. Comente esta linha e o problema poderá ser resolvido.
fonte
Só queria que você soubesse de uma circunstância incomum: recebi o mesmo erro. Talvez isso ajude alguém no futuro.
Eu havia desenvolvido algumas visualizações básicas, criadas no site de desenvolvimento e transferidas para o site de produção. Mais tarde naquela semana, mudei um script PHP e, de repente, ocorreram erros de acesso negado ao usuário 'local-web-user' @ 'localhost'. O objeto da fonte de dados não havia mudado, então eu me concentrei no usuário do banco de dados no MySQL, me preocupando enquanto alguém invadiu meu site. Felizmente, o resto do site parecia ileso.
Mais tarde, descobriu-se que as opiniões eram os culpados. Nossas transferências de objetos são feitas usando outro usuário (e remoto: admin @ endereço IP) que não o usuário do site local. Portanto, as visualizações foram criadas com 'admin' @ 'endereço IP' como definidor. O padrão SECURITY de criação de exibição é
Quando o usuário da web local tenta usar a visualização, ele se depara com os privilégios ausentes do definidor para usar as tabelas. Depois que a segurança foi alterada para:
o problema foi resolvido. O problema real era completamente diferente do previsto, com base na mensagem de erro.
fonte
É uma diferença entre:
e
Confira:
O comando
acesso implícito a 'bill' @ 'localhost' e NÃO a 'bill' @ '%'.
Não há permissões para 'bill' @ 'localhost'
você recebe o erro:
resolvendo o problema:
fonte
Isso também acontece quando sua senha contém alguns caracteres especiais como @, $, etc. Para evitar essa situação, você pode agrupar a senha entre aspas simples:
Ou então não use a senha ao entrar. Deixe em branco e digite-o quando o terminal solicitar. Esta é a maneira recomendada.
fonte
pwgen
. Hoje eu criei um novo para um banco de dados MySQL e seu usuário. Infelizmente, a senha continha uma barra invertida "\" que não identifiquei como origem dos erros (nem pensei nisso). Então, procurei por horas uma solução. Depois de definir a senha para "123" em desespero, o login finalmente funcionou. … Os usuários devem estar cientes de que alguns caracteres especiais podem causar problemas, já que o MySQL não mostra nenhum aviso ao usar senhas como "daiy4ha4in7chooshuiphie \ Th * aew", por exemplo.Para mim, esse problema foi causado por um novo recurso do MySQL 5.7.2: as
user
entradas são ignoradas se oplugin
campo estiver vazio.Defina-o como, por exemplo,
mysql_native_password
para reativá-los:Veja as notas de versão do MySQL 5.7.2 , em "Notas de autenticação".
Por alguma razão (talvez porque meus hashes de senha anteriores à 4.1 foram removidos), o
mysql_upgrade
script não definiu um valor de plug-in padrão.Descobri percebendo a seguinte mensagem de aviso em
/var/log/mysql/error.log
:Eu posto esta resposta aqui para talvez salvar alguém de usar a mesma quantidade ridícula de tempo que eu fiz.
fonte
Não tenho certeza se alguém vai achar isso útil, mas encontrei o mesmo erro e procurei por todos os usuários anônimos ... e não havia nenhum. O problema acabou sendo que a conta do usuário foi definida como "Requer SSL" - que eu encontrei no PHPMyAdmin, acessando Contas do Usuário e clicando em Editar Privilégios para o usuário. Assim que desmarquei essa opção, tudo funcionou como esperado!
fonte
Resumo da depuração
Há uma grande chance de que você possa ter encontrado esse problema várias vezes em seu trabalho. Esse problema ocorreu-me na maioria das vezes devido à inserção incorreta do nome de usuário ou senha. Embora esse seja um dos motivos, há muitas outras chances de você conseguir esse problema. Às vezes, parece muito semelhante, mas quando você se aprofundar, perceberá vários fatores que contribuem para esse erro. Esta postagem explicará em detalhes, a maioria dos motivos comuns e a solução para esse problema.
Razões possíveis:
Esse é o motivo mais comum para esse erro. Se você digitou o nome de usuário ou a senha incorretamente, certamente receberá esse erro.
Solução:
A solução para esse tipo de erro é muito simples. Basta digitar o nome de usuário e a senha corretos. Este erro será resolvido. Caso se esqueça da senha, você pode redefinir o nome de usuário / senha. Se você esquecer a senha da conta de administrador / root, existem várias maneiras de redefinir / recuperar a senha de root. Vou publicar outro post sobre como redefinir a senha root caso você esqueça a senha root.
O MySQL fornece restrição baseada em host para acesso do usuário como um recurso de segurança. Em nosso ambiente de produção, costumávamos restringir a solicitação de acesso apenas aos servidores de aplicativos. Esse recurso é realmente útil em muitos cenários de produção.
Solução:
Quando você enfrentar esse tipo de problema, verifique primeiro se o seu host é permitido ou não, verificando a tabela mysql.user. Se não estiver definido, você pode atualizar ou inserir um novo registro na tabela mysql.user. Geralmente, o acesso como usuário raiz a partir de uma máquina remota está desabilitado e não é uma prática recomendada, devido a questões de segurança. Se você tiver requisitos para acessar seu servidor a partir de várias máquinas, conceda acesso apenas a essas máquinas. É melhor não usar curingas (%) e fornecer acessos universais. Deixe-me atualizar a tabela mysql.user, agora o desmontador pode acessar o servidor MySQL a partir de qualquer host.
Esse tipo de erro ocorre quando o usuário que você está tentando acessar não existe no servidor MySQL.
Soluções:
Quando você enfrentar esse tipo de problema, verifique se o usuário existe na tabela mysql.user ou não. Se o registro não existir, o usuário não poderá acessar. Se houver um requisito para esse usuário acessar, crie um novo usuário com esse nome de usuário.
Pontos importantes
Não é aconselhável usar caracteres curinga ao definir o host do usuário, tente usar o nome exato do host.
Desative o logon raiz da máquina remota.
Use o conceito de usuário proxy.
Existem alguns outros conceitos relacionados a este tópico e entrar em detalhes desses tópicos é um escopo muito diferente deste artigo. Analisaremos os seguintes tópicos relacionados nos próximos artigos.
Espero que este post ajude você a corrigir o Código de Erro do MySQL 1045 Acesso negado para o usuário no MySQL.
fonte
Espero que você não tenha causado mais danos ao excluir o usuário debian-sys-maint no mysql
Tenha seu daemon mysql rodando da maneira normal. Inicie seu cliente mysql como mostrado abaixo
Em outro terminal,
cat
o arquivo/etc/mysql/debian.cnf
. Esse arquivo contém uma senha; cole essa senha quando solicitado.http://ubuntuforums.org/showthread.php?t=1836919
fonte
Descobri outro caso que parece ser superficial; Eu posso exportar para o sistema de arquivos, via SELECT INTO .. OUTFILE como root, mas não como usuário comum. Embora isso possa ser uma questão de permissões, observei isso e não vejo nada especialmente óbvio. Tudo o que posso dizer é que a execução da consulta como um usuário comum que possui todas as permissões na base de dados em questão retorna o erro de acesso negado que me levou a esse tópico. Quando encontrei a transcrição de um uso bem-sucedido de SELECT INTO ... OUTFILE em um projeto antigo, notei que estava logado como root. Com certeza, quando eu entrei como root, a consulta foi executada conforme o esperado.
fonte
Atualização: Na v8.0.15 (talvez esta versão), a
PASSWORD()
função não funciona.Voce tem que:
sudo mysqld_safe --skip-grant-tables
mysql -u root
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
fonte
Quando você executa
mysql -u bill -p
,localhost
é resolvido para o seu ip, pois é 127.0.0.1 e no seu/etc/hosts
arquivo, como o padrão127.0.0.1 localhost
existe. Portanto, o mysql interpreta você como obill@localhost
que não é concedidobill@'%'
. É por isso que existem 2 registros diferentes para oroot
usuário no resultado daselect host, user from mysql.user;
consulta.Existem duas maneiras de lidar com esse problema.
Um está especificando um ip que não é resolvido inversamente por
/etc/hosts
arquivo quando você tenta fazer o login. Por exemplo, o ip do servidor é10.0.0.2
. Ao executar o comandomysql -u bill -p -h 10.0.0.2
, você poderá fazer login. Se você digitarselect user();
, você receberá[email protected]
. Obviamente, qualquer nome de domínio não deve ser resolvido para este ip no seu/etc/hosts
arquivo.Em segundo lugar, você precisa conceder acesso a esse nome de domínio específico. Para
bill@localhost
, você deve chamar o comandogrant all privileges on *.* to bill@localhost identified by 'billpass';
. Neste caso, você será capaz de iniciar sessão com o comandomysql -u bill -p
. Uma vez logado, oselect user();
comando retornabill@localhost
.Mas isso é apenas para você tentar acessar um servidor mysql no mesmo host. De hosts remotos, o mysql se comporta como esperado, '%' permitirá que você faça o login.
fonte
Resolvi isso excluindo as entradas 'bill' do antigo usuário de buggy (esta é a parte importante: do mysql.user e mysql.db ) e criei o mesmo usuário que o triste antes:
Trabalhado, o usuário está se conectando. Agora vou remover algumas previlegias dele :)
fonte
Eu encontrei o mesmo erro. A configuração que não estava funcionando é a seguinte:
A configuração editada abaixo é a que deu certo. Percebe a diferença?
A diferença é entre aspas duplas. Eles parecem ser bastante significativos no PHP, em oposição ao Java, e têm um impacto quando se trata de caracteres que escapam, configuram URLs e agora passam parâmetros para uma função. Eles são mais bonitos (eu sei), mas sempre use aspas simples o máximo possível, então aspas duplas podem ser aninhadas dentro delas, se necessário.
Este erro surgiu quando testei meu aplicativo em uma caixa Linux, em oposição a um ambiente Windows.
fonte
Eu tive problemas semelhantes porque minha senha contém ";" char quebrando minha senha quando a crio no primeiro momento. Cuidado com isso, se puder ajudá-lo.
fonte
Isso pode se aplicar a muito poucas pessoas, mas aqui vai. Não use uma exclamação
!
na sua senha.Fiz e obtive o erro acima usando o MariaDB. Quando simplifiquei para apenas números e letras, funcionou. Outros caracteres como
@
e$
funcionam bem - usei esses caracteres em um usuário diferente na mesma instância.A quinta resposta neste endereço me levou à minha solução.
fonte
No Windows, veja como resolver:
C:\Program Files,C:\Program Files (x86)
eC:\ProgramData
fonte
Isso também pode acontecer se o MySQL estiver sendo executado em um sistema operacional que não diferencia maiúsculas de minúsculas, como o Windows.
por exemplo, descobri que a tentativa de conexão com um banco de dados usando essas credenciais falhou:
mysql>
grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105
Mas, isso conseguiu:
mysql>
grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -h10.300.300.400 databaseV105 -p
fonte
Se os comprimentos de dbname, nome de usuário, senha, etc. excederem os valores descritos em https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html#grant-tables-scope-column-properties , você também pode não conseguir fazer login, como no meu caso.
fonte
Hoje em dia! Solução para :
Wampserver 3.2.0 - nova instalação ou atualização
Provavelmente
xamp
usandomariaDB
como padrão está bem.Wamp
O servidor vem com omariaDB
mysql e instalamariaDB
como padrão na porta 3306 e o mysql na 3307, às vezes na porta 3308.Conecte-se a
mysql
!Na instalação, ele pede para usar
mariaDB
ouMySql
, mas mariaDB está marcado como padrão e você não pode alterá-lo, marque amysql
opção e instale.quando a instalação for concluída, ambos estarão
mariaDB
em execução na porta padrão 3306 emysql
em outra porta 3307 ou 3308.Clique com o botão direito do mouse no
wampserver
ícone onde sua execução deve estar no canto inferior direito, vá para ferramentas e veja suamysql
porta de execução correta .E inclua-o na sua conexão com o banco de dados, da mesma forma que segue:
Note :
Eu estou usando pdo.Veja aqui para mais: https://sourceforge.net/projects/wampserver/
fonte