Mysql8root修改密码root无需密码或任何密码都可登录原因及解决

一:默认root登录

Ubuntu在Mysql 8.0在线安装成功后(sudo apt install),默认的root用户密码为空,默认监听本机,只能在本机登录,直接命令`mysql`即可登录 。

ubuntu@server:~$ sudo mysqlWelcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 17Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.mysql>

Centos安装完成后,可能需要密码,密码位置在

grep "password" /var/log/mysqld.log#然后登录mysqlmysql -u root -p

如果没有密码,或者忘记密码请在配置文件加入skip-grant-tables,ubuntu配置文件在 /etc/mysql/ 路径下。

vim /etc/my.cnf#修改或添加skip-grant-tables跳过密码skip-grant-tables

注: 跳过密码后,登录进入后必须先 flush privileges 才能修改密码。

二:更改root密码方式

1:第一种方式

直接在用Linux命令 mysqladmin 修改。

mysqladmin -u root password "123456"ubuntu@server:~$ sudo mysqladmin -u root password "123456"mysqladmin: [Warning] Using a password on the command line interface can be insecure.Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.#提示警告密码简单不安全之类的信息,因为密码设置过于简单。

2:第二种方式

登录mysql 更改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '654321';#将密码改为654321

显示ok成功。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '654321';Query OK, 0 rows affected (0.00 sec)mysql>

注:由于我这里没有默认安装validate_password插件,所以直接修改成功,有些默认安装的是修改不成功的,因为太简单的密码,不符合密码规则,会报错如下:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

3:关于validate_password插件

validate_password是一款密码规则插件,查看密码规则命令:

#没有安装会提示Empty setSHOW VARIABLES LIKE 'validate_password%';#没有的话,可自行安装validate_passwordINSTALL COMPONENT 'file://component_validate_password';

安装完成后,查看显示如下:

mysql> SHOW VARIABLES LIKE 'validate_password%';Empty set (0.01 sec)mysql> INSTALL COMPONENT 'file://component_validate_password';Query OK, 0 rows affected (0.00 sec)mysql> SHOW VARIABLES LIKE 'validate_password%'; -------------------------------------- -------- | Variable_name | Value | -------------------------------------- -------- | validate_password.check_user_name | ON || 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 | -------------------------------------- -------- 7 rows in set (0.00 sec)mysql>

参数说明:

validate_password.check_user_name:默认值为ON ,设置为ON的时候表示能将密码设置成当前用户名,密码用户名同名。validate_password.dictionary_file : 用于检查密码的字典文件的路径名,默认为空validate_password.length:密码的最小长度,也就是说密码长度必须大于或等于8validate_password.mixed_case_count :默认值为1 ,至少有大小写字母n对,即2*n个,默认值1(及至少包含1个大写字母和1个小写字母),密码策略是中等或更强的适用validate_password.number_count:默认值为1,密码必须包含的数字个数validate_password.policy:默认值为MEDIUM , 密码强度检验等级,可以使用数值0、1、2或相应的符号值LOW、MEDIUM、STRONG来指定.。0/LOW:只检查长度。1/MEDIUM:检查长度、数字、大小写、特殊字符。2/STRONG:检查长度、数字、大小写、特殊字符、字典文件validate_password.special_char_count:默认值为1 ,密码必须包含的特殊字符个数

当指定密码规则后,如果嫌麻烦,直接更改密码规则即可,如偏要设置123456简单密码。

#密码强度改为LOWset global validate_password.policy=0;#密码长度改为至少4set global validate_password.length=4;三:root无需密码,或任何密码都可以登录原因及解决方法

虽然改了密码,但是发现root登录仍无需登录密码,或者加参数-p输入密码时,任何密码都可以进入。

原因:查看用户插件信息

select user,host,plugin from mysql.user;

显示root插件为auth_socket,这种插件无需密码,所以设置任何密码都无效。

mysql> select user,host,plugin from mysql.user; ------------------ ----------- ----------------------- | user | host | plugin | ------------------ ----------- ----------------------- | debian-sys-maint | localhost | caching_sha2_password || mysql.infoschema | localhost | caching_sha2_password || mysql.session | localhost | caching_sha2_password || mysql.sys | localhost | caching_sha2_password || root | localhost | auth_socket | ------------------ ----------- ----------------------- 5 rows in set (0.00 sec)

更改插件为 mysql_native_password 或者 caching_sha2_password

use mysql;UPDATE user SET plugin='caching_sha2_password' WHERE User='root';FLUSH PRIVILEGES;

更改完成后,需重新设置root密码生效,修改方法同上。修改后,登录需要输入正确密码

