No se puede ingresar phpmyadmin como root (MySQL 5.7)


66

Estoy usando Ubuntu Desktop 16.04 (actualizado desde 15.10).

Había instalado phpmyadmin de por apt-get install phpmyadmin. Funciona si voy localhost/phpmyadminpero no puedo iniciar sesión como root.

Lo he buscado mucho. He encontrado muchas fuentes en las que sugieren alterar /etc/phpmyadmin/config.inc.phpy reemplazar el usuario y la contraseña con 'root' y '' (vacío para contraseña). Pero mi config.inc.phpes diferente de la de ellos. Por ejemplo, en mi archivo, no hay una línea para el usuario y la contraseña y parece que la obtiene automáticamente de otro archivo que es /etc/phpmyadmin/config-db.php. A pesar de esto, he cambiado el usuario y la contraseña en ese archivo, pero ahora aparece este error:

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

¿Qué debería hacer?


Versión de Phpmyadmin: 4.5.4.1deb2ubuntu1
mysql Ver 14.14 Distrib 5.7.12, para Linux (x86_64) usando el envoltorio EditLine


¿Qué versión de MySQL?
Rael Gugelmin Cunha

Pregunta actualizada
Mostafa Ahangarha

LA MANERA SIMPLE buscar inicio de sesión y contraseña en /etc/mysql/debian.cnf - Ubuntu 16.04
cl-r

Respuestas:


128

MySQL 5.7 cambió el modelo seguro: ahora el rootinicio de sesión MySQL requiere a sudo.

Es decir, phpMyAdmin no podrá usar rootcredenciales.

La solución más simple, segura y permanente será crear un nuevo usuario y otorgar los privilegios necesarios.

1. Conéctese a mysql

sudo mysql --user=root mysql

2. Crea una contraseña real

En los pasos a continuación lo usaré some_passcomo contraseña de muestra. ¡POR FAVOR, REEMPLAZA POR TU CONTRASEÑA! ¡NO LO USE SOME_PASSCOMO CONTRASEÑA!

3. Cree un usuario para phpMyAdmin

Ejecute los siguientes comandos (reemplazando some_passpor la contraseña deseada):

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

Si su phpMyAdmin se conecta a localhost, esto debería ser suficiente.

4. Opcional e inseguro: permitir conexiones remotas

Recuerde : permitir que un usuario remoto tenga todos los privilegios es un problema de seguridad y esto no es obligatorio en la mayoría de los casos.

Con esto en mente, si desea que este usuario tenga los mismos privilegios durante las conexiones remotas, ejecute adicionalmente (reemplazando some_passpor la contraseña utilizada en el Paso # 2):

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

5. Actualiza phpMyAdmin

Utilizando sudo, edite el /etc/dbconfig-common/phpmyadmin.confarchivo actualizando los valores de usuario / contraseña en las siguientes secciones (reemplazando some_passpor la contraseña utilizada en el Paso # 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'

2
Investigaré Mientras tanto, mientras tanto, puede agregar un nuevo usuario y otorgar todos los permisos y luego agregar esto al archivo de configuración phpmyadmin.
Rael Gugelmin Cunha

9
Me encanta que MySQL siga rompiendo cosas después de las actualizaciones. Estaba felizmente usando root en mi workbench y ahora parece que la única solución es "sudo mysql" en la línea de comando, crear un nuevo usuario, otorgar los mismos privilegios y usar eso en Workbench. Estúpido.
Andris

3
@MostafaAhangarha Después de investigar, descubrí que la contraseña en blanco está permitida, pero el rootusuario siempre requirió el sudouso en 5.7. Por lo tanto, he actualizado la respuesta para guiar a crear un nuevo usuario con todos los privilegios.
Rael Gugelmin Cunha

3
@Andris Esto obligará a las personas a usar MySQL de una manera más segura. Nunca es una buena idea permitir que el usuario raíz de su base de datos inicie sesión sin una contraseña de todos modos. Puede estar bien en una máquina de desarrollo local, pero en un servidor es muy peligroso.
Dan

2
@Dan, esa es mi mayor queja: rompió mi entorno de desarrollo local después de actualizar a Ubuntu 16.04 sin ninguna advertencia. No me importa que cosas como esta sean las predeterminadas para nuevas instalaciones, pero al menos podría preguntar antes de instalar una actualización.
Andris

10

Estaba enfrentando el mismo problema cuando usaba mariaDB con phpmyadmin (Ubuntu 16.04LTS).

Prerrequisitos:

1) Instalar 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

Si quieres 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) Instalar 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) En apache2, cree un enlace simbólico a phpmyadmin

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

Bien, ahora, si sigues las instrucciones de Rael, podrás iniciar sesión phpmyadmin, pero, al menos para mí, no pude crear nuevas bases de datos, ya que apareció un mensaje rojo: No privileges(o algún mensaje similar)

La solución fue reconfigurar phpmyadmin y responder algunas preguntas interactivas.

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

