数据库系统开发与安全防护-D1
一、数据库相关概念及发展
数据库、数据、数据表及其设计规范
数据库(Database,DB)是存储数据的一个集合,一个数据库系统(Database System,DBS)中可以有多个数据库,数据库管理系统(Database Management System,DBMS)是管理数据库的软件,数据库管理员(Database Administrator,DBA)则是使用数据库管理系统来管理数据库的人。
数据是指对客观事物进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合,是可识别的、抽象的符号。简而言之,数据是符号的集合,是对事物特性的描述。这里的“符号”不仅仅指文字、字母、数字和其他特殊符号,还包括图形、图像、声音等。
数据表(或称表,Data Table)是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质内容。
数据表是以行列的形式展现数据的,跟Excel表格一样,都要有一个表头(字段),但数据表中存储着若干相互关联的数据,同一列的数据属性相同,同一行的数据不能重复。
数据库的设计范式是数据库设计所需要满足的规范,满足规范的数据库是简洁的、结构明断的、无数据冗余的,同时,不会造成操作(插入INSERT、删除DELETE和更新UPDATE)异常。
1NF保证字段不可拆分
2NF消除非主属性对主键的部分函数依赖
3NF消除非主属性对主键的传递函数依赖
表的建立满足3NF就满足需求,此外,还可以升级到巴斯-科德范式(Boyce-Codd Normal Form,BCNF),这样就消除了主属性对主键的传递函数依赖。
数据库管理系统(主流)
目前,商品化的数据库产品主要以关系型数据库为主,技术也比较成熟。SQL Server、Oracle、MySQL、DB2是当前数据库管理系统市场中四大主流产品,市场占有率很高。
微软公司:SOL Server、Access
甲骨文(Oracle)公司:Oracle数据库、MySQL
IBM公司:DB2
数据定义:用于建立、修改数据库的结构,定义数据库的三级模式结构、两级映像以及完整性约束和保密限制等约束
数据操作:为用户提供UPDATE、INSERT和DELETE功能,完成对数据库的更新、插入和删除操作
数据控制:用来授予或回收访问数据库的某种特权,并控制数据库操作事务发生的时间及效果,对数据库实行监视等功能,如GRANT、ROLLBACK和COMMIT
数据查询:基本结构是由SELECT子句、FROM子句、WHERE子句组成的查询块
数据库的发展
数据模型是数据库的核心和基础,决定着数据在数据库中的存储策略,数据库技术的发展阶段是以数据模型的发展演变为主要标志,主要分为三个阶段:第一代是层次、网状数据库系统,第二代是关系数据库系统,第三代是面向对象数据库系统。
数据库安全
数据库安全包含两层含义:第一层是指系统运行安全,系统运行安全通常受到的威胁主要是指一些网络不法分子通过互联网、局域网等入侵电脑,使系统无法正常启动,或超负荷让电脑运行大量算法,并关闭CPU风扇,使CPU过热烧坏等破坏性活动;第二层是指系统信息安全,系统信息安全通常受到的威胁主要是攻击者入侵数据库,并盗取想要的资料。
数据库系统的安全特性主要是针对数据而言的,包括数据独立性、数据安全性、数据完整性、并发控制、故障恢复等几个方面。
信息泄露呈现出的两个趋势:
①通过BS(Browser/Server,浏览器/服务器)模式应用,以Web服务器为跳板,窃取数据库中的数据,非常典型的攻击就是SOL注入攻击,主要原因是应用和数据库直接访问协议而没有任何控制
②数据泄露常常发生在内部,大量的运营维护人员直接接触敏感数据,导致以防外为主的网络安全失去了用武之地
为了保证数据库安全,应该进行三步操作:
事前诊断:利用数据库漏洞扫描系统扫描数据库,给出数据库的安全评估结果,暴露当前数据库系统的安全问题
事中控制:及时关闭数据库服务器,切断攻击者与数据库的联系。尽管会面临一定的损失,但总比数据丢失造成的危害小得多
事后分析:采用数据库审计功能,对数据库访问日志进行分析,及时发现可疑操作和可疑的数据,及时利用数据库备份进行数据恢复
二、数据库安全威胁来源及对策
内部风险来源及对策
及时安装补丁:很多网络攻击者利用SQL Server系统的漏洞进行攻击,需要系统管理定期留意微软发布的补丁,并及时安装补丁文件
SQL Server版本:一般SQL Server有正版和破解版等版本,如果有条件,建议大家使正版软件,或者购买正版的云数据库
超级管理员用户sa:每个人都知道SQL Server有一个sa用户,这也是非法入侵者首先攻击的对象。一般要禁用sa用户或给sa用户设置一个相当复杂的密码
数据库默认端口1433:跟sa一样,1433端口是默认的、公开的。攻击者通常利用1433端口并配合sa,一起发起攻击。另外,DoS攻击会让服务器的CPU负荷增大,达到瘫痪数据库服务器的目的。一般情况下,可以将端口修改为其他的端口,尽量让攻击者找不到;采用防火墙过滤掉该数据库对外开放的端口,禁止一切从外部直接探测1433端口的行为,确保数据库安全或者将特定的连接IP设置到白名单中
安全验证模式:SQL Server提供两种不同概念的验证模式,分别是Windows验证模式和混合验证模式。Windows验证模式主要是以系统的账号验证策略为基础,其安全性依赖于系统的安全性,必须保证 Windows的账户策略足够安全。而混合验证模式则是以SQL Server自身的验证机制为基础,其安全性并不能得到很好的保证
用户权限分配过大:网络数据库都采用混合验证模式,因此分配账号时,应坚持分配权限最小原则,不要分配过多的权限给用户,权限够用即可。而且,用户要限制在指定的数据库上,不能操作其他的数据库
数据库备份与负载均衡:数据库的备份就是保证数据库被破坏后能够迅速恢复,不至于由于长时间系统瘫痪而造成巨大的损失,且备份的模式和频率也要选择适度。其次,数据库最好采用主从负载均衡模式,一旦主数据库被攻击瘫痪从数据库,就会变成主数据库立即工作,这样数据库就不至于长时间瘫痪了
信任IP访问:越少的人访问越安全,不能任何IP地址都能访问,因此,要通过设置入站规则或防火墙来限制数据库访问的信任IP地址,只保证合法的IP能够访问即可,从而有效控制来自网络上的安全威胁
启用网络协议过多:网络数据库通过TCP/IP协议访问即可,把其他的访问协议全部禁止,避免不必要的安全风险
管理好扩展存储过程:加强对系统级存储过程和扩展存储过程的权限控制。在众多的扩展存储过程中,最著名的是xp_cmdshell扩展存储过程,其权限非常大,会给用户带来很多强大的功能,但同样也会带来巨大的安全风险,故一定要删除或者在数据库中Drop掉
禁掉不用的功能:例如数据库的邮件功能、管理动态链接库功能
服务器信任,避免连锁风险:不能把最重要的数据的安全性寄托在另一台服务器的安全上,防止一台服务器被攻陷,其他与之相信任的服务器全部暴露
对数据库开发者来说
数据完整性及约束:一旦设置不好,数据库就会存在冗余数据或异常操作,要想避免风险只能提高开发者的设计水平
重要数据明文加密存储:重要数据、敏感数据明文存取会面临巨大的安全风险,数据加密能够有效地保护数据,即使被攻击者获取,但在没有密钥的情况下,仍然无法获得真实的数据
防止SQL注入风险:SQL注入风险是主要的网络攻击来源,它是利用SOL语句的特点通过字符串构造非法的SQL语句来获取数据
外部风险来源及对策
操作系统风险
机房安全:最好自建专业机房,或者租用专业机房
服务器硬件安全:服务器硬件突然损坏导致的系统直接崩溃、磁盘损坏等会使数据无法恢复,服务器的寿命都是有年限的
操作系统安全:数据库要依托操作系统才能运行,所以在很大程度上也要依赖于操作系统的安全。一旦攻击者攻破操作系统,数据库的安全就无从谈起,将直接暴露在攻击者面前
数据安装磁盘安全:建议所有的SQL服务器的数据和系统文件都安装在NTFS分区上并配置相应的ACL,这样就可以充分利用Windows系统中NTFS文件分区的安全性。NTFS文件系统可以将每个用户允许读写的文件限制在磁盘目录或磁盘目录下的任何一个文件夹上
网络风险
网络攻击主要是攻击Web应用系统和操作系统
SQL注入安全:SQL注入是攻击者利用开发者的应用系统引起的对数据库的直接攻击,之前在内部风险中提到的SQL注入,这主要还是开发者对特殊字符的过滤不足造成攻击者利用漏洞直接攻击数据库
防火墙安全:防止网络攻击,最简单的、最直接的方法就是利用防火墙进行安全防护。防火墙不仅会提供防御主要网络攻击的功能,还会为Web和数据库提供专门的防护功能,比如1433端口、SQL注入、sa防护等
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!