Não é possível inserir phpmyadmin como root (MySQL 5.7)

66

Estou usando o Ubuntu desktop 16.04 (atualizado a partir de 15.10).

Eu tinha instalado o phpmyadmin de por apt-get install phpmyadmin. Funciona se eu for, localhost/phpmyadminmas não consigo fazer login como root.

Eu procurei muito por isso. Encontrei muitas fontes nas quais eles sugerem alterar /etc/phpmyadmin/config.inc.phpe substituir o usuário e a senha por 'root' e '' (vazio para a senha). Mas o meu config.inc.phpé diferente do deles. Por exemplo, no meu arquivo, não há linha para usuário e senha e parece que ela é obtida automaticamente de outro arquivo /etc/phpmyadmin/config-db.php. Apesar disso, alterei o usuário e a senha nesse arquivo, mas agora recebo este erro:

#1698 - Access denied for user 'root'@'localhost'

O que eu deveria fazer?


Phpmyadmin Versão: 4.5.4.1deb2ubuntu1
mysql Ver 14.14 Distrib 5.7.12, para Linux (x86_64) usando o wrapper EditLine

Mostafa Ahangarha
fonte
Qual versão do MySQL?
Rael Gugelmin Cunha
A pergunta é atualizada
Mostafa Ahangarha
A maneira simples de busca de login e pathword em /etc/mysql/debian.cnf - Ubuntu 16.04
CL-r

Respostas:

127

O MySQL 5.7 mudou o modelo seguro: agora o rootlogin no MySQL requer a sudo.

Ou seja, o phpMyAdmin não poderá usar rootcredenciais.

A solução mais simples, segura e permanente será criar um novo usuário e conceder os privilégios necessários.

1. Conecte-se ao mysql

sudo mysql --user=root mysql

2. Crie uma senha real

Nas etapas abaixo, usarei some_passcomo uma senha de amostra. POR FAVOR, SUBSTITUA POR SUA SENHA! NÃO USE SOME_PASSCOMO SENHA!

3. Crie um usuário para phpMyAdmin

Execute os seguintes comandos (substituindo some_passpela senha desejada):

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Se o seu phpMyAdmin estiver se conectando ao host local, isso deve ser suficiente.

4. Opcional e não seguro: permita conexões remotas

Lembre - se : permitir que um usuário remoto tenha todos os privilégios é uma preocupação de segurança e isso não é necessário na maioria dos casos.

Com isso em mente, se você deseja que esse usuário tenha os mesmos privilégios durante as conexões remotas, execute adicionalmente (substituindo some_passpela senha usada na Etapa 2):

CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

5. Atualize o phpMyAdmin

Usando sudo, edite o /etc/dbconfig-common/phpmyadmin.confarquivo atualizando os valores de usuário / senha nas seções a seguir (substituindo some_passpela senha usada na Etapa 2):

# dbc_dbuser: database user
#       the name of the user who we will use to connect to the database.
dbc_dbuser='phpmyadmin'

# dbc_dbpass: database user password
#       the password to use with the above username when connecting
#       to a database, if one is required
dbc_dbpass='some_pass'
Rael Gugelmin Cunha
fonte
2
Eu investigarei. Como solução alternativa, entretanto, você pode adicionar um novo usuário e conceder todas as permissões e, em seguida, adicioná-lo ao arquivo de configuração phpmyadmin.
Rael Gugelmin Cunha
9
Adorei que o MySQL continue quebrando as coisas após atualizações. Estava felizmente usando root no meu ambiente de trabalho e agora parece que a única solução é "sudo mysql" na linha de comando, criar um novo usuário, conceder todos os mesmos privilégios e usá-lo no Workbench. Estúpido.
28916 Andris
3
@MostafaAhangarha Após investigar, descobri que a senha em branco é permitida, mas o rootusuário sempre exigia o sudouso no 5.7. Atualizei a resposta para orientar a criação de um novo usuário com todos os privilégios.
Rael Gugelmin Cunha
3
@ Andrew Isso forçará as pessoas a usar o MySQL de uma maneira mais segura. Nunca é uma boa idéia permitir que o usuário root no seu banco de dados faça login sem uma senha de qualquer maneira. Pode ser bom em uma máquina de desenvolvimento local, mas em um servidor é muito perigoso.
28416 Dan
2
@ Dan - essa é a minha maior queixa - quebrou meu ambiente de desenvolvimento local após a atualização para o Ubuntu 16.04 sem nenhum aviso. Não me importo que coisas como essa sejam o padrão para novas instalações, mas pelo menos poderia perguntar antes de instalar uma atualização.
28916 Andris
10

