MySQL-等保测评指导书

2024-02-25 02:20

本文主要是介绍MySQL-等保测评指导书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、身份鉴别
密码复杂度、账户唯一性
查看数据库所在安装目录下my.cnf/my.ini文件,其中是否不包含“skip-grant-tables”参数,不允许跳过数据库权限验证;(一般位于/etc/my.cnf,或通过mysql --help|grep 'my.cnf'查找)。

root用户下,切换到mysql用户:su - mysql;mysql -u root -p,查看是否需要密码登陆。

登录mysql,执行select user,host from mysql.user;
查看数据库所有用户,核查是否有用户名和host均相同的用户(注:host和username是联合主键,同一用户可能有多个host,不算为身份标识不唯一。)

执行select user,password from mysql.user;
查看是否存在空口令账户;(注:MySQL5.7以上版本password字段修改为authentication_string。)

Mysql5.6以下版本不能自定义密码复杂度和更换周期;

Mysql5.6.6以上版本,使用命令
#mysql> show variables like 'validate%';
核查数据库是否配置密码复杂度策略,如:
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
其中validate_password_policy不能配置为LOW,须为MEDIUM或STRONG。

Mysql5.7.4以上版本,登录数据库,使用命令
#mysql> show variables like 'default_password_lifetime';
或查看数据库所在安装目录下my.cnf/my.ini文件,其中是否设置全局变量default_password_lifetime来限制密码过期策略。


登陆失败处理和超时
Mysql数据库不能自定义登录失败处理策略,使用命令show plugins;或
select * from information_schema.plugins where plugin_name like '%connection%';

查看是否安装connect_control和connect_control_failed_login_attempts插件。如果已经安装相关插件,使用命令show variables like 'conn%control%',查看是否配置登录失败锁定策略。
注:
connection_control_failed_connections_threshold:登录失败次数阈值。connection_control_min_connection_delay:登录失败后最短锁定毫秒数。connection_control_max_connection_delay:登录失败后最长锁定毫秒数。


#mysql> show variables like '%timeout%';
查看interactive_timeout(针对交互式连接)的值是否合理;

测试长时间不操作,数据库是否能自动断开连接。


远程管理
Mysql数据库为安全考虑应禁用远程管理功能,以保证管理数据库的用户首先需要登录操作系统。使用命令
select user, host from mysql.user where host!=’localhost’
查看user表中是否不存在可远程管理的账户。核查操作系统配置的安全策略能否满足要求;
如果使用了远程管理功能,则使用数据库管理客户端连接数据库时,口令默认使用哈希算法加密传输。使用抓包工具测试是否能获取数据库明文口令信息。
注:MySQL数据库默认符合。

2、访问控制
权限分配
select * from mysql.user;和select * from mysql.db;
查看数据库中用户的权限策略,是否存在不必要的权限设置;

登录mysql,执行show database like 'test';
核查是否已删除测试数据库;

select user, host from mysql.user where host!=’localhost’
查看是否限制数据库管理员的远程登录权限。

重命名默认账户
登入mysql,执行select user from mysql.user
查看是否存在未更名的默认账户,如root用户;注:修改root账户名可能导致应用程序错误,故不强制要求重命名。

Mysql5.7以上版本,使用命令select user,host,account_locked from mysql.user;
核查mysql.session和mysql.sys默认账户是否已锁定(默认锁定);

在数据库服务器使用命令grep "temporary password" /var/log/mysqld.log
查看数据库安装时的随机密码,并使用该密码尝试登录数据库,核查是否成功。

删除过期账户
进入mysql,执行select user from mysql.user
查看数据库所有用户,并访谈管理员说明每个用户的功能,核查是否存在多余或过期账户;

进入mysql,执行select user from mysql.user
查看数据库所有用户。访谈数据库管理员、安全员和审计员,核查不同用户是否采用不同账户登录系统。


最小权限、权限分离
进入mysql,执行select * from user;
查看用户权限列表,一般用户应当只有select、insert或update权限,只有管理员才能有所需的管理权限;

MySQL数据库不具备安全标记功能,默认不符合;


3、安全审计
进入mysql,执行show variables like '%log%';
查看是否开启了重要日志功能,如错误日志(log_error)、查询日志(general_log)、二进制日志(log_bin);

进入mysql,执行show variables like '%log%
根据general_log_file查找general_log查询日志位置,或登录数据库所在服务器,使用命令cat /etc/my.cnf,查找log_bin二进制日志位置。查看日志内容,是否对所有用户的sql命令均进行记录。
(如开启日志则默认符合);

进入mysql,执行show variables like '%log%
查看重要日志保存位置,查看各日志文件,核查是否对数据库重要的用户行为和重要安全事件进行审计。
注:general_log可记录所有用户的sql查询语句,但影响效率;log_bin记录所有数据修改;log_error记录数据库错误事件。


4、入侵防范
登录mysql,执行select user,host from mysql.user;
查看数据库是否限制账户的登录地址范围,如限制root的host为localhost,仅可本地登录等。
预期结果:执行步骤1),已对用户的登录地址范围进行了限制,host列不存在‘%’;

select version ();

这篇关于MySQL-等保测评指导书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744137

相关文章

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句