Habilite el acceso sin contraseña a MySQL

15

¿Cómo puedo eliminar mi contraseña para MySQL? No quiero tener una contraseña para conectarme a la base de datos. Mi servidor está ejecutando Ubuntu.

Yosef
fuente
Solo como cuestión de interés, ¿por qué no quieres una contraseña?
John Gardeniers
Por ejemplo, me encuentro con errores cuando ejecuto "dpkg-reconfigure phpmyadmin". Se detiene con el error 1045 con acceso denegado root @ localhost "contraseña: no" terminando.
Lacek

Respuestas:

29

Personalmente, creo que es mejor establecer una contraseña y guardarla en /root/.my.cnf:

Primero:

mysqladmin -u root password 'asdfghjkl'

Luego edite el archivo raíz .my.cnf:

[client]
password = asdfghjkl

Asegúrate de hacerlo chmod 0600 .my.cnf.

Ahora tiene una contraseña pero ya no se le solicita. Mi instalación predeterminada del servidor MySQL es una contraseña única totalmente aleatoria para cada servidor MySQL, guardada en el archivo .my.cnf como este.

freiheit
fuente
1
Estoy totalmente de acuerdo con la configuración de su entorno para autenticarlo automáticamente en lugar de eliminar la contraseña.
Zoredache
2
Es posible que necesite citas alrededor de esa contraseña en .my.cnf. No funcionó para mí sin.
user67641
1
@ user67641: Puede depender de la versión y de lo que hay en su contraseña ... Las mías son largas cadenas aleatorias de caracteres alfanuméricos (sin caracteres especiales) y no se necesitan comillas.
Freiheit
2
Si necesita crear /root/.my.cnf, vale la pena establecer explícitamente los permisos 0600 para asegurarse de que ningún otro usuario pueda espiar. La mayoría de las veces los usuarios normales no pueden descender a / root, pero la paranoia adicional casi siempre está justificada.
Dale Anderson
Missing mv ./+%Y%m%d. $ Db.sql $ OUTPUT` entre mysqldump y gzip
Siddharth
9

Si TIENES una contraseña establecida para MySQL, sigue las instrucciones en Recuperar contraseña de root de MySQL y luego configura tu contraseña como nula:

Para 5.7.6 y posterior

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'

Para 5.7.5 y anteriores

update user set password=PASSWORD("") where User='root';

* necesita un reinicio de la base de datos (consulte las instrucciones en el enlace) para que esto surta efecto.

sudo service mysql restart
Stefan Lasiewski
fuente
en este caso, no olvide "descargar privilegios";
Marco Ramos
@meyosef: marque una respuesta como respondida si resolvió su problema (haga clic en la marca de verificación verde debajo del número de votos).
jneves
Pensé que podría usar una contraseña vacía solo para el socket Unix y no para el loopback, pero no es posible. El unix_socketcomplemento hace algo ligeramente diferente.
Cuenca
9

Sí, menos contraseñas pueden ser algo bueno. Pero no solo abra la base de datos para todos.

a través de unix_socket:

grant usage on *.* to 'root'@'localhost' identified via unix_socket;

Esto le proporciona acceso mysql sin contraseña para un usuario root conectado localmente. Por cierto. Este es el valor predeterminado en las últimas versiones de Ubuntu / Debian.

some_user@box: mysql -u root  # denied
root@box: mysql               # good
some_user@box: sudo mysql     # good, if "some_user" has sudo rights.

Diapositivas explicativas: https://www.slideshare.net/ottokekalainen/less-passwords-more-security-unix-socket-authentication-and-other-mariadb-hardening-tips .

Matthias Bloch
fuente
2
¡Bienvenido a SF! Encantadora primera respuesta: claro, un buen resumen, un enlace para una mayor exploración, y agrega algo al corpus de respuestas existente. Estoy encantado de ser tu primer voto a favor, y espero que te quedes para escribir más respuestas como esta.
MadHatter
Las diapositivas están bien, pero esta es la documentación real: mariadb.com/kb/en/library/authentication-plugin-unix-socket
JonnyJD
5

También puedes hacer:

grant all privileges on *.* to 'root'@'localhost' identified by '';
jkff
fuente
1

Estoy bastante seguro de que, de forma predeterminada, no hay contraseña si es el usuario administrador y accede a ella localmente. ¿Estás encontrando algo diferente a eso?

¿Esto funciona?

#> mysqladmin -u root password ''
djangofan
fuente