Eu estava enfrentando o mesmo problema ao usar o mariaDB com o phpmyadmin (Ubuntu 16.04LTS).

Pré-requisitos:

1) Instale o MariaDB

sudo apt-get -y install mariadb-server mariadb-client
sudo mysql_secure_installation (answer to some interactive questions):
    Enter current password for root (enter for none): <enter>
    Set root password: n
    Remove anonymous users: n
    Disallow root login remotely: n
    Remove test database and access to it: n
    Reload privilege tables now: Y

Se você deseja desinstalar mariaDB:

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

2) Instale o phpmyadmin

sudo apt-get -y install phpmyadmin (and answer some interactive questions)
    Configuring phpmyadmin:
        Web server to reconfigure automatically: apache2
        Configure database for phpmyadmin with dbconfig-common: Yes
        MySQL application password for phpmyadmin: <blank>

3) No apache2, crie um link simbólico para phpmyadmin

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin.conf
sudo service apache2 restart

Ok, agora, se você seguir as instruções de Rael, poderá fazer login phpmyadmin, mas, pelo menos para mim, não consegui criar novos bancos de dados, pois uma mensagem vermelha apareceu: No privileges(ou alguma mensagem semelhante)

A correção foi reconfigurando o phpmyadmin e respondendo a algumas perguntas interativas.

sudo dpkg-reconfigure phpmyadmin
<Ok>
Reinstall database for phpmyadmin: <Yes>
Connection method for MySQL database server for phpmyadmin: TCP/IP
Host name of the MySQL database server for phpmyadmin: localhost
Port number for the MySQL service: 3306
MySQL database name for phpmyadmin: phpmyadmin
<Ok>
MySQL username for phpmyadmin: root
MySQL application password for phpmyadmin: pass  # OR ANY PASSWORD YOU WANT
Password confirmation: pass
Name of the database's administrative user: root
Web server to reconfigure automatically: apache2
An error occurred while installing the database: ignore

Agora, se você tentar se conectar ao phpmyadmin ( localhost/phpmyadmin) usando

username: root
password: pass

você poderá criar bancos de dados.

Dan Costinel
fonte
11
Obrigado pela sua resposta. Mas não era melhor apenas compartilhar a última parte em vez da totalidade? Eu acho que o resto não é útil aqui?
Mostafa Ahangarha 20/03
@MostafaAhangarha Talvez o post seja um pouco longo demais, mas eu sempre gosto de saber o contexto em que uma resposta é dada.
Dan Costinel
A execução sudo dpkg-reconfigure phpmyadmin tem alguma conexão com a instalação do mariadb e do desinstalação do mysql? Se sim, suas informações podem ser úteis (pode ser porque você está sugerindo a remoção do mysql, que é o banco de dados que estou usando e utilizarei). Caso contrário, não há sentido em apresentá-lo como contexto. Se eu estiver errado, me corrija.
Mostafa Ahangarha
2
Eu apenas segui a reconfiguração e agora funciona.
cwhisperer
É uma boa ideia não ter senha para a conta root?
precisa saber é o seguinte
6

No Ubuntu 16.04 para Mysql 5.7, verifique as informações da tabela abaixo e execute as configurações necessárias:

mysql>  SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
| phpmyadmin       | localhost | mysql_native_password |
| root             | %         | mysql_native_password |
+------------------+-----------+-----------------------+

