服务器搭建网站视频教程,重庆电力建设设计公司网站,湖南网站排名,wordpress爆破密码字典一、背景
某次某平台进行安全性符合型评估时#xff0c;列出了数据库相关安全选项#xff0c;本文特对此记录#xff0c;以供备忘参考。
二、安全配置
2.1、数据库系统登录时的用户进行身份标识和鉴别#xff1b;
1#xff09;对登录Mysql系统用户的密码复杂度是否有要…一、背景
某次某平台进行安全性符合型评估时列出了数据库相关安全选项本文特对此记录以供备忘参考。
二、安全配置
2.1、数据库系统登录时的用户进行身份标识和鉴别
1对登录Mysql系统用户的密码复杂度是否有要求
即需要满足密码复杂度要求至少8位长度大小写各1个数字2个特殊字符至少1个密码有效期3个月。现场版本5.7.34Mysql 5.6后自带validate_password.so插件windows为validate_password.dll
//检查是否启用命令,如果啥也没返回就是没启用
mysql SHOW VARIABLES LIKE validate_password%;
mysql SELECT * from mysql.plugin ;
mysql show plugins;#安装插件
mysql INSTALL PLUGIN validate_password SONAME validate_password.so; #Linux
mysql INSTALL PLUGIN validate_password SONAME validate_password.dll; #windows#验证
mysql SELECT * from mysql.plugin ;#创建一个名为password_policy的新表用于存储密码策略的相关信息
CREATE TABLE password_policy (id INT PRIMARY KEY AUTO_INCREMENT,uppercase_required BOOLEAN NOT NULL, #至少一个大写字母lowercase_required BOOLEAN NOT NULL, #至少一个小写字母number_required BOOLEAN NOT NULL, #至少一个数字special_character_required BOOLEAN NOT NULL, #至少一个特殊字符min_length INT NOT NULL #密码的最小长度
); 完成后修改配置文件写入
plugin-load-addvalidate_password.so
validate-passwordON
validate_password_policy 1 ##0(LOW), 1 (MEDIUM), 2 (STRONG)
validate_password_length 8
validate_password_mixed_case_count 1 #大小写字符长度,至少1个
validate_password_number_count 2
validate_password_special_char_count 1 #特殊字符至少1个
default_password_lifetime180
password_history6 #能选择最近使用过的6个密码
password_reuse_interval365 #设置不能选择最近一年内的密码#验证测试密码符合度
SELECT VALIDATE_PASSWORD_STRENGTH(Ad32weak$_123);规则说明详情参看官网说明
策略检查规则0 or LOWLength满足长度要求1 or MEDIUMLength; numeric, lowercase/uppercase, and special characters2 or STRONGLength; numeric, lowercase/uppercase, and special characters; dictionary file
创建触发器每次插入或更新用户密码时检查密码复杂度
CREATE TRIGGER check_password_complexity
BEFORE INSERT ON users
FOR EACH ROW
BEGINDECLARE password_complexity_error VARCHAR(255) DEFAULT NULL;IF NEW.password REGEXP ^(?.*[a-z])(?.*[A-Z])(?.*[0-9])(?.*[!#$%^*]).{8,}$ 0THENSET password_complexity_error Password must contain at least one uppercase letter, one lowercase letter, one number, one special character, and have a minimum length of 8 characters.;END IF;IF password_complexity_error IS NOT NULL THENSIGNAL SQLSTATE 45000 SET MESSAGE_TEXT password_complexity_error;END IF;
END;说明上述触发器使用正则表达式regular expression检查被插入的新密码NEW.password是否满足复杂度要求。正则表达式^(?.[a-z])(?.[A-Z])(?.[0-9])(?.[!# %^*]).{8,} 要求密码至少包含一个小写字母、一个大写字母、一个数字、一个特殊字符!#$%^*并且密码长度至少为8个字符。另mysql 5.7 及之后版本的密码保存到 authentication_string 字段中不再使用password 字段。MySQL 8.0 在用户管理方面还增加了角色管理默认的密码加密方式也做了调整由之前的 SHA1 改为了 SHA2 不可逆 同时加上 MySQL 5.7 的禁用用户和用户过期的功能。
2.2 、是否启用ssl
show variables like %ssl%;
2.3、最小化权限配置
主要分为用户管理权限、对象管理权限和SQL执行权限。最小化权限原则是指只授权用户所必需的权限并且要尽可能地限制其权限范围。
#创建只读用户
mysql GRANT SELECT ON database_name.* TO OR_userlocalhost IDENTIFIED BY password;#去除删除权限须用户重新登录后才能生效
mysql REVOKE DROP ON database_name.* FROM dbadminlocalhost;
mysql REVOKE SELECT,INSERT,UPDATE,DELETE ON mysql.* FROM dbadminlocalhost;#限制用户操作的表和字段
mysql GRANT SELECT (name, age) ON rsms.user TO testlocalhost IDENTIFIED BY password;#创建一个名为“user_acl”的视图只能查询名为“user”的表中“name”和“age”字段可以使用以下命令mysql CREATE VIEW user_acl AS SELECT name,age FROM user;#验证
mysql SHOW GRANTS FOR CURRENT_USER();
mysql SHOW GRANTS FOR user主机地址 ;
mysql SELECT host,user,authentication_string,select_priv,insert_priv,drop_priv
FROM mysql.user;2.4、权限分级配置
权限分级原则是指根据用户角色或职责的不同对其进行权限分级管理避免数据被未经授权的用户访问和操作。
#8.0中创建角色
mysql CREATE ROLE role_name[host_name] [,role_name[host_name]]……
mysql GRANT role [,role2,...] TO user [,user2,...];
mysql REVOKE role FROM user; #撤销用户的角色
#验证
mysql SELECT CURRENT_ROLE();#激活角色激活4个
mysql SET DEFAULT ROLE ALL TO
adminlocalhost,
read_user1localhost,
read_user2localhost,
rw_user1localhost;#临时配置角色
mysql SET PERSIST mandatory_roles role1,role2localhost,rw_user1%; #系统重启后仍然有效
mysql SET GLOBAL mandatory_roles role1,role2localhost,rw_user1%; #系统重启后失效
#写到配置文件里固定
[mysqld]
mandatory_rolesrole1,role2localhost,rw_user1%#验证
mysql show variables like activate_all_roles_on_login; #对所有角色永久激活
mysql SET GLOBAL activate_all_roles_on_loginON;