注:为了提供更安全的密码加密,MySQL8.0的首选默认密码认证插件是caching_sha2_password,而不是mysql_native_password,根据自己需求选择插件

关于auth_socket插件

这种插件验证方式有以下特点:

首先,这种验证方式不要求输入密码,即使输入了密码也不验证。这个特点让很多人觉得很不安全,实际仔细研究一下这种方式,发现还是相当安全的,因为它有另外两个限制; 只能用 UNIX 的 socket 方式登陆,这就保证了只能本地登陆,用户在使用这种登陆方式时已经通过了操作系统的安全验证; 操作系统的用户和 MySQL 数据库的用户名必须一致,例如你要登陆 MySQL 的 root 用户,必须用操作系统的 root 用户登陆。

auth_socket 这个插件因为有这些特点,它很适合我们在系统投产前进行安装调试的时候使用,而且也有相当的安全性,因为系统投产前通常经常同时使用操作系统的 root 用户和 MySQL 的 root 用户。当我们在系统投产后,操作系统的 root 用户和 MySQL 的 root 用户就不能随便使用了,这时可以换成其它的验证方式,可以使用下面的命令进行切换:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Mysql8root修改密码root无需密码或任何密码都可登录原因及解决

Mysql 8 root修改密码,root无需密码或任何密码都可登录原因及解决

Ubuntu在Mysql 8.0在线安装成功后(sudo apt install),默认的root用户密码为空,默认监听本机,只能在本机登录,直接命令`mysql`即可登录 。

Centos安装完成后,可能需要密码,密码位置在

如果没有密码,或者忘记密码请在配置文件加入 skip-grant-tables ,ubuntu配置文件在 /etc/mysql/ 路径下。


注: 跳过密码后,登录进入后必须先 flush privileges 才能修改密码。


1:第一种方式

直接在用Linux命令 mysqladmin 修改。



2:第敬运拿二种方式

登录mysql 更改密码

显示ok成功。

注:由于我这里没有默认安装validate_password插件,所以直接修改成功,有些默认安装的是修改不成功的,因为太简单的密码,不符合密码规则,会报错如下: ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

3:关于validate_password插件

validate_password是一款密码规则插件,查看密码规则命令:

安装完成后,查看显示如下:

参数说明:

当指定密码规则后,如果嫌麻烦,直接更改密码规则即可,如偏要设置123456简单密码。


虽然改了密码,但是发现root登录仍无需登录密码,或者加参数-p输入密码时,任何密码都可以进入。

原因:查看亮搭用户插件信息

显示root插件为auth_socket,这种插件无需密码,所以设置任何密码都无效。

更改插件为 mysql_native_password 或者 caching_sha2_password

更改完成后,需重新设置root密码生效,修改方法同上。修改后,登录需要输入正确密码

注:为了提供更安全的密码加密,MySQL8.0的首选默认密码认证插件是caching_sha2_password,而不是mysql_native_password,根据自己需求选择插件

关于auth_socket插件

这种插件验证方式有以下特点:

auth_socket 这个插件因为有这些特点,它很适合我们在系统投产前进行安装调试的时候使用,而且也有相当的安全性,因为系统投产前通常经常同时使用操作系统的 root 用户和 MySQL 的 root 用户。当我们悄兆在系统投产后,操作系统的 root 用户和 MySQL 的 root 用户就不能随便使用了,这时可以换成其它的验证方式,可以使用下面的命令进行切换:

Mysql8root修改密码root无需密码或任何密码都可登录原因及解决

mysql root用户设密码后不用密码还能登陆 用密码会报错:1045-Access denied for user 'root'@'localhost'

这个是密码错误提示。可以试试
1.用系统管理员登陆系统。
2.停止MySQL的服务。
3.进入命令窗口,然后配姿进入MySQL的安装目录,比如我的安装目录是c:mysql,进入C:mysqlbin
4.跳过权限检查启动MySQL,
c:mysqlbin>mysqld-nt --skip-grant-tables
5.重新打开一个窗口,进入c:mysqlbin目录,设置root的新密码
c:mysqlbin>mysqladmin -u root flush-privileges password "newpassword"
c:mysqlbin>mysqladmin -u root -p shutdown
将newpassword替换为你要用的root的密码,第培肢绝二个命令会提示你输入新密码,重复第一个命令输入的密码。
6.停止MySQL Server,用正常模式启动Mysql
7.你可以饥缺用新的密码链接到Mysql了。

上一篇: 女销售原来靠这样卖房(楼盘置业顾问提成大概多少)
下一篇: 出去旅游住青年旅舍怎么样「旅行十年第一次入住青旅每晚只需要25元的青年旅舍是怎样的体验」