Verifique se o root está tendo o plugin auth_socket e execute o comando abaixo:

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
Syed Abdul Qadeer
fonte
Funcionará até a próxima aptatualização do MySQL . Ou seja, você precisará aplicar isso após cada atualização do MySQL no Ubuntu.
Rael Gugelmin Cunha
6

Se o phpymadmin não puder se conectar, pode ser devido ao mecanismo de autenticação definido como auth_socket. Você pode alterá-lo para usar uma senha comum como esta:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_password';

Eu estava lutando com isso agora em uma instalação limpa do Ubuntu 18.04 e foi isso que fez o trabalho. Há um artigo decente aqui explicando mais:

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

billynoah
fonte
3

Para ser completo, encontrei uma solução para meu problema ao usar o MariadB versão 10.1.23. A sintaxe a ser usada para configurar um novo usuário é semelhante à relatada na postagem acima de @Rael Gugelmin Cunha, coloquei aqui minha solução para referência a outras pessoas que enfrentam o mesmo problema:

root@raspberrypi:# sudo mysql --user=root mysql
use mysql;
CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'some_password';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Saudações

RAPOSA DE FOGO
fonte
11
Bem-vindo ao Ask Ubuntu! Ask Ubuntu é apenas para Ubuntu, por favor não poste respostas sobre Raspbian (baseado no Debian).
fosslinux
2
@ubashu Esta solução não é específica para Raspbian, é específica para MariaDB.
Thomas Ward
Obrigado! Ainda não há opção para criar um novo banco de dados.
precisa saber é o seguinte
2

Eu tive o mesmo problema, segui a maioria dos conselhos e nada funcionou para mim! Meu problema foi o mesmo quando abri http: // localhost / phpmyadmin no meu navegador, solicitando os detalhes de login.

Eu estava usando o root como usuário e a senha que eu conhecia estava correta. E eu estava recebendo

# 1698 - Acesso negado para o usuário 'root' @ 'localhost'

Bastava usar phpmyadmincomo usuário, não rootcom a senha conhecida e me permitir entrar.

plutesci
fonte
3
Você quer dizer que o nome de usuário deve ser "phpmyadmin"?
Mostafa Ahangarha
11
Sim ele trabalhou para mim
plutesci
E para mim que seguiu um tutorial, a senha era "some_pass" haha. Obrigado!
Marcelo Ágil 16/07
@ MarceloÁgil Coloquei vários avisos na minha resposta acima pedindo às pessoas para substituí-las some_passpor uma senha real!
Rael Gugelmin Cunha
1

Referindo-se a Rael Cunha:

Sim, sua solução funciona, e eu tentei outros. No entanto, referir-se a um usuário que possui uma senha exposta em um arquivo de configuração /etc/dbconfig-common/phpmyadmin.confparece uma falha de segurança para uma ação em todo o sistema.

Então, eu prefiro sugerir no que MariaDB 10.1.xdiz respeito (some_user e some_pass serão qualquer coisa que você possa criar):

# mysql -u root
use mysql;
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON \*.\* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

e deixando o phpadmin setup (4) como está.

Faça logon no phpmyadmin com suas próprias credenciais depois

Nas minhas próprias configurações, substituo o '%' acima por 'localhost' para fins de segurança, mas se você tiver a porta 3306 fechada no servidor, isso não representaria necessariamente um risco à segurança.

Antonio J. de Oliveira
fonte
0

Somente o código abaixo funciona para o ubuntu 18.04, php 7 acima e mysql 5.7

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Não substitua 'phpmyadmin'. Criar qualquer outro usuário não tem privilégios completos, como criar novo usuário, atribua privilégios de banco de dados a esse usuário assim. Somente o usuário phpmyadmin terá acesso total.

Hemamalini
fonte
-2

se você instalar o MySQL separadamente, pare com este comando abaixo: sudo / opt / lampp / lampp stop service mysql pare o sudo / opt / lampp / lampp start

zouhair elhadraoui
fonte