no puede iniciar sesión como usuario root de mysql desde la cuenta de usuario normal en ubuntu 16.04

125

Acabo de instalar Ubuntu 16.04 LTS junto con los paquetes php , mariadb y nginx . Ejecuté mysql_secure_installation y cambié la contraseña de root.

Ahora, cuando intento iniciar sesión en mysql usando la cuenta raíz mientras estoy conectado a Ubuntu como cuenta de usuario normal, obtengo acceso denegado.

Cuando inicio sesión usando sudo mysql , mysql ni siquiera me pide contraseña. Si ejecuto mysql_secure_installtion , veo que las configuraciones antiguas nunca se configuraron de forma permanente.

¿Qué estoy haciendo mal?

    
pregunta codescope 02.05.2016 - 13:45

10 respuestas

229

Recientemente actualicé mi Ubuntu 15.04 a 16.04 y esto funcionó para mí:

  1. Primero, conéctese en sudo mysql

    sudo mysql -u root
    
  2. Verifique sus cuentas presentes en su db

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Eliminar la cuenta de root actual @ localhost

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Recreate your user

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Otorgue permisos a su usuario (no olvide eliminar los privilegios)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. Sal de MySQL e intenta volver a conectarte sin sudo.

Espero que esto ayude a alguien:)

    
respondido por el Loremhipsum 08.06.2016 - 11:04
80
  

Si instala 5.7 y no proporciona una contraseña al usuario root ,   usará el complemento auth_socket . Ese complemento no le importa y   no necesita una contraseña Solo comprueba si el usuario se está conectando   usando un socket UNIX y luego compara el nombre de usuario.

Tomado de Cambiar la contraseña de usuario en MySQL 5.7 con "plugin: auth_socket "

Entonces, para cambiar el plugin de nuevo a mysql_native_password :

  1. Iniciar sesión con sudo:

    sudo mysql -u root
    
  2. Cambia el plugin y configura una contraseña con un solo comando:

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

Por supuesto, también puedes usar el comando de arriba para establecer una contraseña vacía.

Solo para el registro, (y MariaDB < 10.2 usuarios) también hay otra manera de cambiar solo el plugin sin proporcionar una contraseña (dejándolo vacío):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;
    
respondido por el Todor 23.07.2016 - 09:46
7

El problema aquí es que cuando se instalan / actualizan MariaDB o MySQL (especialmente si en algún momento se establece un root sin una contraseña), en la tabla Usuarios la contraseña está realmente vacía (o ignorada), y el inicio de sesión depende del usuario del sistema correspondiente a un usuario de MySQL. Puede probar esto de la siguiente manera cambiando a la raíz del sistema y luego escriba:

mysql -uroot -p

Luego, ingrese la contraseña o la contraseña incorrecta . Probablemente lo dejen entrar (incluso puede iniciar sesión desde la raíz de Unix simplemente # mysql ya que la contraseña es irrelevante y el usuario está definido).

Entonces, ¿qué está pasando? Bueno, si inicia sesión como root y hace lo siguiente:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

observará auth_socket (que puede leer unix_socket en MariaDB). Estos sockets ignoran las contraseñas y permiten que el usuario de Unix correspondiente en sin compruebe la contraseña. Es por eso que puede iniciar sesión con root pero no con un usuario diferente.

Entonces, la solución es actualizar a los usuarios para que no usen auth_socket/unix_socket y establezcan correctamente una contraseña.

En MariaDB (& lt; 10.2) que está en la versión 16 de Ubuntu a partir de 2017, esto debería ser suficiente:

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(Es posible que configurar el plugin para vaciar funcionaría. YMMV. No probé esto.)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

De lo contrario:

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

Entonces

FLUSH PRIVILEGES;

Para el registro, la solución que implica eliminar al usuario y volver a crearlo con '%' me bloqueó totalmente de la base de datos y puede causar otros problemas a menos que obtenga la declaración grant exactamente correcta, es más fácil simplemente actualizar la la raíz que ya tienes

En mi experiencia, el problema solo ocurre con el usuario raíz, ya que otros usuarios se agregarán manualmente, no como parte de una instalación / actualización inicial.

    
respondido por el Gazzer 14.10.2017 - 06:18
2

Intenta crear una nueva cuenta de mysql, para mí ha funcionado (mysql 5.7.12):

  1. Iniciar sesión como sudo:

    sudo mysql -uroot
    
  2. Crear nuevo usuario y otorgarle privilegios (sin contraseña):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Iniciar sesión como nuevo usuario:

    mysql -uadmin
    
respondido por el Alex Yakovlev 28.05.2016 - 11:37
2

Si ha instalado MySQL / MariaDB desde el repositorio base, los usuarios no pueden iniciar sesión en MySQL como usuario root de MySQL desde sus inicios de sesión de Unix (no aplicable si tienen acceso sudo )

  1. Iniciar sesión en el shell raíz de MySQL:

    $ sudo mysql -u root -p
    
  2. Ejecutar debajo de las consultas:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Abra un nuevo shell, luego:

    $ mysql -u root -p
    

Fuente:

enlace

    
respondido por el Gayan Weerakutti 02.12.2017 - 09:31
1

Pruebe este código primero,

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

y luego,

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

luego presiona Ctrl+Z y escribe: bg para ejecutar el proceso desde el primer plano hasta el fondo, luego verifica tu acceso por:

mysql -u root -proot
mysql> show grants;
    
respondido por el ADHITHYA SRINIVASAN 28.05.2016 - 11:47
1

Si solo ejecuta el comando mysql en usuario root, se le otorgará acceso sin contraseña, porque la autenticación de socket está habilitada para root @ localhost. .

La única forma de establecer la contraseña es cambiar a autenticación nativa como:

  

$ sudo mysql

     

mysql & gt; ALTER USER 'root' @ 'localhost' IDENTIFICADO CON   mysql_native_password BY 'test';

    
respondido por el Vadiaz 26.07.2017 - 17:23
1

Tenía que hacer dos cosas (gracias a @Todor y @Loremhipsum):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

y luego:

FLUSH PRIVILEGES;

No recomendaría dejar caer el usuario root .

    
respondido por el Franc Drobnič 03.01.2018 - 17:43
0

He estado adaptando algunos scripts de aprovisionamiento que he creado para usar MariaDB y encontré este problema exacto. Recopilando mucha información aquí, una respuesta de Gazzer realmente se centra en el problema; todo se reduce a la configuración auth_socket / unix_socket .

Entonces, al usar MariaDB 5.5 (en Ubuntu 14.04) y MariaDB 10 en (Ubuntu 16.04), iniciar sesión en MySQL y ejecutar este comando lo solucionó de inmediato:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

Las otras respuestas, incluida la respuesta más votada a partir de esta publicación de Loremhipsum , fomentan realmente las malas prácticas al recomendar el abandono un usuario y luego recrearlos. Para mí, esa es una solución bastante radical. La mejor / más simple solución para anular el valor de plugin , eliminar privilegios y seguir con la vida.

    
respondido por el JakeGould 20.10.2017 - 02:54
-1

Tuve el mismo problema y al ejecutar lo siguiente lo solucioné:

mysql_upgrade --force
    
respondido por el klob 03.05.2016 - 08:48

Lea otras preguntas en las etiquetas