小研究 - MySQL 数据库安全加固技术的研究(二)

随着信息系统的日益普及,后台数据库的安全问题逐步被人们重视起来。以当下热门的MySQL 数据库为例,通过分析数据库的安全机制以及总结数据库面临的安全风险,针对性地提出了相应的加固策略,为数据库的安全加固工作提供了技术支撑。

目录

4 MySQL 数据库的安全加固技术

4.1 网络安全

4.2 主机安全

4.3 防 SQL 注入

4.4 物理安全

5 结束语


4 MySQL 数据库的安全加固技术

4.1 网络安全

为充分保障 MySQL 数据库所在网络环境的安全,必须同时使用多种安全防范技术。

防火墙技术:防火墙是一种广泛应用的防范技术,其主要作用是监控可信任网络和不可信任网络之间的访问通道,可在内部与外部网络之间形成一道防护屏障。数据库管理人员应当利用防火墙的白名单功能设置可以访问数据库服务器的 IP 地址,同时将访问端口控制到 3306,充分遵循权限最小化原则。

入侵检测技术:入侵检测是近年来发展起来的一种防范技术,综合采用了统计技术、规则方法、网络通信技术、人工智能、密码学、推理等技术和方法,其作用是监控网络和计算机系统是否出现被入侵或滥用的征兆。通过部署入侵检测系统,数据库管理人员能及时发现网络攻击行为并采取相应的防御措施。

入侵防御技术:作为防火墙技术的有效补充,入侵防御技术既能及时发现又能实时阻断各种入侵行
为,大大缩短了网络遭受攻击后的响应时间。数据库管理人员可以考虑部署入侵防御系统来提高整个网络的安全性能。

4.2 主机安全

主机安全是 MySQL 安全性的核心,包括了账号安全、密码策略、权限控制等。主机层面常见的加固策略有以下几点。

第一,禁止用管理员账号权限运行 MySQL。以普通账号安全运行 mysqld,禁止以管理员账号权限运行MySQL 服务。在 MySQL 配置文件中进行设置:

        [mysql.server]
        user=mysql

第二,删除数据库中存在的空账号。使用如下命令删除空账号:

        DELETE user,host FROM mysql.user WHERE user='';

第三,确保所有用户都要求使用非空密码登录。执行如下语句查询是否有用户不需要密码即可登录:

        SELECT User,host FROM mysql.user WHERE
        (plugin IN('mysql_native_password','mysql_old_password')
        AND (LENGTH(Password)=0
        OR Password IS NULL))
        OR (plugin='sha256_password' AND LENGTH(authentication_string)=0);

第四,删除数据库中多余的账号。只保留必须的账号,将多余的账号删除,减少被窃取利用的风险。DROP USER user;语句可用于删除一个或多个 MySQL账号,且删除账号的同时会删除来自所有授权表的账号权限记录。

第五,删除默认数据库。MySQL 数据库管理系统安装完毕后会自动生成 test 的测试数据库,这会对数据库系统的安全造成威胁,必须进行删除。删除语句如下:

        DROP DATABASE test;

第六,更改默认的密码策略。查看目前的密码策略:

        show variables like ‘validate_password%’;

根据实际需要设置密码的强度验证等级、密码要求的长度、密码是否需要包含特殊符号等密码策略。常见的与密码策略相关的参数如下:

        validate_password_length 固定密码的总长度;
        validate_password_dictionary_file 指定密码验证的文件路径;
        validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
        validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
        validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;

第七,权限控制。最小化权限原则:数据库管理人员应仅仅分配给账号足够的使用权限即可。比如一个账号只用来进行数据库的查询工作,那么这个账号将只能拥有 SELECT 权限,而不能拥有诸如 DELETE、UPDATE 等权限,防止权限的扩大化。最高权限最小化原则:确保数据库中不会存在多个具有管理员权限的账号。通常情况下,管理员账号的数量与数据库面临的潜在安全危险性成正比。

4.3 防 SQL 注入

采用预编译技术:使用预编译的 SQL 语句进行参数化查询,将带“?”的 SQL 语句发送给 DBMS 完成解析、检查、编译等工作,再把实际值赋给“?”,最后将“?”这个变量传给 SQL 语句。预编译技术能够有效防范恶意攻击者利用拼接 SQL 语句产生的漏洞进行的 SQL 注入攻击。

严格控制数据类型:对强类型语言中一般不存在数字型注入,因为接收数字时,大多都会进行整型(int)数据类型转换。对于弱类型语言需要进行数字类型检查,防止数字型注入。

对特殊字符进行转义:手动或者利用安全函数对诸如“ ‘ ” “#’等特殊字符进行转义,防止恶意攻击者利用特殊字符闭合 SQL 语句达到 SQL 注入的目的。

使用正则表达式过滤传入的参数:正则表达式实际上是一种逻辑公式,它表达的是对字符串的过滤逻辑,即通过组合事先定义好的特定的字符构建一个“规则表达式”,然后利用这个“规则表达式”完成对字符串的过滤工作。正则表达式有基本元字符、次数元字符、位置元字符和特殊元字符这几类常见元字符,利用这些元字符以及适当的普通字符可以构造出用以描述 SQL 注入攻击语句的正则表达式,例如猜测是否有注入点的攻击语句“and 1=1”的正则表达式为“\s*and\s+(\w+)\s*=\s*\1”。通过正则表达式可以将危险参数进行过滤。

4.4 物理安全

为保护数据库的物理安全,防止数据存储物理介质或逻辑映像失窃的发生,可以从访问主体身份真实性和物理介质数据的机密性防护 2 个方面采取措施。

主体身份真实性方面,对于非云的物理设备,可参照 GB/T 39786—2021 的要求,采用指纹打卡或者密码技术对进出设备所在机房的人员进行鉴别,同时在关键位置部署监控摄像头对设备操作的过程进行全程录像,最后维护好出入记录的完整性以备事后审计;对于云上系统,可要求云服务商保证其物理环境安全。

物理介质数据的机密性方面,在设备驱动层实施磁盘透明加密以及在文件系统层实施文件透明加密,这样即使攻击者拆走了磁盘等物理介质,也无法解析其中的任何数据,达到保护数据机密性的目的。

5 结束语

本文首先介绍了 MySQL 数据库的内外部安全机制,而后对面临的主要风险进行了归纳总结,最后针对各类风险给出了相应的数据库加固策略,具有一定的参考价值。

猜你喜欢

转载自blog.csdn.net/Dream_Weave/article/details/132133812
今日推荐