1.1 数据库相关概念及发展
数据库(Database, DB)是存储数据的一个集合,一个数据库系统(Database System, DBS)中可以有多个数据库,数据库管理系统(Database Management System, DBMS)是管理数据库的软件,数据库管理员(Database Administrator, DBA)则是使用数据库管理系统管理数据库的人。下面我们对数据库相关概念进行详细介绍。
1.1.1 数据
数据是指对客观事物进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合,是可识别的、抽象的符号。简而言之,数据是符号的集合,是对事物特性的描述。这里的“符号”不仅仅指文字、字母、数字和其他特殊符号,还包括图形、图像、声音等多媒体的表示。例如,“0、1、2”“阴、雨、下降、气温”“学生的档案记录、货物的运输情况”等都是数据。
人们通过获得、识别自然界和社会的不同信息来区别不同事物,得以认识和改造世界。信息是加载于数据之上,对数据进行具有含义的解释。数据和信息是不可分离的,信息依赖数据来表达,数据则生动具体地表达出信息。数据是符号,是物理性的,信息是对数据进行加工处理之后所得到的并对决策产生影响的数据,是逻辑性和观念性的;数据是信息的表现形式,信息是数据有意义的表示。数据是信息的表达、载体,信息是数据的内涵,是形与质的关系。数据本身没有意义,数据只有对实体行为产生影响时才成为信息。
例如,在学生基本信息表中,如果单独看待学号、姓名、性别、身份证号、专业、班级,它们就是数据,如果将这些数据共同组合起来看待,则就是学生基本信息。
1.1.2 数据表及其设计规范
数据表(或称表,Data Table)是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质内容。如教务管理系统中,教务管理数据库包括:学生基本信息表、班级表、课程表、专业表、成绩表和毕业表等,这些表用来管理学生入学到毕业期间产生的数据,这些数据表通过一定的规则相互关联,相互作用,共同构成、管理学生学籍信息。
数据表是以行列的形式组织及展现数据的,跟Excel表格一样,都要有一个表头(字段),但数据表中存储着若干相互关联的数据,同一列的数据属性相同,同一行的数据不能重复。图1-1为教务管理系统中学生信息表部分数据,为了保密,学号、姓名和身份证号被部分隐藏。
图1-1 教务管理系统中学生信息表部分数据
数据库的设计范式是数据库设计所需要满足的规范,满足规范的数据库是简洁的、结构明晰的、无数据冗余的,同时,不会造成操作(插入INSERT、删除DELETE和更新UPDATE)异常。
数据表的建立需要符合一定的要求,就是至少要满足数据库第三范式,否则与Excel表没有区别,发挥不出数据库的优势。
· 第一范式(1NF):强调的是列的原子性,即列不能再分成其他几列,也就是说一列只代表一个属性,不能代表多个属性。在学生信息表(学号、姓名、性别、电话)中,“电话”字段一般有固定电话和手机,因此,不符合1NF,需要将“电话”字段拆分,得到学生信息表(学号、姓名、性别、固定电话、手机)。1NF比较容易判断。
· 第二范式(2NF):首先满足1NF,其次表必须有一个主键,且没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
例如,在成绩表(学号、课程号、课程名称、成绩、学分)中,主键应该是学号和课程号,成绩完全依赖学号和课程号,但课程名称、学分只依赖课程号,因此成绩表不符合2NF,必须将成绩表拆分为成绩表(学号、课程号、成绩)和课程表(课程号、课程名称、学分)才符合2NF。
不符合2NF的设计容易产生冗余数据和操作异常,例如课程名称和学分,如果同一门课程有N个学生选修,则课程名称和学分就要重复N -1次。其次,更新、插入和删除都会产生异常,如果想添加一个没有学生选修的课程,这是根本行不通的。删除和更新都会操作多条记录,否则就会出现数据不一致的情况。
· 第三范式(3NF):首先满足2NF,其次非主键列必须直接依赖于主键,不能存在传递依赖,即不能存在非主键列A依赖于非主键列B,非主键列B依赖于主键的情况。
在学生基本信息表(学号、姓名、年龄、专业名称、毕业学分)中,主键是学号,因此在表中存在学号决定专业名称,专业名称决定毕业学分的传递依赖,因此不符合3NF;可以将其拆分为学生基本信息表(学号、姓名、年龄、专业名称)和专业信息表(专业名称、毕业学分)两个表就符合3NF。
不符合3NF的设计同样容易产生冗余数据和操作异常。
1NF保证字段不可拆分,2NF消除非主属性对主键的部分函数依赖,3NF消除非主属性对主键的传递函数依赖。表的建立满足3NF就满足需求,此外,还可以升级到巴斯-科德范式(Boyce-Codd Normal Form, BCNF),这样就消除了主属性对主键的传递函数依赖。
1.1.3 数据库
数据库是按照数据结构来组织、存储和管理数据的仓库。它出现于20世纪60年代,伴随着信息技术的发展,在20世纪90年代后期得到迅速发展,进入21世纪,数据库理论日臻完善,管理和存储功能也日益智能化。
数据库是以一定方式存储在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。通俗地说,数据库是一个存储数据的仓库,这些数据是按照一定的数学模型组织起来的,具有较小冗余度和较高的数据独立性,能够与其他用户共享数据,是有组织、有管理的数据集合。
教务管理系统数据库中包括学生基本信息表、班级表、课程表、专业表、成绩表和毕业表等众多数据表,这些表对象及其视图、存储过程等对象共同组成了一个数据库。
1.1.4 数据库管理系统
数据库管理系统是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,可对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户可以通过数据库管理系统访问数据库,数据库管理员也可以通过它进行数据库的维护工作。
数据库管理系统提供数据定义语言(Data Definition Language, DDL)、数据操作语言(Data Manipulation Language, DML)、数据控制语言(Data Control Language, DCL)和数据查询语言(Data Query Language, DQL),供用户定义数据库的模式结构与权限约束,实现对数据的创建、删除、修改、查询及对用户的授权等操作。
· 数据定义语言,用于建立、修改数据库的结构,定义数据库的三级模式结构、两级映像以及完整性约束和保密限制等约束。
· 数据操作语言,为用户提供UPDATE、INSERT和DELETE功能,完成对数据库的更新、插入和删除操作。
· 数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操作事务发生的时间及效果,对数据库实行监视等功能,如GRANT、ROLLBACK和COMMIT。
· 数据查询语言,基本结构是由SELECT子句、FROM子句、WHERE子句组成的查询块。
1.1.5 数据库的发展
数据模型是数据库的核心和基础,决定着数据在数据库中的存储策略,数据库技术的发展阶段是以数据模型的发展演变为主要标志,主要分为三个阶段:第一代是层次、网状数据库系统,第二代是关系数据库系统,第三代是面向对象数据库系统。
1.层次数据库
层次模型是最早出现的数据模型,它是以树状(层次)结构来表示实体类型及实体间联系的数据模型。现实世界中,许多实体之间的联系本来就呈现出一种很自然的层次结构,如家族关系、行政结构等。层次模型是用树状结构表示实体与实体之间的联系,树中的每一个节点代表一个记录类型,树状结构表示实体类型之间的联系,记录之间的联系通过指针实现,查询效率高。层次模型的限制条件是:① 有且只有一个节点,无父节点,此节点代表树的根;② 其他节点有且只有一个父节点,是树的枝。
采用层次数据模型的数据库称为层次数据库系统,典型代表是IBM公司1968年推出的IMS(Information Management System),这是一个大型的商用数据库管理系统,曾经得到广泛的应用。
2.网状数据库
在现实世界中,事物之间的联系非常复杂,并非都是层次关系的,因此利用层次结构来表示非树状结构就非常不直接,为了实现非树状结构的表示,因此出现了网状模型。网状模型可以有效地解决非树状结构的表示。
网状模型允许一个以上的节点无双亲以及一个节点可以有多于一个的双亲。网状模型能够表示比层次模型更具有普遍性的结构,不受层次模型两个限制的制约,可以直接地去描述现实世界,而层次模型只是它的一个特例。
与层次模型相同的是,网状模型中也是以记录为数据的存储单位,一个记录包含若干数据项,该数据项可以是多值的、复合的数据。每个记录有一个唯一能够标识它的内部标识符,称为码(Database Key, DBK),它是在记录存入数据库时由数据库管理系统自动赋予。码可以看作记录的逻辑地址,可作为记录的替身,或用于寻找记录。网状数据库是导航式(Navigation)数据库,用户在操作数据库时,不但要说明做什么,还要说明怎么做。例如在查找语句中,不但要说明查找的对象,而且要规定存取路径。
1964年美国通用电气公司Bachman等人开发了第一个网状数据库管理系统IDS(Integrated Data Store),奠定了网状数据库的基础。在20世纪70年代,曾经出现过大量的网状数据库管理系统产品,比较著名的有Cullinet软件公司的IDMS、Honeywell公司的IDSII、Univac公司的DMS1100、HP公司的IMAGE等。
网状模型对层次结构和非层次结构的事物都能够进行比较自然的模拟,在关系数据库之前,网状数据库管理系统比层次数据库管理系统应用得更普遍,在数据库发展史上,网状数据库曾经占有重要的地位。
3.关系数据库
1970年,IBM的研究员E.F.Codd博士发表了论文《大型共享数据库的关系模型》,文章提出了关系模型的概念,后来陆续发表了多篇文章,奠定了关系数据库的理论基础。
关系模型是用二维表的形式表示实体与实体间的联系的数据模型,关系模型是当前的主流数据模型,它的出现使层次模型和网状模型逐渐退出了数据库的历史舞台。关系数据模型提供了关系操作的特点和功能要求,但对数据库管理系统的语言没有具体的语法要求,对关系数据库的操作是高度非过程化的,用户不需要指出特殊的存取路径,路径的选择由数据库管理系统优化机制来完成。Codd在20世纪70年代初期的论文中论述了范式理论和衡量关系系统的12条标准,用数学理论奠定了关系数据库的理论基础。Codd博士也以其对关系数据库的卓越贡献获得了1981年ACM(Association for Computer Machinery)图灵奖。
关系模型有着严格的数学基础,是以集合论中的关系概念为基础发展起来的,无论实体还是实体间的联系均由单一的结构类型——关系来表示,简单清晰,便于理解和使用。在实际的关系数据库中,关系也称为表,它由表名、行和列组成。表的每一行代表一个元组,每一列称为一个属性,一个二维表就是一个关系,数据则看成是二维表中的元素,操作的对象和结果都是二维表。关系数据库是由若干个表组成的。
关系模型与层次模型、网状模型的本质区别在于数据描述的一致性,模型概念单一,描述实体的数据本身能够自然地反映它们之间的联系,而层次模型和网状模型使用指针来存储和体现联系。尽管关系数据库出现得比层次数据库和网状数据库晚,但它以完备的理论基础、简单的模型、说明性的查询语言和便于使用等特点得到了最广泛的应用。
目前关系数据库是市场上的主流,著名产品有甲骨文公司的Oracle数据库,Microsoft公司的SQL Server和Access数据库,此外还有MySQL、Sybase、Informix、Visual FoxPro等。
4.面向对象数据库
面向对象是一种认识方法学,也是一种新的程序设计方法学。把面向对象模型和数据库技术结合起来可以使数据库系统的分析、设计与人们对客观世界的认识最为相近。面向对象数据库系统是为了满足新的数据库应用需要而产生的新一代数据库系统。
面向对象模型具有以下优点。
① 易维护。采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,维护也只在局部模块,所以维护起来非常方便,成本也较低。
② 质量高。在设计时,可重用现有的、且在以前的项目中已被测试过的类,使系统满足业务需求并具有较高的质量。
③ 效率高。在软件开发时,根据设计的需要对现实世界的事物进行抽象,从而产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
④ 易扩展。由于面向对象模型具有继承、封装、多态的特性,基于此设计出的系统结构具有高内聚、低耦合的特点,故面向对象数据库系统更灵活、更容易扩展,而且成本较低。
人工智能(Artificial Intelligence, AI)应用的需求(如专家系统)也推动了面向对象数据库的发展,专家系统常常需要处理各种复杂的数据类型。与关系数据库不同,面向对象数据库不因数据类型的增加而降低处理效率。由于这些应用需求,20世纪80年代已开始出现一些面向对象数据库的商品和许多正在研究的面向对象数据库。多数的面向对象数据库被用于基本设计的学科和工程应用领域。
面向对象数据库研究的另一个进展是在现有关系数据库中加入许多纯面向对象数据库的功能。在商业应用中对关系模型的面向对象扩展着重于性能优化,即处理各种环境对象的物理表示的优化和增加SQL模型以赋予面向对象特征。如Versant、UNISQL、O2等,它们均具有关系数据库的基本功能,采用类似于SQL的语言,用户很容易掌握。
1.1.6 主流数据库管理系统
目前,商品化的数据库产品主要以关系型数据库为主,技术也比较成熟。SQL Server、Oracle、MySQL、DB2是当前数据库管理系统市场中四大主流产品,市场占有率很高。
1.微软公司的数据库产品
微软公司除了SQL Server这个数据库产品外,还有一个桌面级的产品——Microsoft Access,它是Office的一个组件。Access是一个小型的桌面数据库,应用简单,操作容易,主要用于少量数据的处理,在早期的网站和小型公司网站中,都采用了Access数据库。Access的发展是随着Office版本发展的,有Access 2000、Access 2003、Access 2007、Access 2010、Access 2013和Access 2016。
SQL Server数据库是一个企业级的产品,正版的软件是收费产品,能够支持海量数据的存取,满足企业对快速响应、数据安全等要求。SQL Server的版本也不断更新,比较成熟的是SQL Server 2000,在当时非常流行。随着版本不断升级、功能不断增加,出现了SQL Server 2005、SQL Server 2008、SQL Server 2012、SQL Server 2014、SQL Server 2016。
SQL Server在事务处理、数据挖掘、负载均衡等方面功能强大,使数据库应用系统的开发、设计变得快捷方便,同时SQL Server在数据库市场占有相当高的份额。
本书主要以SQL Server 2008为基础来讲解数据库安全技术,大家如果有兴趣可以了解更高版本的功能。
2.甲骨文公司的数据库产品
甲骨文(Oracle)公司的Oracle数据库应用非常广泛,与微软公司的数据库产品相比,其操作难度会大一些,对数据库管理人员要求较高。Oracle数据库作为一个成熟的数据库产品,适用于大型数据库系统,稳定性高。
Oracle公司旗下的另一个产品MySQL也是一个关系数据库管理系统,应用非常广泛,特别是在基于Linux系统的Web应用方面,MySQL通常都是最佳的后台数据库(Linux作为操作系统,Apache或Nginx作为Web服务器,MySQL作为数据库,PHP、Perl、Python作为服务器端脚本解释器)。
3.IBM公司的数据库产品
DB2是IBM公司推出的一个重量级数据库产品,主要应用于金融领域等超大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于所有常见的服务器操作系统平台下。
对用户来说,如何选择数据库管理系统呢?可以从构造数据库的难易程度、程序开发的难易程度、对分布式应用的支持、并行处理、可移植性和可扩展性、数据完整性、并发控制、容错能力、安全控制、支持多种文字处理能力、数据恢复的能力、成本等方面进行综合考虑,选择一个最适合自己的数据库管理系统。
1.1.7 数据库安全
数据库安全包含两层含义:第一层是指系统运行安全,系统运行安全通常受到的威胁主要指一些网络不法分子通过互联网、局域网等入侵电脑,使系统无法正常启动,或超负荷让电脑运行大量算法,并关闭CPU风扇,使CPU过热烧坏等破坏性活动;第二层是指系统信息安全,系统信息安全通常受到的威胁主要有攻击者入侵数据库,并盗取想要的资料。数据库系统的安全特性主要是针对数据而言的,包括数据独立性、数据安全性、数据完整性、并发控制、故障恢复等几个方面。
根据一些权威机构的数据泄露调查分析报告,以及对已经发生的信息安全事件进行技术分析,总结出信息泄露呈现出的两个趋势。
① 通过B/S(Browser/Server,浏览器/服务器)模式应用,以Web服务器为跳板,窃取数据库中的数据,非常典型的攻击就是SQL注入攻击,主要原因是应用和数据库直接访问协议而没有任何控制。
② 数据泄露常常发生在内部,大量的运营维护人员直接接触敏感数据,导致以防外为主的网络安全失去了用武之地。
数据库安全必须在信息安全防护体系中处于被保护的核心位置,不易受到外部攻击者攻击,同时数据库自身应该具备强大的安全措施,能够抵御并发现入侵者。为了保证数据库安全,应该进行事前诊断、事中控制和事后分析三步操作。
① 事前诊断。利用数据库漏洞扫描系统扫描数据库,给出数据库的安全评估结果,暴露当前数据库系统的安全问题。利用专业的安全软件扫描应用系统,发现应用漏洞,及时堵住;模拟攻击者攻击,对数据库进行探测性分析,重点检查用户权限是否越权等,并收集应用系统漏洞和数据库的漏洞;检查敏感数据是否加密,危险的扩展存储过程是否禁用,端口是否安全,访问协议是否安全等。事前诊断越充分,越有利于系统安全。
② 事中控制。及时关闭数据库服务器,切断攻击者与数据库的联系。尽管会面临一定的损失,但总比数据丢失造成的危害小得多。
③ 事后分析。采用数据库审计功能,对数据库访问日志进行分析,及时发现可疑操作和可疑的数据,及时利用数据库备份进行数据恢复。