1.12k likes | 1.23k Views
第六章 数据库的维护. 数据库的安全性控制 数据库的完整性控制 数据库的并发控制 数据库的恢复技术. 第一节 数据库的安全性控制. 一、安全性控制概述 二、数据库安全标准. 一、安全性控制概述. 数据库的安全性控制 : 是指对数据库实施某些安全性措施,防止因用户非法使用数据库造成数据泄露、更改或破坏。. 1.用户标识和认证(Identification and Authentication)
E N D
第六章 数据库的维护 • 数据库的安全性控制 • 数据库的完整性控制 • 数据库的并发控制 • 数据库的恢复技术
第一节 数据库的安全性控制 一、安全性控制概述 二、数据库安全标准
一、安全性控制概述 数据库的安全性控制:是指对数据库实施某些安全性措施,防止因用户非法使用数据库造成数据泄露、更改或破坏。
1.用户标识和认证(Identification and Authentication) • 由系统提供一定的方式让用户标识自己的名字或身份。系统内部记录着所有合法用户的标识,每次用户要求进入系统时,由系统将用户提供的身份标识与系统内部记录的合法用户标识进行核对,通过系统认证后才提供数据库的使用权。 • 用户标识和认证的方法有很多种,而且在一个系统中往往是多种方法并举,以获得更强的安全性。最常用的一种方法是使用用户名和口令。
2.存取控制(Access Control) • 存取控制,又称访问控制,是指控制用户对数据库中特定对象(如表、字段等)的存取权限,存取控制的目的是使用户只能进行经过授权的相关数据库操作。 • 在数据库系统中,为了保证用户只能访问他有权存取的数据,必须预先对每个用户定义存取权限。对于通过认证的用户(即合法用户),系统根据他的存取权限定义对他的各种操作请求进行控制,确保他只执行合法操作。
存取控制一般涉及三个元素间关系的设置,即主体(Subject)、客体(Object)和操作(Action),存取控制就是要控制主体对客体可以执行哪些操作。存取控制一般涉及三个元素间关系的设置,即主体(Subject)、客体(Object)和操作(Action),存取控制就是要控制主体对客体可以执行哪些操作。 • 主体:是系统中需要访问权限的实体,它可以是某个特定的人(如张三)、特定的组或角色(如财务部组或学生角色)、或应用程序、进程、服务等。 • 客体:是系统中被保护的实体,是受主体操纵的,包括数据库、基本表、索引、视图、表中的记录、字段等等。 • 操作:指主体可对客体执行哪些动作,包括读、插入、删除、修改、创建、撤销和授权等。
为主体分配对客体的操作权限称为授权。 • 衡量DBMS授权机制是否灵活的一个重要指标是授权粒度,即可以定义的数据对象的范围。授权定义中数据对象的粒度越细,即可以定义的数据对象的范围越小,授权子系统就越灵活。在关系数据库中,授权粒度较粗的对象包括数据库、表、视图等,粒度较细的对象包括列(属性)、行(记录)等。
在数据库系统中有两个主要的存取控制方式: (1)自主存取控制(Discretionary Access Control,简称DAC) 是一种根据主体或主体所属组的标识来限制其存取客体的存取控制方式。自主指具有某种存取权限的主体能够将该权限(直接或间接)传递给其它主体。 DAC的安全控制机制基于存取矩阵模型,该矩阵结构如表6-1所示。
表6-1 存取矩阵模型 矩阵顶行表示主体,矩阵的左列表示客体,而矩阵中的元素则是存/取操作权限(如读、写、删除和修改等),在这个模型中,指定主体(行)与客体(列)后可根据矩阵得到指定的操作权限。
(2)强制存取控制(Mandatory Access Control,简称MAC) 是一种根据分配给主体和客体的固定安全属性(用标记Label表示)来限制主体存取客体的存取控制方式。“强制”意指在强制存取控制中的主、客体标记由专门的安全管理员设置,任何主体均无权设置与授权。 在MAC中,DBMS为主体和客体的每个实例(值)指派一个敏感度标记(sensitivity label)。敏感度标记被分成若干级别,如绝密(Top Secret)、机密(Secret)、可信(Confidential)、公开(Public)等。
主体 客体 >= 密级(Label): 绝密 机密 可信 公开 许可证级别(Label): 绝密 机密 可信 公开 可读 = 可写 图6-1 主体存取客体的规则 • 仅当主体的许可证级别大于或等于客体的密级时,该 主体才能读取相应的客体。 • 仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。
3.视图机制 限制用户对某些数据的访问,不仅可以通过授权来实现,还可以通过定义用户的外模式来提供一定的安全保护功能。在关系数据库系统中,就是为不同的用户定义不同的视图,通过视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
4.审计 审计是一种监视措施,它是指数据库在运行中,DBMS跟踪用户对数据库的操作活动,跟踪的结果记录在专用的审计日志文件中。一旦发现有异常操作,有的DBMS会发出警报信息,多数DBMS虽无警报功能,但也可在事后根据记录进行分析。利用审计追踪的信息,能够重现导致数据库现有状况的一系列事件,以找到非法存取数据的人,追究责任。
审计追踪记录的内容一般包括: • 操作类型,如修改、查询等; • 实施操作的主机和用户标识; • 操作日期和时间; • 操作所涉及的对象,如表、视图、记录、属性等; • 数据的前映象和后映象。
5. 数据加密 对于高度敏感性数据,例如,口令、财务数据、国家机密,还可以采用数据加密技术,以密文形式存储和传输数据。这样即使数据被窃取,也只能看到一些无法辨认的二进制代码。
用户正常检索数据时,首先要提供密钥,由系统进行译码后,才能得到可识别的数据。用户正常检索数据时,首先要提供密钥,由系统进行译码后,才能得到可识别的数据。 • 所有提供加密机制的系统必然也提供相应的解密程序。这些解密程序本身也必须具有一定的安全性保护措施,否则数据加密的优点也就遗失殆尽了。 • 由于数据加密与解密操作会占用大量系统资源,降低系统性能,因此数据加密功能通常也作为可选特征,允许用户自由选择,只对高度机密的数据加密。
二、数据库安全标准 1.美国国防部TCSEC(TDI)标准 数据库系统安全分为四组(A、B、C、D)七个等级。 • D级标准:为无安全保护的系统。 • C1级标准:满足该级别的系统必须具有主体、客体及主、客体分离,身份标识与认证, 数据完整性,自主存取控制等功能。其核心是自主存取制。目前国内使用的系统大多符合此项标准。 • C2级标准:满足该级别的系统在满足C1级标准的全部功能下还具有审计功能。C2级安全的核心是审计。满足C2标准的数据库系统有Oracle 7及以上,Sybase公司的 Sybase SQL Server 11.0.6,微软公司的MS SQL Server 2000等。
B1级标准:满足该级别的系统在满足C2级标准全部功能下还具有强制存取控制功能。B1级安全的核心是强制存取控制。符合B1标准的数据库系统称之为安全数据库系统(Secure DB System)或可信数据库系统(Trusted DB System)。 • B2级标准:满足该级别的系统除满足B1级标准全部功能外,还具有隐蔽通道与数据库安全的形式化功能。目前国内外尚无符合此类标准的系统,其主要的难点是数据库安全的形式化表示困难。 • B3级标准:满足该标准的系统除满足B2级标准的全部功能外,还具有访问监控器功能。B3级安全的核心是访问监控器,目前国内外尚无符合此项标准的系统。 • A1级标准:满足该级别的系统除满足B3级标准的全部功能外,还具有较高的形式化要求。此项标准为安全的最高等级,应具有完善的形式化要求,目前尚无法实现,仅仅是一种理想化的等级。
2. 我国标准 我国标准分为5级,从第1级到第5级基本上与TCSEC标准的C级(Cl,C2)及B级(B1,B2,B3)一致,现将我国标准与TCSEC标准比较如表所示。
数据库管理系统级 数据库级 对象与语句级 三、 SQL Server 2000的安全控制机制 1. SQL Server安全体系结构 SQL Server安全体系结构由三级组成(如图6-2所示),从外向内分别是DBMS或数据库服务器级、数据库级、对象与语句级,并且内部级比外部级要求高。 图6-2 SQL Server安全体系结构
(1)DBMS或数据库服务器级安全:SQL Server通过设置登录账号来创建一个安全层,用户只有登录成功,才能与SQL Server建立连接。 (2)数据库级安全:SQL Server的特定数据库都有自己的用户和角色,该数据库只能由它的用户或角色访问,其他用户无权访问其数据。数据库系统可以通过创建和管理特定数据库的用户和角色来保证特定数据库不被非法用户访问。 (3)对象与语句级安全:这一级SQL Server实施权限管理。SQL Server完全支持SQL标准的DCL功能,Transact-SQL的DCL功能保证合法用户即使进入了数据库也不能有超越权限的数据存取操作,即合法用户必须在自己的权限范围内进行数据操作。
SQL Server的安全策略为: • 要访问数据库服务器必须先成为RDBMS的登录用户,登录用户可以分配到某个角色; • 要访问某个数据库,必须将某个登录用户或其所属的角色设置成该数据库的用户; • 成为某个数据库的用户后,如要访问该数据库下的某个数据库对象,或执行某个命令语句,还必须为该用户授予所要操作对象或语句的权限。
2. SQL Server 的安全验证模式 安全验证:是指数据库系统对用户访问数据库系统时所输入的账号和口令进行确认的过程。 • 安全验证的内容:包括确认用户的账号是否有效、能否访问系统、能访问系统中的哪些数据等等。 • 安全性验证模式:是指系统确认用户身份的方式。SQL Server 有两种安全验证模式,即Windows安全验证模式和混合安全认证模式。
(1)Windows安全验证模式 Windows安全验证模式是指SQL Server服务器通过使用Windows网络用户的安全性来控制用户对SQL Server服务器的登录访问。它允许一个网络用户登录到一个SQL Server服务器上时不必再提供一个单独的登录账号及口令,从而实现SQL Server服务器与Windows登录的安全集成。因此,也称这种模式为集成安全验证模式。 (2)混合安全验证模式 混合安全验证模式表示SQL Server接受Windows授权用户和SQL授权用户。在这种模式下,用户必须输入有效的SQL Server登录账号及口令,因为SQL Serve要用这两部分内容来验证用户的身份。
3. SQL Server 的安全管理 • 数据库的安全管理主要是对数据库用户的合法性和操作权限的管理。 • SQL Server的安全性管理包括以下几个方面:数据库系统登录用户管理、数据库用户管理、数据库系统角色管理以及数据库访问权限的管理。
(1)数据库系统登录用户管理 • 登录用户是服务器级用户,用户以登录用户身份登录进SQL Server系统。 • SQL Server在安装时,会自动创建一个登录用户sa,即系统管理员(System Administrator),该用户具有三级安全体系的所有权限,可以执行所有的操作,是超级用户。几乎所有的创建用户和授权的工作都是由sa来完成的,除非他(她)将授权工作转授给专门的权限管理人员。
使用企业管理器创建登录用户 Microsoft SQL Servers→SQL Servers组→要建立登录账户的服务器→安全性→登录。右击“登录”,选择“新建登录”,在“新建登录”对话框中输入登录用户名,选择身份验证模式,选择登录到SQL Server之后要连接的默认数据库。最后单击“确定”按钮 。 • 利用SQL的存储过程来创建登录用户 SP_ADDLOGIN @LOGINAME=’登录名’,@PASSWD=’口令’,@DEFDB=’默认数据库名’ 例如:SP_ADDLOGIN @LOGINAME=’user1’, @PASSWD =’123456’,@DEFDB=’pubs
(2) 数据库用户管理 • 数据库用户是指具有合法身份的数据库使用者。数据库用户的作用范围局限于其所属的数据库, • 数据库用户必须对应到登录用户。登录用户只有成为(对应到)数据库用户后才能访问数据库,数据库用户可以与登录用户同名,也可以不同名。
在企业管理器中创建新的数据库用户 在企业管理器的控制台中展开某个数据库,右击“用户”文件夹,选择“新建数据库用户”命令,在新建用户对话框的“登录名”下拉框中选择要创建的数据库用户对应的登录名,然后在“用户名”的文本框中键入数据库用户名。 • 利用SQL的存储过程来创建数据库用户 SP_GRANTDBACCESS @LOGINAME = '登录用户名' [,@NAME_IN_DB = '数据库用户名'] 例如:SP_GRANTDBACCESS @LOGINAME = 'user1', @NAME_IN_DB = 'user1'
(3)数据库系统角色管理 具有相同权限的一组用户称为角色。数据库系统角色管理包括服务器角色和数据库角色。 ① 服务器角色 • SQL Server在安装时,会自动创建一些服务器角色,其权限在系统安装好后就固定了,所以又称为固定服务器角色。 • 固定服务器角色是指派给服务器级用户即登录用户的。它是指在登录时授予该登录账号对当前服务器范围内的权限。这类角色可以在服务器上进行相应的管理操作,完全独立于某个具体的数据库。
固定服务器角色包括:sysadmin(系统管理)、securityadmin(安全管理)、serveradmin(服务器管理)、setupadmin(启动管理)、processadmin(进程管理)、diskadmin(磁盘管理)、dbcreator(数据库创建)、bulkadmin(备份管理)。各角色的具体权限请参考SQL Server技术资料。 • 可以使用SQL Server企业管理器将登录用户添加到某一指定的固定服务器角色作为其成员。
② 数据库角色 • 在一个服务器上可以创建多个数据库。数据库角色对应于单个数据库。数据库的角色分为固定数据库角色和用户定义的数据库角色。 • 固定数据库角色:是指SQL Server 为每个数据库提供的固定角色。 • 用户定义的数据库角色:有两种类型 • 标准角色(Standard Role):用于正常的用户管理,它可以包括成员。 • 应用程序角色(Application Role):是一种特殊角色,需要指定口令,是一种安全机制。
(4) SQL Server权限管理 SQL Server 使用权限来加强系统的安全性,通常权限可以分为三种类型:对象权限、语句权限和隐含权限。 ① 对象权限 • 对象权限是用于控制用户对数据库对象执行某些操作的权限。数据库对象通常包括表、视图、存储过程。 • 对象权限是针对数据库对象设置的,它由数据库对象所有者授予、禁止或撤消。 • 对象权限适用的数据库对象和操作权限在表6-4中列出。
② 语句权限 • 语句权限是用于控制数据库操作或创建数据库中的对象操作的权限。 • 语句权限用于语句本身,它只能由sa或dbo授予、禁止或撤消。 • 语句权限的授予对象一般为数据库角色或数据库用户。 • 语句权限适用的 Transact-SQL语句和功能如表6-5所示。
③ 隐含权限 • 隐含权限指系统预定义而不需要授权就有的权限,包括固定服务器角色成员、固定数据库角色成员、数据库所有者(dbo)和数据库对象所有者(dboo)所拥有的权限。 • 例如,sysadmin固定服务器角色成员可以在服务器范围内做任何操作,dbo可以对数据库做任何操作,dboo可以对其拥有的数据库对象做任何操作,对他不需要明确的赋予权限。
利用企业管理器为用户或角色授予、撤消或者禁止其对数据库对象的权限 展开数据库名(例如pubs),单击“用户”或“角色”。在右边窗口中找到要选择的用户或角色,右击该角色,在弹出菜单中选择“属性”命令后,弹出数据库角色属性对话框。在该对话框中,单击“权限”按钮,则弹出数据库角色权限属性对话框。之后通过单击相应的复选框即可为角色授予、撤消或者禁止其对数据库对象的权限。
通过Transact-SQL语句进行对象和语句的授权、收回权限和拒绝权限 ① 对象和语句的授权 给对象授权:GRANT <对象操作权限> ON <数据库对象> TO <数据库用户名或角色名> 给语句授权:GRANT <语句名> TO <数据库用户名或角色名> ② 收回用户对象和语句的权限 收回对象的权限:REVOKE <对象操作权限> ON <数据库对象> FROM <数据库用户名或角色名> 收回语句的权限:REVOKE <语句名> FROM <数据库用户名或角色名>
拒绝权限:包括删除以前授予用户、组或角色的权限,停用从其他角色继承的权限,确保用户、组或角色将来不继承更高级别的组或角色的权限。拒绝权限:包括删除以前授予用户、组或角色的权限,停用从其他角色继承的权限,确保用户、组或角色将来不继承更高级别的组或角色的权限。 • 收回权限是删除已授予的权限,并不妨碍用户、组或角色从更高级别继承已授予的权限。
第二节 数据库的完整性控制 一、完整性控制概述 二、 SQL Server的完整性控制机制
一、完整性控制概述 1. 完整性与完整性控制 • 数据库中的数据完整性是指数据库中数据的正确性、有效性和相容性。 • 正确性:是指数据的真实合法性; • 有效性:是指数据的值是否属于所定义的有效范围; • 相容性:是指表示同一事实的两个或多个数据必须一致,不一致就是不相容。例如,学生的成绩只能是大于或等于0的数字,学号必须惟一,等等。
数据库的完整性控制:是指数据库系统要提供某些控制措施保证数据库中的数据不破坏数据完整性。数据库的完整性控制:是指数据库系统要提供某些控制措施保证数据库中的数据不破坏数据完整性。 • 完整性受到破坏的常见原因有用户误操作输入错误的数据,各种硬软件故障,并发更新数据,人为破坏等。
2. 完整性约束条件与完整性控制机制 • 为维护数据库的完整性,DBMS必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件,这些加在数据库数据之上的语义约束条件称为数据库的“完整性约束条件”,也称“完整性约束规则”、“完整性规则”或简称为“完整性约束”,它们作为模式的一部分存人数据库中。 • 而DBMS中保障数据满足完整性条件的机制称为完整性控制机制。
DBMS的完整性控制机制由以下几部分功能组成(“完成这些功能的DBMS子系统称为完整性控制子系统”):DBMS的完整性控制机制由以下几部分功能组成(“完成这些功能的DBMS子系统称为完整性控制子系统”): • 定义功能,即提供定义完整性约束条件的功能。 • 检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。 • 违约反应,如果发现用户的操作请求使数据违背了完整性约束条件,则执行一定的动作来保证数据的完整性。
3. 完整性检查的时机 • 检查是否违背完整性约束条件的时机通常是在一条语句执行完后立即检查,称这类约束为立即执行约束(Immediate Constraints)。 • 有时完整性检查需要延迟到整个事务执行结束后再进行,检查正确方可提交,称这类约束为延迟执行约束(Deferred Constraints)。 • 例如银行数据库中“借贷总金额应平衡”的约束就应该是延迟执行的约束,从账号A转一笔钱到账号B为一个事务,从账号A转出去钱后账就不平了,必须等转入账号B后账才能重新平衡,这时才能进行完整性检查。如果用户操作请求违反延迟执行的约束,系统将拒绝整个事务,把数据库恢复到该事务执行前的状态。
4. 完整性约束条件分类 • 完整性约束条件可以从其作用对象的粒度和状态两个角度进行分类。 • 关系数据库系统中,完整性约束条件的作用对象主要有列级、元组级和关系级三种粒度。 • 完整性约束条件涉及的这三类对象,其状态可以是静态的,也可以是动态的。 • 静态约束:是指数据库每一确定状态时的数据对象所应满足的约束条件。它是反映数据库状态合理性的约束。例如,一个教务管理数据库的任何一个状态都必须满足条件“0≤学生成绩≤100”。 • 动态约束:是指数据库从一种状态转变为另一种状态时,新旧值之间所应满足的约束条件。它是反映数据库状态变迁的约束。例如,更新职工表时,工资不能负增长。
综合上述两个方面,完整性约束条件分为以下六类。综合上述两个方面,完整性约束条件分为以下六类。 (1)静态列级约束 静态列级约束是施加于单列数据上的约束,是对一个列的取值域的说明,包括以下几方面: • 对数据类型的约束,包括数据的类型、长度、单位、精度等。 • 对数据格式的约束。例如,规定工号的格式为前2位表示入厂年份,后4位为顺序编号。 • 对取值范围或取值集合的约束。例如,规定成绩的取值范围为0~100。 • 对空值的约束。空值表示未定义或未知的值,它与零值和空格不同。有的列允许空值,有的则不允许。 • 其他约束。例如,关于列的排序说明等。
(2)静态元组约束 静态元组约束是施加于单个关系的元组上的约束,它规定组成一个元组的各个列之间的约束关系。 (3)静态关系约束 静态关系约束是一个关系的各个元组之间或者若干关系之间存在的各种联系或约束。常见的静态关系约束有以下四种: • 实体完整性约束。实体完整性约束是指构成关系主键的属性或属性集合不能为空。 • 参照完整性约束。参照完整性约束维护关系间的参照完整性不被破坏。 • 函数依赖约束。函数依赖约束维护用户规定的函数依赖。例如,如果用户定义了下列函数依赖:Name→Address,则一个人不允许出现两个地址。 • 统计约束。统计约束指一个关系的某属性的值与该关系的多个元组的统计值之间的关系。
(4)动态列级约束 动态列级约束是指修改列定义或列值时应满足的约束条件。 (5)动态元组约束 动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。 例如,职工工资调资调整时,新工资>=原来工资+工龄*1.2。 (6)动态关系约束 动态关系约束是指加在关系变化前后状态上的限制条件。动态关系约束实现起来开销较大。