Acabei de instalar o Ubuntu 16.04 LTS junto com os pacotes php
, mariadb
e nginx
. Eu corri mysql_secure_installation
e alterei a senha do root.
Agora, quando tento fazer o login mysql
usando a conta root enquanto estiver logado no Ubuntu como uma conta de usuário normal, tenho acesso negado.
Quando eu entro usando sudo mysql
, o mysql nem me pede a senha. Se eu executar mysql_secure_installtion
, vejo que as configurações antigas nunca foram definidas permanentemente.
O que estou fazendo errado?
fonte
%
significa que você pode se conectar de qualquer lugar ... remotamente?grant all privileges on *.* to 'root'@'localhost' with grant option;
Retirado de Alterar senha do usuário no MySQL 5.7 com "plugin: auth_socket"
Então, para mudar de
plugin
volta paramysql_native_password
:Entre com o sudo:
Altere
plugin
e defina uma senha com um único comando:Obviamente, você também pode usar o comando acima para definir uma senha vazia.
Apenas para o registro, (e
MariaDB < 10.2
usuários), há também outra maneira de alterar apenasplugin
sem fornecer uma senha (deixando em branco):fonte
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;
Fonte: stackoverflow.com/a/41537019/1004587Em resumo, no MariaDB
onde você substitui NEWPASSWORD pela senha desejada e tudo mais literalmente.
O problema aqui é que, quando o MariaDB ou o MySQL são instalados / atualizados (especialmente se em algum momento a raiz estiver definida sem uma senha), na tabela Usuários, a senha estará realmente vazia (ou ignorada) e o login dependerá do usuário do sistema correspondente. para um usuário MySQL. Você pode testar isso da seguinte maneira alternando para a raiz do sistema e digite:
Em seguida, insira nenhuma senha ou a senha errada . Você provavelmente será autorizado a entrar. (Você pode até conseguir fazer login na raiz do unix simplesmente
# mysql
porque a senha é irrelevante e o usuário está definido).Então oque está acontecendo? Bem, se você fizer login como root e faça o seguinte:
você notará
auth_socket
(que pode lerunix_socket
no MariaDB). Esses soquetes ignoram senhas e permitem ao usuário Unix correspondente sem uma verificação de senha. É por isso que você pode efetuar login com root, mas não com um usuário diferente.Portanto, a solução é atualizar os Usuários para não usar
auth_socket/unix_socket
e definir corretamente uma senha.No MariaDB (<10.2, veja os comentários abaixo), que está na versão 16 do Ubuntu a partir de 2017, isso deve ser suficiente. NEWPASSWORD é sua senha.
mysql_native_password
você digita literalmente.(É possível que definir o plug-in como vazio funcione. YMMV. Eu não tentei isso. Portanto, essa é uma alternativa.)
De outra forma:
Então
Para o registro, a solução que envolve excluir o usuário e recriá-lo com '%' me deixou totalmente bloqueado do banco de dados e pode causar outros problemas, a menos que você obtenha a
grant
declaração exatamente correta - mais fácil simplesmente atualizar a raiz que você já possui.Na minha experiência, o problema ocorre apenas com o usuário root, pois outros usuários serão adicionados manualmente e não fazem parte de uma instalação / atualização inicial.
fonte
mysql_secure_installation
não teve o mesmo efeito. Onde ele armazena a nova senha?UPDATE
s que se aplicam ao MariaDB <10.2 e aALTER
outras versões? E o segundo éUPDATE
uma alternativa ao primeiro, ou precisamos digitar os dois? Finalmente, 'mysql_native_password' é algo para digitar literalmente, ou devemos substituí-lo por nossa senha root pretendida para o MySQL?mysql_native_password
opção é essa.Se você instalou o MySQL / MariaDB a partir do repositório base, os usuários não poderão fazer login no MySQL como o usuário root do MySQL a partir de seus logins Unix (não aplicável se tiverem acesso sudo )
Entre no shell raiz do MySQL:
Execute as consultas abaixo:
Abra um novo shell e, em seguida:
Fonte
fonte
mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
Tente criar uma nova conta mysql, para mim funcionou (mysql 5.7.12):
Faça o login como sudo:
Crie um novo usuário e conceda a ele privilégios (sem senha):
Faça login como novo usuário:
fonte
Eu tive que fazer duas coisas (graças a @Todor e @Loremhipsum):
e depois:
Eu não recomendaria largar usuário
root
.fonte
Experimente este código primeiro,
e depois,
pressione
Ctrl+Z
e digite:bg
para executar o processo do primeiro plano para o segundo plano e verifique seu acesso:fonte
Se você acabou de executar o comando mysql no usuário root, receberá acesso sem a senha solicitada, porque a autenticação de soquete está ativada para root @ localhost. .
A única maneira de definir a senha é alternar para autenticação nativa, como:
fonte
Estou adaptando alguns scripts de provisionamento que criei para usar o MariaDB e deparei-me com esse problema exato. Reunindo muitas informações aqui, a resposta de um Gazzer realmente aparece na edição; tudo se resume à configuração
auth_socket
/unix_socket
.Portanto, ao usar o MariaDB 5.5 (no Ubuntu 14.04) e o MariaDB 10 no (Ubuntu 16.04), o login no MySQL e a execução deste comando esclareceram as coisas imediatamente:
As outras respostas - incluindo a resposta mais votada até o momento nesta publicação de Loremhipsum - incentivam realmente as más práticas, recomendando a remoção de um usuário e, em seguida, recriando-o. Para mim, essa é uma solução bastante radical. A melhor / mais simples solução é anular o
plugin
valor, liberar privilégios e seguir com a vida.fonte
Eu tive o mesmo problema e executando o seguinte corrigi-lo:
fonte
root
sendo definido complugin
configurações não padrão. O único caso extremo em que uma atualização do banco de dados pode ajudar em um caso como esse é se omysql_upgrade
próprio processo responder pelaplugin
configuração que duvido.