关于mysql初始化以及安全策略无法修改的问题
通过mysql官方的yum源来安装的mysql-community-server ,这里版本是MySQL 8.0。
wget
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
yum
install
mysql-community-server
service mysqld start
第一次启动后会有个初始化的过程,会产生root账户的随机密码。
为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error_log中,关于error_log的位置,如果安装的是RPM包,则默认是 /var/log/mysqld.log 。
可以通过 grep 'temporary password' /var/log/mysqld.log 查找密码:
登陆上过后,进行正常操作会受限,提示你必须修改密码后才能进行操作。
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
根据提示修改密码:
mysql> SET PASSWORD = PASSWORD(
'123456'
);
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> SET PASSWORD = PASSWORD(
"root"
);
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
但是提示根据当前密码策略,设置的密码不允许。
查阅官方文档后发现有以下三种密码策略:
Policy | Tests Performed |
0 or LOW |
Length |
1 or MEDIUM |
Length; numeric, lowercase/uppercase, and special characters |
2 or STRONG |
Length; numeric, lowercase/uppercase, and special characters; dictionary file |
当前密码策略默认为1 也就是 MEDIUM,但是当你使用:show VARIABLES like
"%password%"; 来查看当前策略时,发现还是会让你先修改密码(这个比较坑)
接下来修改安全策略(跟进实际环境需要,生产环境简单密码可能不安全):
set
global validate_password_policy = 0;
以上这条语句是所有人都这么用,好像没什么毛病,但是到我这儿就不好使啊/cry
比较郁闷
Google、百度了好久也没结果。咋整?
有了 , 管它呢,先改密码,设置一个包含大小写字母、数字和特殊符号的密码,OK,搞定,然后再来查看安全策略:
show VARIABLES like
"%password%";
妮玛,怎么下划线变成“.”了???
好吧现在可以根据需要修改安全策略了:
set global validate_password.policy = 0;
validate_password_number_count指定了密码中数据的长度,
validate_password_special_char_count指定了密码中特殊字符的长度,
validate_password_mixed_case_count指定了密码中大小字母的长度。
官方的一些说明:https://dev.mysql.com/doc/refman/8.0/en/validate-password.html
补充--->
关于各种MySQL GUI Client无法连接mysql server,且提示
“Authentication plugin 'caching_sha2_password' cannot be loaded”
这个问题是由于新版本mysql默认启用caching_sha2_password加密方式,而client无法支持,但是shell是可以连接的。
解决方法:
在/etc/my.cnf文件中添加一行代码,有可能这行代码是已存在,但是被注释掉了
[mysqld]
default_authentication_plugin=mysql_native_password
重启mysql server,再尝试连接,如果还是出现同样的问题,则需要删除用户重建,或者新建用户。