Permitir el acceso root de mysql del usuario root de Linux sin contraseña

28

En cPanel cuando estoy conectado como root y escribo "mysql" sin nombre de host y contraseña, me da acceso directo al usuario root de mysql.

Me gustaría hacer esto para uno de mis servidores que no son de cpanel donde el usuario root de Linux obtiene una contraseña sin iniciar sesión en el usuario root de mysql de la misma manera que lo hace en cPanel.

Es posible ?

usuario1066991
fuente

Respuestas:

53

La forma más fácil de hacer esto es usar una sección de cliente del archivo ~ / .my.cnf y agregar las credenciales allí.

[client]
user=root
password=somepassword
...

es una buena idea hacer que ese archivo sea legible solo por root también.

user9517 es compatible con GoFundMonica
fuente
1
Sí, esto funciona y así es como lo está haciendo cPanel
user1066991
99
Necesito señalar un posible problema de seguridad. Debes tener un poco de cuidado para no editar esto en el /etc/my.cnfque utiliza el servidor mysql para arrancar. Si coloca el usuario root de mysql en /etc/my.cnfCUALQUIERA, puede usar el servidor mysql con TODOS los privilegios en CADA base de datos sin contraseña. Iain apunta hacia el usuario del shell .my.cnfen el hogar de la raíz, lo cual es correcto, por supuesto.
Koen van der Rijt
¿Qué pasa si no hay un archivo ~ / .my.cnf? Si lo creo y reinicio mysqld, ¿se supone que puedo hacer esto?
Amalgovinus
21

Para mysql 5.7+, si configura una contraseña vacía para la configuración inicial, mysql se usará automáticamente auth_socketcomo estrategia. Un intento de actualizar la contraseña sin cambiar la estrategia no tendrá ningún resultado. Siempre puede iniciar sesión sin usar contraseña si su usuario lo es root.

Solución Ejecute el siguiente comando para cambiar la estrategia de autenticación y establecer la contraseña

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

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

chaintng
fuente
3
Tuve que agregar una cadena vacía al final para que funcione:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
kramer65
Intersting @kramer, sólo funciona si lo fijo a medida que ... BY "";. ¡Gracias!
Juan Antonio
Está cambiando passwiord a 'ANY_PASSWORD' y no borra la contraseña. Para borrar e iniciar sesión sin contraseña, configúrelo en una cadena vacía.
Fernando Kosh
7

A partir de MySQL 5.6.6, puede usar mysql_config_editor para crear un archivo encriptado que lo conectará automáticamente:

mysql_config_editor set --login-path=client --host=localhost --user=root --password

Luego ingrese la contraseña cuando se le solicite.

Nota: si su contraseña tiene '#' y posiblemente otros caracteres, use comillas simples al ingresar la contraseña.

Brian Deterling
fuente
¿Puedes dar más detalles sobre el comentario de comillas simples? Le está pidiendo la contraseña en el terminal, ¿está envolviendo la contraseña entre comillas
User2299958
Sí, descubrí que ingresarlo sin comillas no funcionaba si tenía caracteres especiales. Entonces, cuando se le solicite, simplemente ingrese '(comilla simple), luego la contraseña, luego'.
Brian Deterling
0

Hacer un archivo con solo contiene la contraseña de root de mysql y solo root puede leer.

# ls -l /root/.mysqlpw 
-rw------- 1 root root 7 2013-08-19 13:24 /root/.mysqlpw

Puede importar una base de datos con

# mysql -u root -p`cat /root/.mysqlpw ` yourdatabase < databasedump.sql

o conéctese a su base de datos y emita comandos mysql

# mysql -u root -p`cat /root/.mysqlpw ` yourdatabase
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20460
Server version: 5.1.63-0ubuntu0.10.04.1 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| yourdatabase       |
+--------------------+
3 rows in set (0.00 sec)

mysql> show tables;
...
jris198944
fuente
55
Esto es mucho más trabajo que la otra respuesta. Y tu contraseña es demasiado corta. :)
Michael Hampton
8
No hagas esto. Pone la contraseña en la línea de comando con la que cualquiera puede leer ps(1)
camh
Esa no es una buena idea
Fernando Kosh