网站建设捌金手指花总十三,网络运营者义务,北京网站建设小公司有哪些,大众点评怎么做团购网站MySQL密码复杂度策略设置
MySQL 系统自带有 validate_password 插件#xff0c;此插件可以验证密码强度#xff0c;未达到规定强度的密码则不允许被设置。MySQL 5.7 及 8.0 版本默认情况下貌似都不启用该插件#xff0c;这也使得我们可以随意设置密码#xff0c;比如设置为…MySQL密码复杂度策略设置
MySQL 系统自带有 validate_password 插件此插件可以验证密码强度未达到规定强度的密码则不允许被设置。MySQL 5.7 及 8.0 版本默认情况下貌似都不启用该插件这也使得我们可以随意设置密码比如设置为 123、123456等。如果我们想从根源上规范密码强度可以启用该插件下面一起来看下如何通过此插件来设置密码复杂度策略。
查看是否已安装此插件
进入 MySQL 命令行通过 show plugins;或者show variables like ‘validate%’; 相关参数可以判断是否已安装此插件。若没有相关参数则代表未安装此插件 安装前检查 为空则说明未安装此插件
mysql show variables like validate%;
Empty set (0.42 sec)安装 validate_password 插件通过 INSTALL PLUGIN 命令可安装此插件每个平台的文件名后缀都不同 对于 Unix 和类 Unix 系统为.so对于 Windows 为.dll
mysql INSTALL PLUGIN validate_password SONAME validate_password.so;
Query OK, 0 rows affected, 1 warning (0.80 sec)查看 validate_password 相关参数
mysql show variables like validate%;
----------------------------------------------
| 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.01 sec)密码复杂度策略具体设置
例:密码至少 10 位且包含大小写字母、数字、特殊字符
mysql set global validate_password_length 10;
Query OK, 0 rows affected (0.00 sec)mysql show variables like validate%;
----------------------------------------------
| Variable_name | Value |
----------------------------------------------
| validate_password_check_user_name | ON |
| validate_password_dictionary_file | |
| validate_password_length | 10 |
| 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.01 sec)#若想永久生效建议将以下参数写入配置文件my.cnf
vim /etc/my.cnf[mysqld]
plugin-load validate_password.so
validate_password_length 10
validate_password_policy 1
validate-password FORCE_PLUS_PERMANENT密码强度相关参数解释
1、validate_password_policy:
代表的密码策略默认是MEDIUM 可配置的值有以下
0 or LOW 仅需需符合密码长度由参数validate_password_length指定
1 or MEDIUM 满足LOW策略同时还需满足至少有1个数字小写字母大写字母和特殊字符
2 or STRONG 满足MEDIUM策略同时密码不能存在字典文件dictionary file中2、validate_password_dictionary_file:
用于配置密码的字典文件当validate_password_policy设置为STRONG时可以配置密码字典文件字典文件中存在的密码不得使用。3、validate_password_length:
用来设置密码的最小长度默认值是84、validate_password_mixed_case_count:
当validate_password_policy设置为MEDIUM或者STRONG时密码中至少同时拥有的小写和大写字母的数量默认是1最小是0默认是至少拥有一个小写和一个大写字母。5、validate_password_number_count:
当validate_password_policy设置为MEDIUM或者STRONG时密码中至少拥有的数字的个数默认1最小是06、validate_password_special_char_count:
当validate_password_policy设置为MEDIUM或者STRONG时密码中至少拥有的特殊字符的个数默认1最小是0MySQL密码策略和登录失败处理
查看是否已安装 connection_control% 插件为空则说明未安装此插件
mysql show variables like connection_control%;
Empty set (0.01 sec)安装插件windows中为 connection_control.dll liunx中为 connection_control.so
mysql INSTALL PLUGIN CONNECTION_CONTROL soname connection_control.so;
Query OK, 0 rows affected (0.25 sec)查看相关参数
mysql show variables like connection_control%;
-------------------------------------------------------------
| Variable_name | Value |
-------------------------------------------------------------
| connection_control_failed_connections_threshold | 3 |
| connection_control_max_connection_delay | 2147483647 |
| connection_control_min_connection_delay | 1000 |
-------------------------------------------------------------
3 rows in set (0.01 sec)参数解释
1、connection_control_failed_connections_threshold:
单个用户登录失败由于密码错误引起次数上限默认3次2、connection_control_max_connection_delay:
失败上限之后再次尝试登录前最大等待时间单位ms3、connection_control_min_connection_delay:
失败上限之后再次尝试登录前最小等待时间默认1秒1000ms设置单个用户密码登录失败上限次数和等待时间
# 单个用户密码登录失败的上限次数
set global connection_control_failed_connections_threshold5;
# 达到失败上限后等待30秒再次尝试登录
set global connection_control_min_connection_delay30000;卸载插件命令
mysql UNINSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
mysql UNINSTALL PLUGIN CONNECTION_CONTROL;MySQL开启SSL
检查 MySQL 是否已经开启了SSL
mysql show variables like %ssl%;
------------------------------------------------------
| Variable_name | Value |
------------------------------------------------------
| admin_ssl_ca | |
| admin_ssl_capath | |
| admin_ssl_cert | |
| admin_ssl_cipher | |
| admin_ssl_crl | |
| admin_ssl_crlpath | |
| admin_ssl_key | |
| have_openssl | YES |
| have_ssl | YES |
| mysqlx_ssl_ca | |
| mysqlx_ssl_capath | |
| mysqlx_ssl_cert | |
| mysqlx_ssl_cipher | |
| mysqlx_ssl_crl | |
| mysqlx_ssl_crlpath | |
| mysqlx_ssl_key | |
| performance_schema_show_processlist | OFF |
| ssl_ca | ca.pem |
| ssl_capath | |
| ssl_cert | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_fips_mode | OFF |
| ssl_key | server-key.pem |
| ssl_session_cache_mode | ON |
| ssl_session_cache_timeout | 300 |
------------------------------------------------------
27 rows in set (0.01 sec)# have_openssl、have_ssl 参数为YES 代表已经开启如果是DISABLE则表示没有。如果没有如上参数则需要停止 MySQL 进行安装
systemctl stop mysqld#在mysql bin目录下有一个mysql_ssl_rsa_setup文件执行它开始安装ssl
./mysql_ssl_rsa_setup#安装完成后会生成一些私钥公钥在mysql data目录下
[rootlocalhost]ll *.pem
-rw------- 1 mysql mysql 1675 Jun 12 17:22 ca-key.pem #CA私钥
-rw-r--r-- 1 mysql mysql 1074 Jun 12 17:22 ca.pem #自签的CA证书客户端连接也需要提供
-rw-r--r-- 1 mysql mysql 1078 Jun 12 17:22 client-cert.pem #客户端连接服务器端需要提供的证书文件
-rw------- 1 mysql mysql 1675 Jun 12 17:22 client-key.pem #客户端连接服务器端需要提供的私钥文件
-rw------- 1 mysql mysql 1675 Jun 12 17:22 private_key.pem #私钥/公钥对的私有成员
-rw-r--r-- 1 mysql mysql 451 Jun 12 17:22 public_key.pem #私钥/公钥对的共有成员
-rw-r--r-- 1 mysql mysql 1078 Jun 12 17:22 server-cert.pem #服务器端证书文件
-rw------- 1 mysql mysql 1675 Jun 12 17:22 server-key.pem #服务器端私钥文件
#注意这些密钥的权限问题如果需要则执行chown -R mysql.mysql *.pem添加ssl参数到my.cnf配置文件
[mysqld]
ssl-ca/usr/local/mysql/data/ca.pem
ssl-cert/usr/local/mysql/data/client-cert.pem
ssl-key/usr/local/mysql/data/client-key.pem[mysql]
ssl-ca/usr/local/mysql/data/ca.pem
ssl-cert/usr/local/mysql/data/client-cert.pem
ssl-key/usr/local/mysql/data/client-key.pem启动 MySQL 后登录查看 ssl 状态
systemctl start mysqldmysql show variables like %ssl%;使用 \s 或 status 命令查看当前 mysql 连接是否使用了ssl
mysql \s
--------------
mysql Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)Connection id: 17
Current database:
Current user: rootlocalhost
SSL: Not in use # 这里表示没有使用ssl
Current pager: stdout
Using outfile:
Using delimiter: ;
Server version: 8.0.32 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Binary data as: Hexadecimal
Uptime: 2 days 8 min 15 secThreads: 3 Questions: 45 Slow queries: 0 Opens: 152 Flush tables: 3 Open tables: 71 Queries per second avg: 0.000
--------------# 如果不想使用ssl则登录时添加如下参数:
mysql -uroot -proot --ssl0 或
mysql -uroot -proot --ssl-modeDISABLED如何设置某用户使用强制使用ssl
#新建用户
mysql grant select on *.* to dba% identified by xxx REQUIRE SSL;
#修改用户
mysql ALTER USER dba% REQUIRE SSL;
#刷新权限
flush privileges;