数据库原理及MySQL应用 | 数据库安全加固

news2025/4/13 20:34:42

 

数据库安全至关重要,可从多方面对数据库进行加固。

数据库安全怎么强调都不过分,可以从以下方面对数据库进行加固,让它更安全。

01、操作系统级别

可从以下七方面实现操作系统级别的安全加固。

1. 使用数据库专用服务器

使用专用的服务器安装MySQL服务,卸载或删除操作系统上的不必要的应用或服务,避免因为其他应用或服务存在安全漏洞给MySQL运行带来的安全风险,这样也能减少服务器的负担,提高性能。

2. 关闭不需要的端口

使用网络扫描工具(如nmap等)扫描服务器端口,检查除了MySQL需要监听的端口(默认为3306)之外,还有哪些端口是打开的,关闭不必要的端口。

3. 不要将数据库和日志文件放在系统分区

系统分区是保存引导文件和系统文件的分区,操作系统运行时,会频繁对系统分区进行读写,也是各种病毒、木马、恶意软件等最关注的地方。例如Windows系统通常是C盘,Linux系统是“/”“/var”“/usr”等,不管是出于安全还是性能上考虑,都不建议将MySQL安装在系统分区,也不要将数据文件和日志文件放在系统分区。

4. 使用专用的最小权限账号运行数据库进程mysqld

强烈建议使用专用的最小权限账号运行mysqld守护进程,不要用操作系统管理员的身份,提高本地安全性,防止mysqld对本地文件的存取对系统构成威胁。因为任何具有FILE权限的数据库用户都可以利用此账号创建文件,也可以将此账号能访问的任何文件读到数据库表中。

5. 严格管理操作系统账号

严格管理操作系统账号,防止账号信息外泄,尤其是系统管理员和运行mysqld守护进程的账号。配置密码策略,提高密码复杂度,定期更改密码。

6. 不要复用数据库账号

运行MySQL服务的操作系统账号不要用来运行其他应用或服务,避免因其他应用或服务被攻击而给MySQL服务带来的影响。

7. 数据文件夹及日志文件权限控制

合理设置MySQL的数据文件夹以及二进制日志文件、错误日志文件、慢查询日志文件、通用日志文件、审计日志文件等文件的访问权限,确保只有合适的账号拥有合适的权限,防止数据或日志文件被误删除、窃取或破坏。例如,只让运行mysqld守护进程的专用账号拥有完全控制的权限,禁用其他所有用户的读写权限。

02、MySQL级别

可从以下9方面实现MySQL级别的安全加固。

1. 安全安装

MySQL安装完成之后,建议使用mysql_secure_installation工具进行安全性设置,直接在DOS命令提示符窗口运行此命令即可。用此工具可以启用验证密码组件(VALIDATE PASSWORD COMPONENT)、评估密码强度、更改root用户的密码、删除匿名用户、限制root用户只能在本地登录、删除test数据库、重新加载权限表等。

2. 安装最新的补丁

可用“SHOW VARIABLES WHERE Variable_name LIKE "version";”或“SELECT VERSION();”命令查询MySQL的版本,如果有需要安装的补丁包,要及时安装。

3. 密码安全

确保所有用户都使用非空密码,尽量不使用固定密码,每个用户使用不同的密码,若需要将密码保存在特定全局配置文件或脚本中时,可用MySQL自带的用于安全加密登录的工具mysql_config_editor,将密码加密储存,避免直接保存明文密码。另外,还可以根据需要设置以下几方面的内容,增加密码安全性。 

1) 密码策略

设置合适级别的密码策略,强制用户的密码符合一定的要求,如密码长度在8位以上,使用数字、大小写、特殊字符等的随机组合。

