MySQL permite logins sem senha, não me deixa rodar nada

2

Eu estava tentando permitir logins remotos para o MySQL, então eu mudei /etc/mysql/my.cnf para vincular a 0.0.0.0 ao invés de 127.0.0.1 (eu ia colocar isso de volta, eu prometo!), mas não funcionou então eu tentei alterar o host do usuário root para * (que mais tarde percebi que deveria ter sido%). De qualquer forma, eu agora não consigo acessar o servidor MySQL até mesmo localmente, a menos que eu tente logar sem uma senha, nesse caso ele me permite entrar, mas quando eu tento executar qualquer comando ele me informa que eu não sou autorizado a fazer isso e que eu sou usuário ''@'localhost' . Eu desliguei o servidor e o executei com --skip-grant-tables , o que me permite logar como root e eu posso realmente fazer coisas, mas não tenho certeza de como obter logins de raiz com senha, locais e normais. Acabei de verificar e meu aplicativo PHP (que tem seu próprio conjunto de credenciais) funciona bem. E sim, eu coloquei o bind de volta para 127.0.0.1 . Caso não seja óbvio, sou muito novo no MySQL.

O servidor está executando o Ubuntu 12.04 LTS.

EDIT: Para ser claro, não estou atualmente executando com --skip-grant-tables .

    
por Finn 22.05.2012 / 11:20

3 respostas

3

Antes de tudo, livre-se de --skip-grant-tables com

service mysql restart

Em seguida, vamos garantir que os usuários root do mysql tenham a senha correta:

SELECT user,host FROM mysql.user WHERE password=PASSWORD('rootpassword');

Se nada voltar, corrija a senha assim:

UPDATE mysql.user SET password=PASSWORD('rootpassword') WHERE user='root';
FLUSH PRIVILEGES;

Em seguida, vamos garantir que todos os usuários tenham uma senha:

SELECT user,host FROM mysql.user WHERE password='';

Se algo voltar, remova os usuários:

DELETE FROM mysql.user WHERE password='';
FLUSH PRIVILEGES;

Quando vi a mensagem

when I try to execute any commands it informs me that im not authorized to do that and that im user ''@'localhost'. I've shut down the server and run it with --skip-grant-tables, which lets me log in as root and I can actually do stuff, but I'm not sure how to get normal, local passworded root logins back

então eu disse para mim mesmo: OMG ele tem logons anônimos. Por favor, remova-os da seguinte forma:

mysql -uroot -p -e"DELETE FROM mysql.user WHERE user=''; FLUSH PRIVILEGES;"

Por favor, também remova todas as referências para testar bancos de dados de mysql.db

mysql -uroot -p -e"DELETE FROM mysql.db WHERE LEFT(db,4)='test'; FLUSH PRIVILEGES;"

Isto irá garantir a sua instalação do mysql

    
por 22.05.2012 / 21:58
1

Você NÃO deve continuar executando o servidor mysql com --skip-grant-table . Caso contrário, você não terá nenhum controle sobre os usuários se conectando ao seu servidor!

Você tem que desfazer as alterações que você fez no seu usuário root (e em qualquer outro usuário). Quando terminar, basta parar o servidor mysql e iniciá-lo normalmente.

    
por 22.05.2012 / 11:29
1

Depois de iniciar o mysqld com --skip-grant-tables você deve logar no mysql e executar:


use mysql;
UPDATE user SET Host='%' WHERE Host='*' AND User='root';


Depois disso, saia do mysql e reinicie o servidor sem --skip-grant-tables .

Tente fazer login como root e verifique se tudo está OK. (priviliges etc.)

--skip-grant-tables é apenas para fins de administração você não deve executar o mysql normalmente com este parâmetro

    
por 22.05.2012 / 12:26