Como o MySQL autoriza o usuário root da máquina?

0

Estou tentando correr mysqlcheck. Sua falha com:

$ sudo su -
# mysqlcheck --auto-repair --all-databases
mysqlcheck: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect

Outras perguntas e respostas dizem para modificar ou redefinir as senhas do MySQL. Eu realmente não quero fazer isso porque não sei o impacto. Se houver scripts usando, eu vou quebrá-los. No mínimo, eu tenho que compartilhá-lo com outros dois administradores de sistemas [meio período], então é principalmente uma dor.

O que eu gostaria é que o MySQL reconheça o usuário root da máquina (uid 0) e atribua a ele todos os privilégios concedidos ao root.

Estou trabalhando no CentOS 7.2. Como eu tenho o MySQL intitulado o usuário root?


Aqui estão algumas perguntas relacionadas. Todos eles levam de volta a modificar a senha.

jww
fonte

Respostas:

1

No MySQL 5.5+ você pode usar o auth_socket plugin de autenticação para isso:

CREATE USER 'root'@'localhost' IDENTIFIED WITH auth_socket;

MariaDB 5.2.0+ tem um semelhante unix_socket plugin - tanto quanto eu sei, é ainda ativo por padrão:

INSTALL PLUGIN unix_socket SONAME 'auth_socket';
CREATE USER root IDENTIFIED VIA unix_socket;

Da mesma forma, o PostgreSQL tem o método de autenticação "local" em sua pg_hba.conf e habilita por padrão.

Nos Unixes, o mecanismo geral é freqüentemente chamado de "peercred" , como em SO_PEERCRED. (O equivalente do Windows é geralmente chamado de "Autenticação nativa do Windows".)

grawity
fonte
Obrigado @Grawity. Você é conhecimento de Linux e Unix é incrível. Eu preciso verificar em fazer o acima (ingenuamente, eu pensei que eu iria virar um pouco mysql.conf ). Vou ter que voltar para você e aceitar.
jww
0

Com base no que você disse, vou supor que seu usuário do MySQL 'root'@'localhost' tem uma senha desde que você mencionou o compartilhamento com outras pessoas. E por causa disso eu também estou supondo que você ainda conhece essa senha.

Agora vamos dar uma olhada no que a mensagem de erro diz:

Access denied for user 'root'@'localhost' (using password: NO)

Então, o que estou vendo aqui é que você está tentando se conectar ao MySQL sem fornecer uma senha enquanto o usuário mysql tem uma senha. Obviamente isso não funciona.

eu aposto mysqlcheck --auto-repair --all-databases -p vai funcionar. Ele pedirá a senha e você deve estar pronto para ir.


Tendo dito tudo o que eu aconselho fortemente contra o uso da conta de root do MySQL para outras coisas além de administrar o servidor MySQl (desde que você mencionou If there are any scripts using it ), basta fazer outro usuário MySQL para esse script com as permissões apropriadas. E se você realmente precisar redefinir sua senha de root, dizer a outros dois colegas não deveria ser um problema assim, certo? Se é que eu iria avaliar seus métodos de comunicação de empresas ....

Olle Kelderman
fonte
"usando a conta de root do MySQL ..." - Na verdade, é o usuário root da máquina; e não uma conta MySQL. Efetivamente, estou pedindo alguma integração com o MySQL nos mecanismos de segurança da instalação local do Linux.
jww
Certifique-se de que é o usuário root da máquina, mas isso não muda o fato de que o MySQL apenas usa qualquer nome de usuário da máquina, se nenhum for fornecido. Efetivamente você ainda usa a conta root do MySQL
Olle Kelderman
" mysqlcheck --auto-repair --all-databases -p " - que solicita uma senha, mesmo quando executado como o usuário root com sudo su -.
jww
1
Então, basicamente, essa pergunta é "Como faço o login no MySQL com um usuário MySQL que possui uma senha sem usar a senha"?
Olle Kelderman
Bem, eu já usei a senha com sudo su -. A elevação foi autenticada e o novo contexto de segurança está disponível. O que eu gostaria é que o MySQL honre ou use isso.
jww