可以用“SHOW VARIABLES LIKE 'validate_password%';”命令查看当前的密码策略配置,如图11-4所示。其中,validate_password.check_user_name表示是否需要检查用户名;validate_password.dictionary_file表示密码策略文件,只有密码策略强度为STRONG时才需要;validate_password.length表示密码最小长度;validate_password.mixed_case_count表示大小写字符长度,至少1个;validate_password.number_count表示数字至少1个;validate_password.policy表示密码策略强度为MEDIUM,还可以设置为LOW或STRONG;validate_password.special_char_count表示特殊字符至少1个。

 可在MySQL命令提示符窗口,用SET命令进行修改,其基本语法格式如下所示。

提示

若“SHOW VARIABLES LIKE 'validate_password%';”命令的输出结果为空集,说明没有安装密码验证组件,可在MySQL中运行下面命令安装密码验证组件。

 若想卸载密码验证组件,可在MySQL中运行下面命令。

2) 密码过期及重用策略

根据需要设定密码过期时间,强制用户定期更改密码,可在全局及每个用户基础上建立密码重用策略,保存已使用过的历史密码,限制重复使用以前的密码。

3) 密码认证机制

尽量采用新的密码认证机制。MySQL不断加固数据库的安全性,在MySQL 8.0中将之前的mysql_native_password机制,升级到新的caching_sha2_password。

mysql_native_password是MySQL 5.6、5.7默认的密码认证机制。当用户连接MySQL实例时,通过challenge-response的密码校验机制进行认证,使用SHA1哈希算法进行认证校验,并将用户的密码通过SHA1(SHA1(password))两次哈希计算,保存在表“mysql.user”的列authentication_string中,但相同的密码必然会有相同的哈希值,而且随着时间的推移,SHA1哈希算法也已经变得比较容易破解了。

cache_sha2_password是MySQL 8.0默认的密码认证机制,它进行了如下几个方面的改进。

(1) 哈希算法升级为更为安全的SHA256算法,哈希算法的round次数从原来的2次,提升为5000次,round次数越多,每次计算哈希值的代价越大,破解难度也就越大。

(2) 保存在列authentication_string中的哈希值为加盐(salt)后的值,这样就算两个不同用户的密码相同,保存在mysql.user表中的哈希值也不同。

(3) 用TLS加密或RSA密钥传输方式从客户端将密码传送到服务端。

4. 用户安全

建立不同类型的用户账号,如超级管理员账号、系统应用账号(实现备份、监控、审计等)、应用业务账号、业务人员账号、开发人员账号、测试人员账号、其他专用账号等,并制定相应的命名规则。

用户根据密码策略设置符合要求的密码,保护好自己的账号密码,防止泄露,非必要人员不需要知道账号的名称,尤其要控制可以访问所有数据库的账号。

对于不必要的用户,可以先禁用,后删除,做到无匿名账户和无废弃账户。

5. 权限安全

熟悉MySQL的权限系统,了解权限表中的每个权限,遵循最小权限原则,业务需要什么给什么,而不是直接给每个用户分配所有权限。坚持最小权限,是数据库安全的重要步骤。

以下几个是比较特殊的权限,应确保只有数据库管理员才能拥有。

(1) FILE:表示是否允许用户读取数据库所在主机的本地文件。

(2) PROCESS:表示是否允许用户查询所有用户的命令执行信息。

(3) SUPER:表示用户是否有设置全局变量、管理员调试等高级别权限。

(4) SHUTDOWN:表示用户是否可以关闭MySQL服务。

(5) CREATE_USER:表示用户是否可以创建或删除其他用户。

(6) GRANT:表示用户是否可以修改其他用户的权限。

另外,要合理控制DDL和DML语句的授权。因为它们会导致数据库结构或数据发生变化,在任何数据库中都要控制用户的此类权限,确保只授权给有业务需求的非管理员用户。

6. 端口安全

MySQL默认端口是3306,如果条件允许,建议定期修改。

7. 连接访问安全

使用专门主机与数据库连接,创建用户时指定主机信息,确保访问数据库的主机为已知用户或主机,把非法请求阻止在数据库以外。对已经连接的IP网段进行规范化、统一化的管理,定期进行权限复核操作,对系统所属IP、用户进行权限梳理工作。

