MySQL安全加固
【实验目的】
通过本实验掌握并实现MySQL基础加固。
【知识点】
1. validate_password插件
(1)validate_password插件是mysql5.6以后可以引入的一个新密码校验插件,可通过配置对用户密码长度、强度进行管理。validate_password文件名后缀根据平台的不同而不同(例如:.so对于Unix和类Unix系统,.dll对于Windows)。
密码策略可以通过以下命令查询(均可)。
SHOW VARIABLES LIKE 'validate_password%';
SELECT @@validate_password_policy;
(2)各字段描述参考下表属性信息与密码强度等级。
属性信息
| 属性 | 默认值 | 属性描述 |
|---|---|---|
| validate_password_check_user_name | OFF | 设置为ON的时候表示能将密码设置成当前用户名。 |
| validate_password_dictionary_file | 用于检查密码的字典文件的路径名,默认为空 | |
| validate_password_length | 8 | 密码的最小长度,也就是说密码长度必须大于或等于8 |
| validate_password_mixed_case_count | 1 | 如果密码策略是中等或更强的,validate_password要求密码具有的小写和大写字符的最小数量。对于给定的这个值密码必须有那么多小写字符和那么多大写字符。 |
| validate_password_number_count | 1 | 密码必须包含的数字个数 |
| validate_password_policy | MEDIUM | right-aligned 密码强度检验等级,可以使用数值0、1、2或相应的符号值LOW、MEDIUM、STRONG来指定。0/LOW:只检查长度。1/MEDIUM:检查长度、数字、大小写、特殊字符。2/STRONG:检查长度、数字、大小写、特殊字符、字典文件。 |
| validate_password_special_char_count | 1 | 密码必须包含的特殊字符个数 |
密码强度等级
| 密码规则 | 强度得分 |
|---|---|
| Length < 4 | 0 |
| Length ≥ 4 and < validate_password_length | 25 |
| Satisfies policy 1 (LOW:只验证长度) | 50 |
| Satisfies policy 2 (MEDIUM:验证长度、数字、大小写、特殊字符) | 75 |
| Satisfies policy 3 (STRONG:验证长度、数字、大小写、特殊字符、字典文件) | 100 |
若想要自定义设置密码策略,可以通过set global 字段名=自定义值设置validate_password_policy属性或其它属性来实现。
2. MySQL用户权限
数据库授权,一般用户权限有以下几种:
alter: 修改已存在的数据表(例如增加/删除列)和索引
create: 建立新的数据库或数据表
delete: 删除表的记录
drop: 删除数据表或数据库
index: 建立或删除索引
insert: 增加表的记录
select: 显示/搜索表的记录
update: 修改表中已存在的记录特别的权限
ALL: 允许做任何事(和root一样)
USAGE: 只允许登录–其它什么也不允许做
3. MySQL授权命令
(1)授权命令格式:
grant privileges ON database.table TO 'username'[@'host'] [with grant option]
privileges (权限列表),可以是 all ,表示所有权限,也可以是 select、update 等权限,多个权限之间用逗号分开。
ON 用来指定权限针对哪些库和表,格式为 数据库.表名 ,点号前面用来指定数据库名,点号后面用来指定表名, . 表示所有数据库所有表。
TO 表示将权限赋予某个用户, 格式为 username@host ,@前面为用户名,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。
(2)撤销用户权限:
revoke privileges ON database.table FORM '用户名'[@'主机'];
(3)授权原则说明:
只授予能满足需要的最小权限,比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
初始化数据库的时候删除没有密码的用户,安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
为每个用户设置满足密码复杂度的密码。
定期清理不需要的用户,回收权限或者删除用户。
4. Windows普通用户运行MySQL服务
在Windows系统中,若不进行特殊配置则服务默认以System最高权限运行,这在实际生产环境中是不允许的。需要创建普通用户,并通过服务修改运行用户,以普通用户进行运行。
5. 数据库备份
mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。
(1)命令格式为:
mysqldump [选项] 数据库名 [表名] > 脚本名
| --host | -h | 服务器IP地址 |
|---|---|---|
| --port | -P | 服务器端口号 |
| --user | -u | MySQL用户名 |
| --password | -p | MySQL密码 |
| --databases | 指定要备份的数据库 | |
| --all-databases | 备份mysql服务器上的所有数据库 |
【实验原理】
分别从账号、口令安全、访问控制、安全审计、数据备份、补丁等角度对MySql数据库进行加固。
【软件工具】
服务器:Windows server 2016一台;
数据库:MySQL 5.7.34。
【实验目标】
通过命令查找匿名账户并删除。
通过密码插件,加固口令。
通过审计插件记录数据库操作。
【实验步骤】
1. 登录mysql服务。
(1)登录实验拓扑中的Window2016设备,登录用户名/密码为Administrator/com.1234。
(2)调用cmd,输入如下命令,回车键登录mysql,密码为123456。如图所示。
mysql -uroot -p

2. 口令加固
(1)validate_password 是 mysql5.6以后可以引入的一个新密码校验插件, 管理用户密码长度、强度等。validate_password文件名后缀根据平台的不同而不同(例如,.so对于Unix和类Unix系统,.dll对于Windows)。
(2)安装插件:输入如下命令查看插件,通过查看当前插件信息,了解到当前环境并没有开启插件。如图所示。
show plugins;

(3)执行如下命令,安装插件。如图所示。
install plugin validate_password soname 'validate_password.dll';

(4)执行如下命令,查看当前密码规则强度。如图所示。
SELECT @@validate_password_policy;

(5)查看密码策略的具体信息。如图所示。
SHOW VARIABLES LIKE 'validate_password%';

validate_password_number_count :密码中至少含有的数字个数,当密码策略是MEDIUM或以上时生效。
validate_password_special_char_count :密码中非英文数字等特殊字符的个数,当密码策略是MEDIUM或以上时生效。
validate_password_mixed_case_cou
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



