应急响应 | MySQL安全加固
本文介绍了MySQL安全加固实验的目的、知识点及步骤,包括密码策略插件、用户权限管理、访问控制、数据备份等内容。 2025-10-27 01:9:39 Author: www.freebuf.com(查看原文) 阅读量:6 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

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_nameOFF设置为ON的时候表示能将密码设置成当前用户名。
validate_password_dictionary_file
用于检查密码的字典文件的路径名,默认为空
validate_password_length8密码的最小长度,也就是说密码长度必须大于或等于8
validate_password_mixed_case_count1如果密码策略是中等或更强的,validate_password要求密码具有的小写和大写字符的最小数量。对于给定的这个值密码必须有那么多小写字符和那么多大写字符。
validate_password_number_count1密码必须包含的数字个数
validate_password_policyMEDIUMright-aligned 密码强度检验等级,可以使用数值0、1、2或相应的符号值LOW、MEDIUM、STRONG来指定。0/LOW:只检查长度。1/MEDIUM:检查长度、数字、大小写、特殊字符。2/STRONG:检查长度、数字、大小写、特殊字符、字典文件。
validate_password_special_char_count1密码必须包含的特殊字符个数
  • 密码强度等级

密码规则强度得分
Length < 40
Length ≥ 4 and < validate_password_length25
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-uMySQL用户名
--password-pMySQL密码
--databases
指定要备份的数据库
--all-databases
备份mysql服务器上的所有数据库

【实验原理】

分别从账号、口令安全、访问控制、安全审计、数据备份、补丁等角度对MySql数据库进行加固。

【软件工具】

  • 服务器:Windows server 2016一台;

  • 数据库:MySQL 5.7.34。

【实验目标】

  1. 通过命令查找匿名账户并删除。

  2. 通过密码插件,加固口令。

  3. 通过审计插件记录数据库操作。

【实验步骤】

1. 登录mysql服务。

(1)登录实验拓扑中的Window2016设备,登录用户名/密码为Administrator/com.1234。
(2)调用cmd,输入如下命令,回车键登录mysql,密码为123456。如图所示。

mysql -uroot -p

image-20240518183048282

2. 口令加固

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

show plugins;

image-20240518183849671

(3)执行如下命令,安装插件。如图所示。

install plugin validate_password soname 'validate_password.dll';

image-20240518184232011

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

SELECT @@validate_password_policy;

image-20240518184318346

(5)查看密码策略的具体信息。如图所示。

SHOW VARIABLES LIKE 'validate_password%';

image-20240518184448340

validate_password_number_count :密码中至少含有的数字个数,当密码策略是MEDIUM或以上时生效。
validate_password_special_char_count :密码中非英文数字等特殊字符的个数,当密码策略是MEDIUM或以上时生效。
validate_password_mixed_case_cou

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/es/454210.html
如有侵权请联系:admin#unsafe.sh