Como Investigar / Restaurar Permissões do MySQL? MySQL ERROR 1045 (28000): acesso negado para o usuário

1

ERRO 1045 (28000): Acesso negado para o usuário 'root' @ 'localhost' (usando a senha: YES) Debian.

o mysqld está escutando em 3306 supostamente

Telnet para 3306 obras

Também tentei ligar especificamente yo localhost e depois 127.0.0.1 que não fez diferença

No entanto:

# netstat -ln | grep mysql
unix  2      [ ACC ]     STREAM     LISTENING     78993    /var/run/mysqld/mysqld.sock

# mysql -P3306 -ptest
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Coisas que eu tentei:

dpkg-reconfigure mysql-server-5.1  Doesn't help

link Não ajuda

Este comando ( source ):

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;

Não ajuda, na verdade:

Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

O usuário pode ser excluído? Extremamente improvável, pois tudo isso começou depois que os pacotes foram atualizados e um colega começou a trabalhar, e alguns serviços separados começaram a dar errado, mas meu colega disse que ele removeu os infratores.

Há mais : enquanto # mysqld_safe --skip-grant-tables está rodando, pode-se acessar as tabelas de dados, somente com as senhas válidas! Portanto, há usuários e alguma autenticação ocorre, portanto, o 0 rows affected acima.

As tabelas de privilégios podem ser danificadas de alguma forma e como posso recriá-las / restaurá-las quando minha única maneira de obter um console do mysql é ignorá-las?

Posso poupar minha reinstalação do MySQL? De qualquer maneira eu consegui um dump dos DBs agora que eu poderia entrar com o modo acima.

    
por Recct 07.12.2012 / 12:45

1 resposta

1

Basicamente de link

Eu entrei em # mysqld_safe --skip-grant-tables open a # mysql -u root

fez UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

Fez um% normal/etc/init.d/mysql start (depois de matar a instância especial)

novamente # mysql -u root

então UPDATE mysql.user SET Password=PASSWORD('yrpass') WHERE User='root';

A raiz tem um passe. O mesmo para os outros usuários do mysql onde for necessário.

O que eu encontrei foi que não havia privilégios / concessões - independentemente de --skip-grant-tables .

Foi mais fácil com o MySQL Workbench primeiro faz do root um DBA como não era.

Depois disso, tive que restaurar alguns outros usuários. Felizmente eu tenho um dump de table_priv de antes (antes de tudo isso), então a restauração da tabela deve ser boa, mas isso é no meu caso.

Também tive alguns usuários de raiz em '%' 'localhost' '127.0.0.1' alguns deles tinham um passe antigo. sem ter que iniciar uma instância especial com --skip-grant-tables eu poderia entrar com o debian-sys-maint user, porém ele tinha uma senha diferente por causa das importações de dumps de outros sistemas! Eu resolvi isso ao analisar este artigo

O que causou tudo isso em primeiro lugar eu não sei, aberto para discussão.

    
por 07.12.2012 / 16:51