严禁开启外网访问,尽可能禁止远程网络连接,防止猜解密码攻击、溢出攻击和嗅探攻击。如果客户端在外网,不应该直接访问数据库,而是使用中间件堡垒机或其他替代方案。

有些连入数据库的应用程序存在后门,会造成数据库安全隐患,为此要检查所有连接数据库程序的安全性。

8. 限制LOCAL INFILE/OUTFILE

禁用或限制LOCAL INFILE/OUTFILE,防止造成任意文件读取或webshell写出,防止非授权用户访问本地文件。可以在MySQL的配置文件my.ini中设置“Local-infile=0”“secure_file_priv=NULL”“secure_file_priv=指定目录”来禁用或限制通过文件实现数据的导入和导出。

9. 日志审计加固

根据需要启用二进制日志、错误日志、通用查询日志、慢查询日志等日志,监控数据库的运行状态,查询出错原因,进行数据恢复,优化数据库性能等。对重要业务表的所有行为,最好全部审计。

MySQL 8.0对于安全做了很多层的加固,除了以上提到的,还有InnoDB表空间加密、InnoDB redo/undo加密、二进制日志加密等

03、网络级别

可从以下两方面在网络级别实现对MySQL安全的加固。

1. 使用SSL或X509加密连接

如果对数据保密要求非常严格,或MySQL数据库服务器与应用是跨信任域部署的,则需要考虑在数据库服务器与应用服务器之间建立SSL或X509加密通道,将传输数据进行加密。

2. 限定网络

数据库应该只对应用程序服务器开放,不要将其开放给整个网络,通过防火墙或其他白名单和中间件白名单过滤机制,限制对MySQL端口的访问。

最后需要强调的是,人才是安全的主导,最好根据具体情况制定详细的规章制度,对员工进行安全培训,增强员工的系统安全观念,做到细心操作,安全操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《大数据导论》之数据生命周期和数据使用

1 数据生命周期 数据都存在一个生命周期,数据生命周期是指数据从创建、修改、发布利用到归档/销毁的整个过程。 1.1 数据生命周期管理工作包括以下几个方面: 分类:对数据进行自动分类,分离出有效的数据,对不同类型数据…

【MySQL】数据库基础知识汇总和增删改查操作

【MySQL】数据库基础知识汇总和增删查改操作 文章目录【MySQL】数据库基础知识汇总和增删查改操作1.数据库基础知识:2.对数据库的相关操作:2.1.显示当前所有的数据库, show databases;2.2.创建数据库, create database 数据库名;2.3.选中数据库, use 数据库名;2.4.删除数据库, …

基于腾讯云的艺术展小程序

第一章 项目背景 1.1 项目简介和应用现状 基于腾讯云的艺术展小程序:打造集美术鉴赏、艺术科普、当代优秀艺术品交流多功能融艺术性、知识性、趣味性、便利性于一体的一站式平台,为广大艺术爱好者提供优质服务!小程序前后端完整&#xff0c…

特别活动丨HuggingFace工程师教你HF的正确打开方式

主题: HuggingFace的正确打开方式时间: 2022年12月15日(周四) 20:30-21:30由北京智源人工智能研究院主办的2022大模型创新论坛正如火如荼进行中,论坛包含训练营、峰会、创业大赛、黑客马拉松、闭门研讨会、创新应用榜单…

Python数据标准化

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 Python数据标准化 选择题 以下python代码结果错误的一项是? import pandas as pd import numpy as np from sklearn import preprocessing myDatapd.DataFrame({C1:[-1,-3,-5]}) p…

Moonbeam与Hyperlane之间的跨链互连合约

跨链通信除了作为Moonbeam的核心,也是为何另一个跨链协议Hyperlane部署于Moonbeam之上的原因。与先前介绍的跨链协议Axelar和LayerZero类似,Hyperlane允许开发人员编写可以跨区块链通信的智能合约,并让开发人员可以在Moonbeam上构建&#xff…

Linux中可用于监视磁盘使用情况的命令行实用程序

