Acceso denegado para el usuario 'root' @ 'localhost' (usando contraseña: SÍ) después de una nueva instalación en Ubuntu

124

Hoy hice un inicio de sesión como root en Ubuntu 14.04.1 LTS ll

y luego apt-get install mariadb-server(sin sudo pero como root).

Con mySQL -h localhost -u root --password=<PW>yo tengo

Acceso denegado para el usuario 'root' @ 'localhost' (usando contraseña: SÍ)

Con mySQL -u root -pinicié sesión en la base de datos e hice

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

Pero esto no ayudó. ¿Tiene usted alguna idea? No encontré la respuesta para preguntas similares.

SQL-Neuling
fuente
¿Ha intentado restablecer la contraseña de root?
Ozgur Bar

Respuestas:

277

TL; DR: para acceder a versiones más nuevas de mysql / mariadb después como usuario root, después de una nueva instalación, debe estar en un shell raíz (es decir sudo mysql -u root, o mysql -u rootdentro de un shell iniciado por su -o sudo -iprimero)


Habiendo hecho la misma actualización, en Ubuntu, tuve el mismo problema.

Lo extraño fue que

sudo /usr/bin/mysql_secure_installation

Aceptaría mi contraseña y me permitiría configurarla, pero no pude iniciar sesión como a roottravés del mysqlcliente

Tuve que empezar mariadb con

sudo mysqld_safe --skip-grant-tables

para obtener acceso como root, mientras que todos los demás usuarios aún podrían acceder bien.

Al mirar la mysql.usertabla, noté que la plugincolumna está configurada para la raíz, unix_socketmientras que todos los demás usuarios están configurados como 'mysql_native_password'. Un vistazo rápido a esta página: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ explica que Unix Socket permite iniciar sesión haciendo coincidir uidel proceso que ejecuta el cliente con el del usuario en el mysql.usermesa. En otras palabras, para acceder a mariadb, ya rootque debe iniciar sesión como root.

Efectivamente, reiniciando mi daemon mariadb con autenticación requerida, puedo iniciar sesión como root con

sudo mysql -u root -p

o

sudo su -
mysql -u root -p

Habiendo hecho esto, pensé en cómo acceder sin tener que hacer el sudo, que es solo una cuestión de ejecutar estas consultas de mysql

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(reemplazando <password>con su contraseña de root mysql deseada). Esto habilitó los inicios de sesión con contraseña para el usuario root.

Alternativamente, ejecutando la consulta mysql:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

Cambiará la cuenta de root para usar el inicio de sesión con contraseña sin cambiar la contraseña, pero esto puede dejarlo con una instalación de mysql / mariadb sin contraseña de root.

Después de cualquiera de estos, debe reiniciar mysql / mariadb:

sudo service mysql restart

Y listo, tuve acceso desde mi cuenta personal a través de mysql -u root -p

TENGA EN CUENTA QUE HACER ESTO REDUCE LA SEGURIDAD Presumiblemente, los desarrolladores de MariaDB han optado por que el acceso a la raíz funcione de esta manera por una buena razón.

Pensando en ello, estoy bastante feliz de tener que hacerlo, sudo mysql -u root -pasí que volveré a eso, pero pensé en publicar mi solución ya que no pude encontrar una en otro lugar.

DorianFM
fuente
7
"para acceder a mariadb como root tienes que iniciar sesión como root". - Esta oración debe estar al principio de la respuesta.
Philipp Ludwig
1
¿Por qué ejecuta el GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; comando dos veces antes de limpiar las privaciones?
Blairg23
4
Esto debería estar en algún lugar más visible, como grandes letras rojas durante la instalación o algo ... Solo desperdicié algunas horas de vida tratando de configurar el servidor que necesito lo antes posible ...
Gall Annonim
1
por cierto, si eres vago como yo, puedes ahorrar como dos segundos consudo service mysql restart
zeisi
1
Gracias por el consejo, genial para los desarrolladores, pero ¿cómo revertir esto a la original?
Sam
42

En Ubuntu 16.04 LTS limpio, el inicio de sesión de root de MariaDB para localhost cambió del estilo de contraseña al estilo de inicio de sesión sudo ...

entonces, solo hazlo

sudo mysql -u root

ya que queremos iniciar sesión con contraseña, creemos otro usuario 'usuario'

en la consola MariaDB ... (se obtiene en la consola MariaDB con 'sudo mysql -u root')

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

luego en el indicador de shell de bash,

mysql-workbench

y puede iniciar sesión con 'usuario' con 'su contraseña' en localhost

Curycu
fuente
12

Prueba el comando

sudo mysql_secure_installation

presione enter y asigne una nueva contraseña para root en mysql / mariadb .

Si recibe un error como

ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/var/run/mysqld/mysqld.sock'

habilitar el servicio con

service mysql start

ahora si vuelves a entrar con

mysql -u root -p

si sigue el problema, ingrese con sudo suy mysql -u root -pahora aplique permisos a root

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

esto solucionó mi problema en MariaDB .

Buena suerte

Israel M17
fuente
10

de la respuesta aceptada por el superusuario :

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
pez vela009
fuente
3

Tenía que iniciar sesión en Ubuntu como root para poder acceder a Mariadb como root. Puede tener algo que ver con ese "Harden ..." que le pide que haga cuando lo instala por primera vez. Entonces:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

y estás dentro.

Joe C
fuente
2

El nuevo comando para eliminar los privilegios es:

FLUSH PRIVILEGES

El antiguo comando FLUSH ALL PRIVILEGESya no funciona.

Obtendrá un error que se ve así:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

Espero que esto ayude :)

Sylvain
fuente
0

Un sistema como Ubuntu prefiere usar el complemento auth_socket . Intentará autenticarse comparando su nombre de usuario en la base de datos y el proceso que realiza la solicitud mysql; se describe aquí

El complemento de socket comprueba si el nombre de usuario del socket (el nombre de usuario del sistema operativo) coincide con el nombre de usuario de MySQL especificado por el programa cliente para el servidor, y permite la conexión solo si los nombres coinciden.

En su lugar, es posible que desee retroceder con mysql_native_password , que requerirá usuario / contraseña para autenticarse.

Sobre el método para lograrlo, recomiendo este .

nguyen
fuente