一:默认root登录
Ubuntu在Mysql 8.0在线安装成功后(sudo apt install),默认的root用户密码为空,默认监听本机,只能在本机登录,直接命令mysql即可登录 。
如果没有密码可以查看/etc/mysql/debian.cnf文件查看临时账号和密码,忘记密码请在配置文件加入skip-grant-tables,ubuntu配置文件在/etc/mysql/路径下
注: 跳过密码后,登录进入后必须先flush privileges才能修改密码。
二:更改root密码方式
登录mysql 更改密码
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘654321’;
注: 由于我这里没有默认安装validate_password插件,所以直接修改成功,有些默认安装的是修改不成功的,因为太简单的密码,不符合密码规则,会报错如下:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
三:root无需密码,或任何密码都可以登录原因及解决方法
虽然改了密码,但是发现root登录仍无需登录密码,或者加参数-p输入密码时,任何密码都可以进入。
原因:MySQL8.0默认使用auth_socket密码验证插件
select user,host,plugin from mysql.user;
显示root插件为auth_socket,这种插件无需密码,所以设置任何密码都无效。
更改插件为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,根据自己需求选择插件
关于validate_password插件
validate_password是一款密码规则插件,查看密码规则命令:
没有安装会提示Empty set
SHOW VARIABLES LIKE ‘validate_password%’;
没有的话,可自行安装validate_password
INSTALL COMPONENT ‘file://component_validate_password’;
| 描述 | 默认值 | 描述 | ||
| validate_password.check_user_name | ON | 设置为ON的时候表示能将密码设置成当前用户名,密码用户名同名。 | ||
| validate_password.dictionary_file | 用于检查密码的字典文件的路径名,默认为空 | |||
| validate_password.length | 密码的最小长度,也就是说密码长度必须大于或等于8 | |||
| validate_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简单密码。
密码强度改为LOW
set global validate_password.policy=0;
密码长度改为至少4
set global validate_password.length=4;
关于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’;
设置mysql用户并授予权限
use mysql;
1、查看当前的用户以及可访问的地址还有授权能力
select user,host,grant_priv from user;
2、如果root用户无授权能力(grant_priv = ‘N’),则可以开起来
update mysql.user set Grant_priv=’Y’ where user=’root’;
3、创建用户,最后的参数是密码
‘localhost’表示只能本机登录,也可以设置你期望的登录ip,不设置的话默认是‘%’,也就是都可以登录
create user ‘admin’@’localhost’ identified by ‘password‘;
4、创建数据库
create database wordpress;
5、给新用户授权,这里授予的权限是只能操作一个数据库
(数据库名为:wordpress,把数据库名变成 . 就是给所有数据库的权限)
(如果root用户只允许localhost登录,而这里授权的时候又给用户授予不管任何地址都可以登录的能力,则会报无权限的错。此时需要把root用户也改成‘%’的登录限制才行)
(也就是说,授权者的可登录源ip范围应该 ≥ 被授权者的可登录源ip范围)
grant all privileges on wordpress.* to ‘admin’@’localhost’;
5、刷新权限
flush privileges;
6、删除临时用户
drop user ’debian-sys-maint‘@’localhost‘;