df命令 df是一个Linux命令行实用程序,用于监视Linux磁盘使用情况。df命令显示文件系统磁盘使用情况详细信息的完整摘要。通过-hT选项,它以易于阅读的格式显示有关文件系统、类型、磁盘总大小、已使用容量、剩余容量,使用率以及磁盘安装位置等…

基于DOA联合TDOA时间积累的二维GDOP仿真分析

up目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 无人机(UAV)因其体积小,灵活性高,成本低等优势得到快速发展并被广泛应用于军事战争,城市管理,民用,地质,抢险救灾等各个领域,与此同时,无人机定位技术也得到了深入研究,其中无线电探测与定位技术备受众多学者关…

liunx常用命令 适用了centos stream9

最近刚好需要重新再学习一下Linux然后开始学习大数据,就重新再温习一下Linux,然后需要把个人所有的编程环境和数据库变成linux版本,虽然一直以来都是用win系统做数据,但是liunx系统的安全和快速最近试了一下确实令我着迷。 liunx常…

[附源码]Nodejs计算机毕业设计基于web的教学资源管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

JSP ssh流量充值系统myeclipse开发oracle数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh流量充值系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myec…

Spring MVC学习 | 使用域对象共享数据

文章目录一、回顾域对象二、在request域共享数据2.1 使用ServletAPI2.2 使用ModelAndView对象2.3 使用Model对象2.4 使用ModelMap对象2.5 使用Map集合2.6 Model、ModelMap和Map的关系2.7 使用域对象的底层原理三、在session域共享数据四、在application域共享数据学习视频&…

SpringBoot 替换 if 的参数校验

简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernate validation是对这个规范的实现,并增加了校验注解如Email、Length等。 Spring Validation是对hibernate validation的二次封装,用于支持spring…

Windows 禁用驱动签名方式

Windows 禁用驱动签名方式1. Windows开启测试模式2. 强制禁用2.1 Win7、Win82.2 Win103. 开机选用强制开启禁用签名模式3.1 Win72.3 Win8、Win10及Win113. 参考1. Windows开启测试模式 以管理员模式启动cmd,输入以下命令: 开启系统的测试模式 bcdedit …

来自飞桨社区开发者的礼物,《动手学深度学习》飞桨版上线!

近几年,各行各业已经逐渐开始基于AI技术启动企业智能化转型,AI技术的广泛应用催生了对AI应用人才的需求。如何不断夯实自身的AI技术能力,提升自己的职业竞争力?飞桨社区的开发者给大家带来一份神秘礼物。李沐老师的《动手学深度学…

web前端网页设计期末课程大作业:旅游网页主题网站设计——紫色的旅游开发景点网站静态模板(4页)HTML+CSS+JavaScript

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

股票l2接口的委托数据有什么作用?

股票l2接口的委托数据有什么作用? 委托队列返回数据:Level 2 行情将真实的每笔成交和成交量以明细数据呈现给用户。 用户可通过查看明细成交数据,判断出委托是属于大单、中单、小单并以此推断出是机构、大户、散户等所为,查明主…

国内外远程办公软件现状

我们说的远程办公通常指狭义上的远程办公,是指通过远程技术,或远程控制软件,对远程电脑进行操作办公,实现非本地办公,如在家办公、异地办公、移动办公等远程办公模式。这种技术的关键在于:穿透内网和远程控制的安全性。…

软件工程期末复习

文章目录一、单选、多选、判断二、简答题1、MVC体系结构2、软件风险的分类3、测试准则(教材P111- 5.2.3)4、结构化分析的方法5、面向对象设计的原则(SOLID)(1)单一职责原则(2)开放/闭…

arduino-ide ESP32 开发

本来想用vscodePlatformIO 一直安装不成功,网不行。先用Arduino(后来用手机开热点,安装成功了,电信的局域网真差) 我的ESP开发版是CP2102驱动芯片,需要先安装驱动 CP210x USB to UART Bridge VCP Driver…