não pode logar como root do usuário mysql da conta de usuário normal no ubuntu 16.04

134

Acabei de instalar o Ubuntu 16.04 LTS juntamente com os pacotes php , mariadb e nginx . Eu corri mysql_secure_installation e mudei a senha do root.

Agora, quando eu tento fazer o login em mysql usando a conta root enquanto estou logado no Ubuntu como conta de usuário normal, recebo acesso negado.

Quando eu faço o login usando sudo mysql , o mysql nem me pergunta a senha. Se eu executar mysql_secure_installtion , vejo que as configurações antigas nunca foram definidas permanentemente.

O que estou fazendo de errado?

    
por codescope 02.05.2016 / 13:45

10 respostas

253

Atualizei recentemente meu Ubuntu 15.04 para 16.04 e isso funcionou para mim:

  1. Primeiro, conecte-se ao sudo mysql

    sudo mysql -u root
    
  2. Verifique suas contas presentes no seu banco de dados

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Exclua a raiz atual @ conta do host local

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Recrie seu usuário

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Conceda permissões ao seu usuário (não se esqueça de liberar privilégios)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. Saia do MySQL e tente se reconectar sem o sudo.

Espero que isso ajude alguém:)

    
por Loremhipsum 08.06.2016 / 11:04
89
% bl0ck_qu0te%

Extraído de Alterar a senha do usuário no MySQL 5.7 com "plugin: auth_socket "

Então, para alterar o plugin de volta para mysql_native_password :

  1. Faça login com o sudo:

    sudo mysql -u root
    
  2. Altere o plugin e defina uma senha com um único comando:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

É claro que 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 apenas o plugin sem fornecer uma senha (deixando-a vazia):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;
    
por Todor 23.07.2016 / 09:46
8

A questão aqui é que quando MariaDB ou MySQL são instalados / atualizados (especialmente se em algum ponto a raiz é definida sem uma senha) então na tabela Users a senha está vazia (ou ignorada), e o login depende da usuário do sistema correspondente a um usuário MySQL. Você pode testar isso da seguinte maneira, alternando para raiz do sistema e, em seguida, digite:

mysql -uroot -p

Em seguida, insira a senha ou a senha errada . Você provavelmente será deixado entrar. (Você pode até ser capaz de logar pela raiz unix simplesmente # mysql , pois a senha é irrelevante e o usuário está definido).

Então, o que está acontecendo? Bem, se você logar como root e faça o seguinte:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

você verá auth_socket (que pode ler unix_socket no MariaDB). Estes sockets ignoram as senhas e permitem ao usuário Unix correspondente em sem uma verificação de senha. É por isso que você pode fazer login com root , mas não com um usuário diferente.

Portanto, a solução é atualizar os usuários para não usarem o auth_socket/unix_socket e definirem corretamente uma senha.

No MariaDB (< 10.2) que está na versão 16 do Ubuntu a partir de 2017, isso deve ser suficiente:

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(É possível que a configuração do plugin para o vazio funcione. YMMV. Eu não tentei isso.)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

Caso contrário:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

Então

FLUSH PRIVILEGES;

Para registro, a solução envolvendo excluir o usuário e recriá-lo com '%' me bloqueou totalmente do banco de dados e pode causar outros problemas, a menos que você obtenha a instrução grant exatamente correta - é mais fácil simplesmente atualizar o root que você já tem.

Na minha experiência, o problema ocorre apenas com o usuário root, já que outros usuários serão adicionados manualmente, não parte de uma instalação / atualização inicial.

    
por Gazzer 14.10.2017 / 06:18
5

Se você tiver instalado o MySQL / MariaDB a partir do repositório base, os usuários não poderão logar no MySQL como usuário root do MySQL de seus logins Unix (não aplicável se tiverem acesso sudo )

  1. Faça login no shell raiz do MySQL:

    $ sudo mysql -u root -p
    
  2. Execute as consultas abaixo:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Abra um novo shell e, em seguida:

    $ mysql -u root -p
    

Fonte:

link

    
por Gayan Weerakutti 02.12.2017 / 09:31
2

Tente criar uma nova conta mysql, para mim funcionou (mysql 5.7.12):

  1. Login como sudo:

    sudo mysql -uroot
    
  2. Crie um novo usuário e conceda-lhe privilégios (sem senha):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Faça login como novo usuário:

    mysql -uadmin
    
por Alex Yakovlev 28.05.2016 / 11:37
2

Eu tive que fazer duas coisas (graças ao @Todor e @Loremhipsum):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

e depois:

FLUSH PRIVILEGES;

Eu não recomendaria abandonar o usuário root .

    
por Franc Drobnič 03.01.2018 / 17:43
1

Tente este código primeiro,

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

e depois,

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

pressione Ctrl+Z e digite: bg para executar o processo de primeiro plano para o segundo plano e, em seguida, verifique seu acesso por:

mysql -u root -proot
mysql> show grants;
    
por ADHITHYA SRINIVASAN 28.05.2016 / 11:47
1

Se você acabou de executar o comando mysql sob o usuário root, será concedido acesso sem a solicitação de senha, porque a autenticação do soquete foi ativada para root @ localhost. .

A única maneira de definir a senha é mudar para a autenticação nativa como:

% bl0ck_qu0te%     
por Vadiaz 26.07.2017 / 17:23
0

Eu adaptei alguns scripts de provisionamento que criei para usar o MariaDB e corri para esse problema exato. Reunindo muitas informações aqui, uma resposta do Gazzer realmente aparece na edição; tudo se resume à configuração auth_socket / unix_socket .

Então, ao usar o MariaDB 5.5 (no Ubuntu 14.04) e o MariaDB 10 no (Ubuntu 16.04), fazer login no MySQL e executar este comando limpou as coisas imediatamente:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

As outras respostas - incluindo a resposta mais votada deste post por Loremhipsum - realmente encorajam práticas ruins, recomendando a queda um usuário e depois recriá-los. Para mim, essa é uma solução bastante radical. A melhor / mais simples solução para anular o valor plugin , liberar privilégios e continuar com a vida.

    
por JakeGould 20.10.2017 / 02:54
-1

Eu tive o mesmo problema e executei o seguinte:

mysql_upgrade --force
    
por klob 03.05.2016 / 08:48