Ahora, si intentas conectarte a phpmyadmin ( localhost/phpmyadmin) usando

username: root
password: pass

Podrás crear bases de datos.


1
Gracias por su respuesta. ¿Pero no era mejor compartir la última parte en lugar de la totalidad? Creo que el resto no es útil aquí?
Mostafa Ahangarha

@MostafaAhangarha Tal vez la publicación es demasiado larga, pero siempre me gusta saber en qué contexto se da una respuesta.
Dan Costinel

¿ sudo dpkg-reconfigure phpmyadmin Ejecutar tiene alguna conexión para instalar mariadb y desinstalar mysql? En caso afirmativo, su información podría ser útil (podría ser porque está sugiriendo la eliminación de mysql, que es la base de datos que estoy usando y usaré). Si no, entonces no tiene sentido darlo como contexto. Si me equivoco, corrígeme.
Mostafa Ahangarha

2
Solo seguí la reconfiguración y ahora funciona.
cwhisperer

¿Es una buena idea no tener una contraseña para la cuenta raíz?
kurdtpage

6

En Ubuntu 16.04 para Mysql 5.7 verifique la información de la tabla a continuación y realice las configuraciones necesarias:

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 |
+------------------+-----------+-----------------------+

Compruebe si la raíz tiene el complemento auth_socket y luego ejecute el siguiente comando:

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

Funcionará hasta la próxima aptactualización de MySQL . Es decir, deberá aplicar esto después de cada actualización de MySQL en Ubuntu.
Rael Gugelmin Cunha

6

Si phpymadmin no puede conectarse, puede deberse al mecanismo de autenticación establecido en auth_socket. Puede cambiarlo para usar una contraseña normal como esta:

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

Estaba luchando con esto justo ahora en una instalación limpia de Ubuntu 18.04 y esto es lo que lo hizo funcionar. Aquí hay un artículo decente que explica más:

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


3

Para completar, he encontrado una solución a mis problemas al usar MariadB versión 10.1.23. La sintaxis a usar para configurar un nuevo usuario es similar a la que se informó en la publicación anterior de @Rael Gugelmin Cunha, pongo aquí mi solución para referencia a otros que enfrentan el mismo 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;

Saludos


1
Bienvenido a Ask Ubuntu! Ask Ubuntu es solo para Ubuntu, no publique respuestas sobre Raspbian (basado en Debian).
fosslinux

2
@ubashu Esta solución no es específica de Raspbian, es específica de MariaDB.
Thomas Ward

¡Gracias! Sin embargo, todavía no hay opción para crear una nueva base de datos.
peligro89

2

Tuve el mismo problema, he seguido la mayoría de los consejos y ninguno me funcionó. Mi problema era el mismo cuando abrí http: // localhost / phpmyadmin en mi navegador, pedía los detalles de inicio de sesión.

Estaba usando root como usuario, y la contraseña que sabía era correcta. Y me estaba poniendo

# 1698 - Acceso denegado para el usuario 'root' @ 'localhost'

Todo lo que necesité fue usar phpmyadmincomo usuario, no root, con la contraseña conocida y me dejó entrar.


3
¿Quieres decir que el nombre de usuario debe ser "phpmyadmin"?
Mostafa Ahangarha

1
Sí, funcionó para mí
plutesci

Y para mí que siguió un tutorial, la contraseña era "some_pass" jaja. ¡Gracias!
Marcelo Ágil

@ MarceloÁgil ¡He colocado varias advertencias en mi respuesta anterior pidiendo a las personas que las reemplacen some_passpor una contraseña real!
Rael Gugelmin Cunha

1

Refiriéndose a Rael Cunha:

Sí, su solución funciona, y he probado otros. Sin embargo, referirse a un usuario que tiene una contraseña expuesta en un archivo de configuración /etc/dbconfig-common/phpmyadmin.confcomo un defecto de seguridad para una acción en todo el sistema.

Así que preferiría sugerir en lo MariaDB 10.1.xque respecta (some_user y some_pass serán cualquier cosa que se te ocurra):

# 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;

y dejando la configuración de phpadmin (4) como está.

Inicie sesión en phpmyadmin con sus propias credenciales después

En mis propias configuraciones, reemplazo el '%' anterior por 'localhost' por razones de seguridad, pero si tiene el puerto 3306 cerrado en su servidor, eso no necesariamente representaría un riesgo de seguridad para usted.


0

Solo el código siguiente funciona para ubuntu 18.04, php 7 anterior y mysql 5.7

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

No reemplace 'phpmyadmin'. Crear cualquier otro usuario no tiene privilegios completos como crear un nuevo usuario, así asignar privilegios de base de datos a ese usuario. Solo el usuario phpmyadmin obtendrá acceso completo.


-2

si instala MySQL por separado, deténgalo con este comando a continuación sudo / opt / lampp / lampp stop service mysql stop sudo / opt / lampp / lampp start

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.