Após definir a senha root, por que o MYSQL ainda permite que eu entre sem uma senha?

10

Após definir a senha root, por que o MYSQL ainda permite que eu entre sem uma senha na linha de comando? Eu posso digitar "mysql" em um prompt root unix e ele não pede senha e ainda me permite acesso root. Não estou entendendo por que "mysql -u root" NÃO está agora me pedindo a senha que defini na conta.

Além disso, não consigo acessar o mysql de uma máquina remota como 'root'. Não o configurei corretamente abaixo? Eu recebo o erro: "Host ... não tem permissão para se conectar a este servidor MySQL. Eu não o configurei para '%'?

Aqui está minha tabela de usuários:

mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| %         | root |                                           |
| 127.0.0.1 | root |                                           |
| ::1       | root |                                           |
| localhost |      |                                           |
| %         |      |                                           |
+-----------+------+-------------------------------------------+
6 rows in set (0.00 sec)
djangofan
fonte

Respostas:

4

Parece que a senha está definida na 'root'@'localhost'entrada do usuário, mas não na 'root'@'%'entrada; autenticação sem senha seria permitida com base nisso.

Por motivos de segurança, reconsidere permitir acesso root a partir de qualquer lugar. Se você precisar, basta se livrar das especificações do host local:

drop user 'root'@'localhost';
drop user 'root'@'127.0.0.1';
drop user 'root'@'::1';

E defina a senha para o 'root'@'%'usuário:

set password for 'root'@'%' = password('passwordhere');
Shane Madden
fonte
Isso era TUDO que eu precisava e mais um pouco. Obrigado. Eu não tinha certeza do que era seguro remover ou não e você respondeu minha pergunta. Ótima resposta. :-)
djangofan
4

Bem, a resposta está correta nessa tabela - você precisa remover as linhas "raiz" que não possuem senha listada.

Além disso, parece que você permite conexões de qualquer lugar (?!?!) Ao usar nenhum usuário ou passe. Provavelmente é uma má ideia. Eu faria algo como:

mysql> use mysql;
mysql> delete from user where password = "";
EEAA
fonte
2

Não se esqueça de FLUSH PRIVILEGES ou você ainda pode fazer o login sem senha.

tgunr
fonte