mysql (mariadb) ERRO 1698 (28000): Acesso negado para o usuário 'root' @ 'localhost'


23

Estou trabalhando no Xubuntu 15.04. Eu já instalei o MariaDB-Server em vários sistemas e sempre fui solicitada uma senha root durante a instalação. Desta vez, no entanto, não me lembro de ter sido solicitada a senha. Quando tento fazer login sem uma senha (ou uma senha em branco), recebo o Access denied for user 'root'@'localhost'erro. Eu tentei desinstalar o pacote completamente

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

Quando reinstalei, ainda não recebi a senha de root.

Eu tentei a mysqld --skip-grant-tablesabordagem do mysql como corrigir o acesso negado para o usuário 'root' @ 'localhost' . Posso modificar a senha do usuário root no banco de dados mysql - pelo menos, o valor do hash é alterado - mas ainda não consigo fazer login com a nova senha após uma reinicialização do servidor mysql. Ainda obtenho o mesmo erro.

O usuário debian-sys-maint não existe. Portanto, não posso usá-lo para consertar nada.

Alguma idéia do que mais eu poderia tentar?


Um tópico útil com a mesma pergunta no StackOverflow: stackoverflow.com/questions/39281594/…
Kevin - Reinstate Monica

Respostas:


36

Você precisa redefinir a senha. então para isso

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

9
A "mágica" não óbvia dessa abordagem é que o usuário do sistema operacional raiz pode efetuar login no banco de dados sem precisar especificar uma senha porque plugin: auth_socketestá ativada, por padrão. Em outras palavras, não há necessidade de usar o --skip-grant-tablesque seria necessário nas versões anteriores do MySQL. (Além disso, tecnicamente, essa medida não está "redefinindo a senha"; está desabilitando um plug-in.) #
227 Ben Johnson Ben Johnson

11
+1, você pode explicar o motivo?
A1Gard

4
Essa abordagem causará problemas posteriormente. Se você desativar o plug-in, o trabalho diário do cron será interrompido, pois pressupõe que ele possa efetuar login com esse plug-in. Veja minha resposta para detalhes.
colan

11

A idéia com a nova configuração é que você não deve usar senhas. Consulte o plugin de autenticação UNIX_SOCKET para obter detalhes.

O que é especialmente relevante é o conteúdo de /usr/share/doc/mariadb-server-10.0/README.Debian.gz no Ubuntu 16.04:

Em novas instalações, nenhuma senha root é definida e nenhum usuário debian-sys-maint é criado. Em vez disso, a conta raiz do MariaDB é configurada para ser autenticada usando o soquete unix, por exemplo, qualquer chamada mysqld por raiz ou via sudo permitirá que o usuário veja o prompt do mysqld.

Você nunca pode excluir o usuário mysql "root". Embora não tenha uma senha definida, o plug-in unix_auth garante que ele possa ser executado apenas localmente como usuário root.

As credenciais em /etc/mysql/debian.cnf especificam o usuário que é usado pelos scripts init para parar o servidor e executar a rotação de log. Este costumava ser o usuário debian-sys-maint que não é mais usado, pois o root pode ser executado diretamente.

Portanto, se você desativar esse plug-in para root e definir uma senha, o trabalho diário do cron será interrompido, pois pressupõe que ele efetue login como root sem uma senha, mas com o plug-in.

Depois diz:

Os scripts devem ser executados como um usuário com as concessões necessárias e ser identificados via unix_socket.

Portanto, parece que as senhas não devem mais ser usadas pelos aplicativos.


11
Acabei de encontrar o mesmo problema que você descreve: "So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."A implicação não óbvia do plug-in de autenticação UNIX_SOCKET que está sendo ativado (que agora é o padrão) é a capacidade de se autenticar como usuário do banco de dados raiz com uma senha desativada. Em nenhum lugar do mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin está mencionada essa limitação considerável. Portanto, é impossível fazer login como root, por exemplo, através do SSH.
Ben Johnson

2

Resolvi o problema seguindo a resposta deste post:

Não é possível redefinir a senha de root do MySQL (MariaDB)

É necessário alterar o campo do plugin mysql.user para todas as raízes para uma string em branco.


Esta edição é descrita aqui: percona.com/blog/2016/03/16/…
antonu17 12/12/16

3
Essa abordagem causará problemas posteriormente. Se você desativar o plug-in, o trabalho diário do cron será interrompido, pois pressupõe que ele possa efetuar login com esse plug-in. Veja minha resposta para detalhes.
colan

1

Eu fiz isso executando este comando, logo após a instalação:

$ sudo mysql_secure_installation

Na primeira etapa, a senha está em branco, então pressione Enter.


11
Não está em branco se já estiver definido, o que minha senha esquecida é… então ainda não consigo fazer login
Dave Everitt 18/08

0

Eu tive o mesmo problema em um raapberry pi com estiramento. Minha solução foi criar um novo usuário com todos os privilégios, fazendo o seguinte:

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

Agora eu posso fazer o login e o usuário "admin" como superusuário.

Espero que isso ajude alguém.


0

Basta usar sudo mysql -u root- é isso


Detalhes: As versões mais recentes são autenticadas no mysql usando a autenticação do sistema. Portanto, se você pode sudo para o sistema operacional, ele assume que você também é db root. Você pode confirmar isso emitindo sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Você deve ver algo assim (talvez auth_socketem outras distros)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+

Estou logado como root, mas para mim esse comando ainda quer a senha root do MariaDB… que eu esqueci :-(
Dave Everitt 18/08
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.