password - mysql error 1045 access denied for user root
ERROR 1698(28000): acceso denegado para el usuario ''root'' @ ''localhost'' (11)
Algunos sistemas como Ubuntu, mysql está usando por defecto el complemento UNIX auth_socket .
Básicamente significa que:
db_users usándolo, será "auth" por
las credenciales de usuario del sistema.
Puede ver si su usuario
root
está configurado de esta manera haciendo lo siguiente:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
Como puede ver en la consulta, el usuario
root
está utilizando el complemento
auth_socket
Hay 2 formas de resolver esto:
-
Puede configurar el usuario root para que use el complemento
mysql_native_password
-
Puede crear un nuevo
db_user
con susystem_user
(recomendado)
Opción 1:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin=''mysql_native_password'' WHERE User=''root'';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
Opción 2: (reemplace YOUR_SYSTEM_USER con el nombre de usuario que tiene)
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> CREATE USER ''YOUR_SYSTEM_USER''@''localhost'' IDENTIFIED BY '''';
mysql> GRANT ALL PRIVILEGES ON *.* TO ''YOUR_SYSTEM_USER''@''localhost'';
mysql> UPDATE user SET plugin=''auth_socket'' WHERE User=''YOUR_SYSTEM_USER'';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
Recuerde que si usa la opción # 2, deberá conectarse a mysql como su nombre de usuario del sistema (
mysql -u YOUR_SYSTEM_USER
)
Nota:
En algunos sistemas (por ejemplo, Debian stretch), el complemento ''auth_socket'' se llama
''unix_socket''
, por lo que el comando SQL correspondiente debería ser:
UPDATE user SET plugin=''unix_socket'' WHERE User=''YOUR_SYSTEM_USER'';
Actualización:
según el comentario de @ andy parece que mysql 8.xx actualizó / reemplazó el
auth_socket
para
caching_sha2_password
No tengo una configuración del sistema con mysql 8.xx para probar esto, sin embargo, los pasos anteriores deberían ayudarlo a comprender el problema.
Aquí está la respuesta:
Un cambio a partir de MySQL 8.0.4 es que el nuevo complemento de autenticación predeterminado es ''caching_sha2_password''. El nuevo ''YOUR_SYSTEM_USER'' tendrá este complemento de autenticación y ahora puede iniciar sesión desde el shell bash con "mysql -u YOUR_SYSTEM_USER -p" y proporcionar la contraseña para este usuario en el mensaje. No es necesario el paso "UPDATE user SET plugin". Para ver la actualización predeterminada del complemento de autenticación 8.0.4, consulte https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/
Entonces ... estoy configurando un nuevo servidor y sigo teniendo este problema.
Cuando intento iniciar sesión en la base de datos MySQL con el usuario root, aparece el error "ERROR 1698 (28000): acceso denegado para el usuario ''root'' @ ''localhost''".
No importa si me conecto a través del terminal (SSH), a través de PHPMyAdmin o un cliente MySQL, por ejemplo, Navicat. Todos fallan.
Miré en la tabla mysql.user y obtuve lo siguiente:
+------------------+-------------------+
| user | host |
+------------------+-------------------+
| root | % |
| root | 127.0.0.1 |
| amavisd | localhost |
| debian-sys-maint | localhost |
| iredadmin | localhost |
| iredapd | localhost |
| mysql.sys | localhost |
| phpmyadmin | localhost |
| root | localhost |
| roundcube | localhost |
| vmail | localhost |
| vmailadmin | localhost |
| amavisd | test4.folkmann.it |
| iredadmin | test4.folkmann.it |
| iredapd | test4.folkmann.it |
| roundcube | test4.folkmann.it |
| vmail | test4.folkmann.it |
| vmailadmin | test4.folkmann.it |
+------------------+-------------------+
Como puede ver, la raíz debe tener acceso.
El servidor es bastante simple, ya que he tratado de solucionar esto por un tiempo ...
Está ejecutando Ubuntu 16.04.1 LTS con Apache, MySQL y PHP, para que pueda alojar sitios web, e iRedMail 0.9.5-1, para que pueda alojar correo.
Iniciar sesión en la base de datos MySQL funciona bien antes de instalar iRedMail. También intenté, simplemente instalando iRedMail, pero luego root, tampoco funciona ...
Si alguien pudiera decirme cómo soluciono mi problema de inicio de sesión de MySQL o cómo instalo iRedMail, además de una instalación de MySQL existente. Y sí, probé los Consejos de instalación y no puedo encontrar esas variables en los archivos de configuración.
Cualquier ayuda es muy apreciada :)
Desea acceder a MySQL con el usuario root, pero no proporciona la contraseña correcta de root.
Si necesita establecer una nueva contraseña para root , el sitio de MySQL tiene una excelente documentación sobre cómo hacerlo: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
No mostraré el proceso aquí porque la documentación de MySql en el enlace anterior es clara y concisa .
Estaba teniendo este problema en una máquina virtual Debian 8 con la que estaba interactuando a través de Putty en mi escritorio de Windows 10.
Intenté varias sugerencias aquí, pero nada funcionó y estoy ejecutando MariaDB en el host de Debian. Al final descubrí que no podía iniciar el servidor db en modo seguro, pero no era necesario y los siguientes comandos realmente funcionaron para mí, es decir, permitir que un usuario de MySql recién creado inicie sesión en el servidor MySql / MariaDB:
sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='''' where user=''your_user_name'';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service
Si lo anterior no funciona para usted, siga los pasos descritos en la publicación anterior de zetacu ( zetacu ) y luego siga mis pasos.
Ahora debería poder usar un cliente de terminal remoto e iniciar sesión de forma segura en mysql con el comando:
mysql -u your_user_name -p
* escriba la contraseña cuando se le solicite
Esto ha sucedido a mí también.
El problema es con el repositorio mysql que ya viene con la distribución de Linux.
Entonces, cuando simplemente hace:
$ sudo apt install mysql-server
, instala mysql desde su repositorio predeterminado, lo que da este problema.
Entonces, para superar eso, debe desinstalar el mysql
$ sudo apt remove mysql* --purge --auto-remove
Luego descargue mysql repo desde el sitio web oficial de mysql MySQL APT Repo Siga su documentación sobre cómo agregar repo e instalarlo. Esto no da problema. Además, como respondió @zetacu, puede verificar que la raíz de mysql ahora realmente use el complemento mysql_native_password
Primer paso: vaya a /etc/phpmyadmin/config.inc.php luego descomente las líneas donde encuentre AllowNoPassword. Segundo paso: inicie sesión en su cuenta predeterminada de MySQL
mysql -u root -p
use mysql;
update user set plugin="" where user=''root'';
flush privilege;
¡y eso es todo!
Sugeriría eliminar la conexión Mysql -
ACTUALIZACIÓN: esto es para Mysql versión 5.5, si su versión es diferente, cambie la primera línea en consecuencia
sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean
E instalar de nuevo, pero esta vez establezca una contraseña de root usted mismo. Esto ahorrará mucho esfuerzo.
sudo apt-get update
sudo apt-get install mysql-server
También enfrenté el mismo problema la primera vez.
Ahora está arreglado:
Primero, copie el archivo
/etc/mysql/mysql.conf.d/mysqld.cnf
y
/etc/mysql/my.cnf
en
/etc/mysql/my.cnf
.
Puedes hacerlo por comando:
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
Ahora vamos a descansar la contraseña:
Use los siguientes comandos en su terminal:
sudo service mysql stop
sudo service mysql start
sudo mysql -u root
Ahora estás dentro de la consola mysql.
Luego, escriba algunas consultas para restablecer nuestra contraseña de root
USE mysql
update mysql.user set authentication_string=password(''newpass'') where user=''root'' and Host =''localhost'';
update user set plugin="mysql_native_password";
flush privileges;
quit
Ahora podemos limpiar
/etc/mysql/my.cng
Abra el archivo anterior en su editor y elimine todas las líneas dentro del archivo.
Después de eso, reiniciemos mysql:
sudo mysql service restart
Ahora usemos mysql con la contraseña recién creada:
sudo mysql -u root -p
Finalmente ingrese su contraseña recién creada.
os: Ubuntu18.04
mysql: 5.7
-
agregue las
skip-grant-tables
al final del archivo de mysqld.cnf -
cp el my.cnf
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
- restablecer la contraseña
(base) ➜ ~ sudo service mysql stop
(base) ➜ ~ sudo service mysql start
(base) ➜ ~ mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)
Copyright (c) 2000, 2019, 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> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password(''newpass'') where user=''root'' and Host =''localhost'';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> update user set plugin="mysql_native_password";
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
-
eliminar las
skip-grant-tables
de omisión de concesión de my.cnf
(base) ➜ ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf
(base) ➜ ~ sudo emacs /etc/mysql/my.cnf
(base) ➜ ~ sudo service mysql restart
- abre el mysql
(base) ➜ ~ mysql -uroot -ppassword
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)
Copyright (c) 2000, 2019, 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>
- verifique la política de contraseña
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM |
+----------------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE ''validate_password%'';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
-
cambiar la configuración de
validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)
mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE ''validate_password%'';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file | |
| validate_password_length | 3 |
| validate_password_mixed_case_count | 0 |
| validate_password_number_count | 3 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 0 |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
Tenga en cuenta que debe saber que error causado por qué? validate_password_policy?
debe decidir restablecer su contraseña para completar la política o cambiarla.
paso 1.
sudo mysql -u root -p
paso 2.
USE mysql;
paso 3.
ALTER USER ''root''@''localhost'' IDENTIFIED WITH mysql_native_password BY ''admin'';
Aquí ''admin'' es su nueva contraseña, puede cambiarla.
paso 4.
exit
Gracias. Estás listo.
That funcionó para mí:
mysql --user=root mysql
CREATE USER ''some_user''@''%'' IDENTIFIED BY ''some_pass'';
GRANT ALL PRIVILEGES ON *.* TO ''some_user''@''%'' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Chequea aquí:
La NUEVA versión de MYSQL lo hace de esta manera.
En el nuevo
my-sql,
si la contraseña se deja vacía durante la instalación, se basa en el complemento
auth_socket
.
La forma correcta es iniciar sesión en my-sql con el privilegio
sudo
.
$ sudo mysql -u root -p
Y luego actualizando la contraseña usando:
$ ALTER USER ''root''@''localhost'' IDENTIFIED WITH mysql_native_password BY ''new-password'';
Una vez hecho esto,
stop and start
el servidor mysql.
$ sudo service mysql stop
$ sudo service mysql start
Para obtener detalles completos, puede consultar percona.com/blog/2016/03/16/… .
Comenta para cualquier duda.