Acabo de instalar Ubuntu 16.04 LTS junto con los paquetes php
, mariadb
y nginx
. Corrí mysql_secure_installation
y cambié la contraseña de root.
Ahora, cuando intento iniciar sesión para mysql
usar 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 la configuración anterior nunca se estableció de forma permanente.
¿Qué estoy haciendo mal?
fuente
%
significa que puedas conectarte desde cualquier lugar ... de forma remotagrant all privileges on *.* to 'root'@'localhost' with grant option;
Tomado de Cambiar contraseña de usuario en MySQL 5.7 con "plugin: auth_socket"
Entonces, para cambiar la
plugin
espalda amysql_native_password
:Inicie sesión con sudo:
Cambie
plugin
y establezca una contraseña con un solo comando:Por supuesto, también puede usar el comando anterior para establecer una contraseña vacía.
Solo para el registro (y los
MariaDB < 10.2
usuarios) también hay otra forma de cambiar soloplugin
sin proporcionar una contraseña (dejándola vacía):fuente
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;
Fuente: stackoverflow.com/a/41537019/1004587En resumen, en MariaDB
donde reemplaza NEWPASSWORD con la contraseña que desea, y todo lo demás textualmente.
El problema aquí es que cuando MariaDB o MySQL se instalan / actualizan (especialmente si en algún momento la raíz se configura sin 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:
Luego ingrese sin contraseña o la contraseña incorrecta . Probablemente se le permitirá ingresar. (Incluso puede iniciar sesión desde la raíz de Unix simplemente
# mysql
porque la contraseña es irrelevante y el usuario está definido).¿Entonces que esta pasando? Bueno, si inicia sesión como root y hace lo siguiente:
notarás
auth_socket
(que puedes leerunix_socket
en MariaDB). Estos sockets ignoran las contraseñas y permiten que el usuario de Unix correspondiente ingrese sin una verificación de contraseña. Es por eso que puede iniciar sesión con root pero no con un usuario diferente.Por lo tanto, la solución es actualizar a los usuarios para que no usen
auth_socket/unix_socket
y establecer una contraseña correctamente.En MariaDB (<10.2, vea los comentarios a continuación) que se encuentra en la versión 16 de Ubuntu a partir de 2017, esto debería ser suficiente. NEWPASSWORD es tu contraseña.
mysql_native_password
escribes al pie de la letra.(Es posible que configurar el complemento para vaciar funcione. YMMV. No probé esto. Así que esta es una alternativa).
De otra manera:
Entonces
Para el registro, la solución que implica eliminar al usuario y recrearlo con '%' me dejó totalmente bloqueado de la base de datos, y puede causar otros problemas a menos que obtenga la
grant
declaración correcta, es más fácil simplemente actualizar la raíz que ya tiene.En mi experiencia, el problema solo ocurre con el usuario root, ya que otros usuarios se agregarán manualmente y no formarán parte de una instalación / actualización inicial.
fuente
mysql_secure_installation
no tuvo el mismo efecto. ¿Dónde almacena la nueva contraseña?UPDATE
s los que se aplican a MariaDB <10.2 yALTER
a otras versiones? ¿Y el segundo esUPDATE
una alternativa al primero, o necesitamos escribir ambos? Finalmente, ¿es 'mysql_native_password' algo para escribir textualmente, o deberíamos reemplazarlo con nuestra contraseña de root para MySQL?mysql_native_password
es esa opción.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 a sudo )
Inicie sesión en el shell raíz de MySQL:
Ejecute las consultas a continuación:
Abra un nuevo shell, luego:
Fuente
fuente
mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
Intenta crear una nueva cuenta mysql, para mí ha funcionado (mysql 5.7.12):
Inicie sesión como sudo:
Cree un nuevo usuario y otórguele privilegios (sin contraseña):
Inicie sesión como nuevo usuario:
fuente
Tuve que hacer dos cosas (gracias a @Todor y @Loremhipsum):
y entonces:
No recomendaría dejar caer al usuario
root
.fuente
Prueba este código primero,
y entonces,
luego presione
Ctrl+Z
y escriba:bg
para ejecutar el proceso desde el primer plano hasta el fondo, luego verifique su acceso:fuente
Si solo ejecuta el comando mysql bajo el usuario root, se le otorgará acceso sin la contraseña solicitada, porque la autenticación de socket está habilitada para root @ localhost. .
La única forma de establecer una contraseña es cambiar a autenticación nativa como:
fuente
He estado adaptando algunos scripts de aprovisionamiento que he creado para usar MariaDB y me encontré con este problema exacto. Juntando mucha información aquí, la respuesta de un Gazzer realmente se centra en el tema; todo se reduce a la configuración
auth_socket
/unix_socket
.Entonces, al usar MariaDB 5.5 (bajo Ubuntu 14.04) y MariaDB 10 bajo (Ubuntu 16.04), iniciar sesión en MySQL y ejecutar este comando despejó las cosas de inmediato:
Las otras respuestas, incluida la respuesta más votada a partir de esta publicación de Loremhipsum, realmente fomentan las malas prácticas al recomendar dejar caer a un usuario y luego recrearlas . Para mí, esa es una solución bastante radical. La mejor / más simple solución es anular el
plugin
valor, eliminar los privilegios y seguir con la vida.fuente
Tuve el mismo problema y corrí lo siguiente:
fuente
root
está configurado conplugin
los ajustes que no son estándar. El único caso extremo en el que una actualización de la base de datos podría ayudar en un caso como este es si elmysql_upgrade
proceso en sí representa laplugin
configuración que dudo.