1、2019/9/12,数据库系统原理及应用,机械工业出版社,第8章 数据库保护技术,8.1 数据库的安全性及SQL Server的安全管理 8.2 数据库完整性及SQL Server的完整性控制 8.3 数据库并发控制及SQL Server并发控制机制 8.4 数据库恢复技术与SQL Server数据恢复机制,8.1 数据库安全性及SQL Server的安全管理,数据库的安全性是指保护数据库,以防止不合法的使用造成的数据泄密、更改或破坏。 8.1.1 数据库安全性控制的一般方法,用户标识和鉴别 存取控制 操作系统安全保护 密码存储,1. 用户标识与鉴别,(1) 用输入用户名(用户标识号)来标明用
2、户身份。 系统内部记录着所有合法用户的标识。系统对输入的用户名与合法用户名对照,鉴别此用户是否为合法用户。 (2) 通过回答口令标识用户身份。 系统常常要求用户输入口令,只有口令正确才能进入系统。为保密起见,口令由用户自己定义并可以随时变更。为防止口令被人窃取,用户在终端上输入口令时,不把口令的内容显示在屏幕上,而用字符“*”替代其内容。 (3) 通过回答对随机数的运算结果表明用户身份。 系统提供一个随机数,用户根据预先约定的计算过程或计算函数进行计算,并将计算结果输给到计算机。系统根据用户计算结果判定用户是否合法。,2. 存取控制,(1) 存取机制的构成。 1) 定义用户权限,并将用户权限登
3、记到数据字典中。 2) 当用户提出操作请求时,系统进行权限检查,拒绝用户的非法操作。 (2) 存取机制的类别。 1) 自主存取控制(DAC)。用户对于不同的对象有不同的存取权限;不同的用户对同一对象的存取权限也各不相同;用户可将自己拥有的存取权限转授给其他用户。 2) 强制存取控制(MAC)。每一个数据对象被标以一定的密级;每一个用户也被授予某一个级别的许可证;对于任意一个对象,只有具有合法许可证的用户才可以存取。,3. 自主存取控制方法,(1) 关系中的用户权限。用户权限主要包括数据对象和操作类型两个要素。定义用户的存取权限称为授权,通过授权规定用户可以对哪些数据进行什么样的操作。 (2)
4、SQL的数据控制功能。(GRANT语句(授权)和REVOKE语句(收权))。 1) 数据对象的创建者自动获得对于该数据对象的所有操作权限。2) 获得数据操作权的用户可以通过GRANT语句把权限转授给其他用户。 (3) 授权机制的性能。 1) 权限定义中数据对象范围越小授权系统就越灵活。授权粒度越细,授权子系统就越灵活,但系统定义与检查权限的开销也会增大。 2) 权限定义中能够谓词的授权系统比较灵活。 3) 权限定义中能够谓词、且存取谓词中能够引用系统变量的授权系统更加灵活。 (4) 自主存取控制的不足之处。系统对权限的授予状况无法进行有效的控制可能造成数据的无意泄露。,4. 强制存取控制方法,
5、(1) 主体、客体及敏感度标记。主体是系统中的活动实体,它包括用户和进程; 客体是系统中的被动实体,包括基表、视图等; DBMS为主体和客体的每个实例都设置一个敏感度标记,如绝密、机密、可信、公开;主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。 (2) 主体对客体的存取规则。 1) 仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。 2) 仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。(3) 由DAC和MAC共同构成的安全机制。系统在安全检察时,首先进行自主存取控制检察,然后进行强制存取控制检察,两者都通过后,用户才能执行其数据存取操作。,5.
6、视图、审计和数据加密机制,为不同的用户定义不同的视图,通过视图把数据对象限制在一定范围内,把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。 审计功能就是把用户对数据库的所有操作自动记录下来放入审计日志中,一旦发生数据被非法存取,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。 加密是根据一定的算法将原始数据(明文,Plain text)变换为不可直接识别的格式(密文,Cipher text),从而使得不知道解密算法的人无法获得数据的内容。 加密方法主要有两种: 1) 替换方法。使用密钥将明文中的每一个字符转换
7、为密文中的字符。 2) 置换方法。仅将明文的字符按不同的顺序重新排列。,8.1.2 SQL Server的安全体系结构,1. SQL Server的安全体系结构 (1) Windows NT操作系统的安全防线:网络管理员负责建立用户组,设置帐号并注册,同时决定不同的用户对不同系统资源的访问级别。 (2) SQL Server的运行安全防线: 通过另一种帐号设置来创建附加安全层。 (3) SQL Server数据库的安全防线: 特定数据库都有自己的用户和角色,该数据库只能由它的用户或角色访问,其他用户无权访问其数据。 (4) SQL Server数据库对象的安全防线: 对权限进行管理,TSQL的
8、DCL功能保证合法用户既使进入了数据库也不能有超越权限的数据存取操作,即合法用户必须在自己的权限范围内进行数据操作。,2. SQL Server的安全认证模式,(1) Windows(S)安全认证模式 通过使用Windows网络用户的安全性来控制用户对SQL服务器的登录访问。它允许一个网络用户登录到一个SQL服务器上时不必再提供一个单独的登录帐号及口令。 (2) 混合安全认证模式 如果用户网络协议支持可信任连接,则可使用Windows(S)安全模式;如果用户网络协议不支持可信任连接,则在Windows(S)安全认证模式下会登录失败,SQL Server安全认证模式将有效。SQL Server安
9、全认证模式要求用户必须输入有效的SQL Server登录帐号及口令。,3. 设置SQL Server的安全认证模式,1) 在企业管理器中扩展开SQL服务器组,用鼠标右键击需要设置的SQL服务器,在弹出的菜单中选择“属性”项. 2) 在弹出的SQL服务器属性对话框中,选择“安全性”选项卡。 3) 在安全性选项卡中的安全性栏选择安全认证模式。,8.1.3 SQL Server的用户和角色管理,1. 登录的管理 登录(亦称Login用户)通过帐号和口令访问SQL Server的数据库。 (1) 查看安全性文件夹的内容 进入企业管理器,打开指定的SQL服务器组和SQL服务器,并选择安全性文件夹的系列操
10、作后,就会出现安全性文件夹。,(2) 创建一个登录用户,1) 用右键击登录文件夹,在弹出单中选择“新建登录” ,出现登录属性对话框。 2) 选择常规选项卡,输入用户的一般特征。 3) 选择服务器角色选项卡,确定用户所属服务器角色。 4) 选择数据库访问选项卡,确定用户能访问的数据库和所属的数据库角色。,2. 数据库用户的管理,(1) dbo用户 dbo用户即数据库拥有者或数据库创建者,dbo在其所拥有的数据库中拥有所有的操作权限。dbo的身份可被重新分配给另一个用户,系统管理员Sa可以作为他所管理系统的任何数据库的dbo用户。 (2) guest用户 如果guest用户在数据库存在,则允许任意
11、一个登录用户作为guest用户访问数据库,其中包括那些不是数据库用户的SQL服务器用户。除系统数据库master和临时数据库tempdb的guest用户不能被删除外,其他数据库都可以将自己guest用户删除,以防止非数据库用户的登录用户对数据库进行访问。,(3) 创建新的数据库用户,1) 在企业管理器中用右击用户文件夹,在弹出单中选择“新建数据库用户” 。 2) 在对话框的登录名栏中选择SQL服务器登录用户名,在用户名栏中输入数据库用户名。在数据库角色栏中选择该数据库用户参加的角色。,3. 数据库角色的管理 (1) 在数据库角色中增加或移去用户,1) 展开一个SQL服务器、数据库文件夹,选中角
12、色文件夹。 2) 用选中要加入的角色,右击它,在弹出单中选择“属性” 。 3) 单击“添加”按钮后,出现选择该数据库用户的对话框,选择要加入角色的用户,单击“确定” 。 4) 要移走一个用户,在用户栏中选中它,后单击“删除” 。,(2) 创建新的数据库角色,1) 打开SQL服务器组、服务器、数据库文件夹和特定的数据库文件夹。 2) 选中角色子文件夹,右击任意角色,在弹出单中选择“新建数据库角色” 。 3) 输入新角色名;在用户栏增加或移去角色的用户;确定数据库角色的类型。,8.1.4 SQL Server的权限管理 1. SQL Server权限种类:对象权限和语句权限,2. 对象权限的管理,
13、1)选中一个数据库对象。击鼠标右键,使之出现弹出菜单。2) 选择“全部任务”中的“管理权限”项。随后就会出现对象权限对话框。3) 选择“列出全部用户/用户定义的数据库角色”项,或选择“仅列出对此对象具有权限的用户/用户定义的数据库角色”项。4) 在权限表中对各用户或角色的各种对象操作权授予或撤消。,3. 语句权限的管理,1) 用鼠标右键击指定的数据库文件夹。出现数据库属性对话框。 2)选择“权限”选项卡,单击表中的各复选小方块可分别对各用户或角色授予、撤消和废除数据库的语句操作权限。,8.2.1 完整性约束条件及完整性控制,数据完整性约束可以分为: 表级约束,若干元组间、关系中以及关系之间联系
14、的约束; 元组级约束,元组中的字段组和字段间联系的约束; 属性级约束,针对列的类型、取值范围、精度、排序等而制定的约束条件。 完整性约束分为: 静态约束,数据库每一确定状态时的数据对象所应满足的约束条件; 动态约束,数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,8.2 数据库完整性及SQL Server的完整性控制,1. 完整性控制机制的功能及执行约束,(1) 完整性控制机制应具有的功能。 1) 定义完整性功能,提供定义完整性约束条件的机制。 2) 检查完整性功能,检查用户发出的操作请求,看其是否违背了完整性约束条件。 3) 控制完整性功能,监视数据操作的整个过程,如果发
15、现有违背了完整性约束条件的情况,则采取一定的动作来保证数据的完整性。 (2) 立即执行约束和延迟执行约束。 有关数据操作语句执行完后立即进行完整性检查为立即执行约束;在整个事务执行结束后再进行完整性检查为延迟执行约束。,2. 实现参照完整性要考虑的几个问题,(1) 外码能够接受空值的问题。 (2) 在被参照关系中删除元组的问题。 1) 级联删除(CASCADES)。将参照关系中所有外码值与被参照关系中要删除的元组主码值相同的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。 2) 受限删除(RESTRICTED)。仅当参照关系中没有任何元组的外码值与被参照
16、关系中要删除元组的主码值相同时,系统才执行删除操作,否则拒绝此删除操作。 3) 置空值删除(NULLIFIES)。删除被参照关系的元组,并将参照关系中相应元组的外码值置空值。,(3) 在参照关系中插入元组时的问题。 1) 受限插入。仅当被参照关系存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。 2) 递归插入。该策略首先在被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。 (4) 修改关系的主码问题。 1) 不允许修改主码。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。 2)
17、允许修改主码。允许修改关系主码,但必须保证主码的惟一性和非空,否则拒绝修改。 (5) 修改表是被参照关系的问题。 1) 级联修改。如果要修改被参照关系中的某个元组的主码值,则参照关系中相应的外码值也作相应的修改。 2) 拒绝修改。如果参照关系中,有外码值与被参照关系中要修改的主码值相同的元组,则拒绝修改。3) 置空值修改。修改被参照关系的元组,并将参照关系中相应元组的外码值置空值。,8.2.2 SQL Server的数据库完整性及实现方法,1. SQL Server的数据完整性的种类 (1) 域完整性。域完整性为列级和元组级完整性。它为列或列组指定一个有效的数据集,并确定该列是否允许为空。 (
18、2) 实体完整性。实体完整性为表级完整性,它要求表中所有的元组都应该有一个惟一的标识符,这个标识符就是平常所说的主码。 (3) 参照完整性。参照完整性是表级完整性,它维护参照表中的外码与被参照表中主码的相容关系。如果在被参照表中某一元组被外码参照,那么这一行既不能被删除,也不能更改其主码。,2. SQL Server数据完整性的两种方式,(1) 声明数据完整性。 声明数据完整性通过在对象定义中定义、系统本身自动强制来实现。声明数据完整性包括各种约束、缺省和规则。 (2) 过程数据完整性。 过程数据完整性通过使用脚本语言 。,SQL Server 2000数据完整性约束包括: (1)主键完整性约
19、束(primary):保证列值的惟一性,且不允许为NULL。 (2)惟一完整性约束(unique):保证列值的惟一性。 (3)外键完整性约束(foreign):保证列值只能取参照表主键或惟一键的值或NULL。 (4)非空完整性约束(not null):保证列的值非NULL。 (5)缺省完整性约束(default):指定列的默认值。 (6)检查完整性约束(check):指定列取值的范围。,例 创建表S、C、SC,脚本:,例 创建“零件供应”表(p110习题四14题),脚本:,8.3 数据库并发控制及SQL Server的并发控制机制,数据库的并发控制就是控制数据库,防止多用户并发使用数据库时造成
20、数据错误和程序运行错误,保证数据的完整性。 8.3.1 事务及并发控制的基本概念 1. 事务的概念 事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。 在SQL语言中,定义事务的语句有三条: BEGIN TRANSACTION; COMMIT; ROLLBACK;,1. 原子性,如果事务成功,SQL Server 2000确保在事务中,所有的数据修改做为一个整体。如果事务没有成功,就不会有任何修改发生。也就是说,SQL Server 2000能确保事务的原子性。事务要想取得成功,事务中的每一个操作(语句)都必须成功。如果其中的任何一个操作失败了,则整个事
21、务就会失败,而且自事务开始所作的任何修改都会被撤销。,2. 一致性,SQL Server 2000能保证事务的一致性。一致性意味着全部数据都保持在一致的状态。在一个事务开始之前,数据库处于一致的状态。当事务结束后,不管它是成功还是失败的,数据库还应该处于一致的状态。,3. 隔离性,如果有两个或者多个事务,这些事务必须按照一定的顺序先后执行,而不能在执行一个事务的同时,又穿插执行另外的一个事务,也就是说,多事务并发执行时,应保证执行的结果是正确的,如同单用户环境一样。这可以通过锁来实现。,4. 永久性,事务一旦完成,它对数据库所进行的修改,将被永久保存,即使以后系统发生故障,也应该保留这个事务执
22、行的痕迹。,2. 事务并发操作可能产生的数据不一致问题,T1,(a)丢失数据 (b)不可重复读 (c)读“脏”数据,8.3.2 封锁及封锁协议,封锁是使事务对它要操作的数据有一定的控制能力。封锁具有3个环节:一个环节是申请加锁,即事务在操作前要对它将使用的数据提出加锁请求;第二个环节是获得锁,即当条件成熟时,系统允许事务对数据加锁,从而事务获得数据的控制权;第三个环节是释放锁,即完成操作后事务放弃数据的控制权。,1. 锁的类型,(1) 排它锁(Exclusive Locks,简称X锁)。 排它锁也称为独占锁或写锁。一旦事务T对数据对象A加上排它锁(X锁),则只允许T读取和修改A,其他任何事务既
23、不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。 (2) 共享锁(Share Locks,简称S锁)。 共享锁又称读锁。如果事务T对数据对象A加上共享锁(S锁),其他事务只能再对A加S锁,不能加X锁,直到事务T释放A上的S锁为止。,锁的相容矩阵,2. 封锁协议,(1) 一级封锁协议。 一级封锁协议是事务T在修改数据之前必须先对其加X锁,直到事务结束才释放。 (2) 二级封锁协议。 二级封锁协议是:事务T对要修改数据必须先加X锁,直到事务结束才释放X锁;对要读取的数据必须先加S锁,读完后即可释放S锁。 (3) 三级封锁协议。 三级封锁协议是事务T在读取数据之前必须先对其加S
24、锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所有锁。,(a) 没有丢失修改 (b) 可重复读 (c) 不读“脏”数据,用封锁机制解决三种数据不一致性的例子,8.3.3 封锁出现的问题及解决方法,1. 活锁和死锁 (1) 活锁。 在多个事务请求对同一数据封锁时,总是使某一用户等待的情况称为活锁。解决活锁的方法是采用先来先服务的方法,即对要求封锁数据的事务排队,使前面的事务先获得数据的封锁权。 (2) 死锁。 多事务交错等待的僵持局面称为死锁。解决死锁有两类方法:一是采用一定措施来预防死锁的发生;二是采用一定手段定期诊断系统中有无死锁,若有则解除之。防死锁通常有两种方法: 1) 一次
25、封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则该事务不能继续执行。 2) 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。,2. 并发调度的可串行性和3. 两段锁协议,多个事务并发执行的结果与按串行执行的结果相同,这种调度策略称为可串行化(Serializable)的调度,反之称为不可串行化调度。 两段锁协议 1) 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。 2) 在释放一个封锁之后,事务不再申请并获得对该数据的封锁。,8.4 数据库恢复技术与SQL Server的数据恢复机制 8.4.1 故障的种类,1. 事务内部的故障 事务内部
26、的故障有的是可以通过事务程序本身发现的,但是更多的则是非预期的,它们不能由事务处理程序处理。例如运算溢出、并发事务发生死锁而被选中撤消该事务、违反了某些完整性限制等。 2. 系统故障 系统故障是指造成系统停止运转的任何事件,从而使得系统必须重新启动。 3. 介质故障 介质故障指外存故障,例如磁盘损坏、磁头碰撞,瞬时磁场干扰等。 4. 计算机病毒 计算机病毒是一种人为的故障或破坏。 5. 用户操作错误 由于用户有意或无意的操作也可能删除数据库中的有用的数据或加入错误的数据,这同样会造成一些潜在的故障。,8.4.2 数据恢复的实现技术,1. 数据转储 (1) 静态转储和动态转储。 (2) 海量转储
27、和增量转储。 2. 登记日志文件(Logging) (1) 日志文件的格式和内容。 日志文件是用来记录对数据库的更新操作的文件。 (2) 日志文件的作用。 日志文件的主要用于数据库恢复。当数据库文件毁坏后,可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,再利用日志文件,把已完成的事务进行重做处理。,8.4.3 SQL Server 的数据备份和恢复机制,1. SQL Server的备份形式和操作方式 (1) 三种备份形式。 1) 完全备份:海量备份,将数据库完全复制到备份文件中。 2) 事务日志备份:将备份发生在数据库上的事务。 3) 增量备份:备份最近一次完全备份以后数据库发生变化的
28、数据。 (2) 数据库进行备份和恢复操作的方式。 1) 静态的备份和恢复方式。在进行数据备份或恢复操作时,SQL服务器不接受任何应用程序的访问请求,只执行备份或恢复操作。 2) 动态的备份和恢复方式。在进行数据备份或恢复操作时,SQL服务器同时接受应用程序的访问请求。,2. SQL Server的数据备份或恢复策略,(1) 使用完全备份的策略:将最近一次的备份恢复。 (2) 在完全备份基础上使用事务日志备份的策略。 备份步骤是: 1) 定期进行完全备份,例如一天一次或两天一次。 2) 更频繁地进行事务日志备份,如一小时一次或两小时一次。 恢复步骤是: 1) 用最近一次完全备份恢复数据库。 2)
29、 用最近一次完全备份之后创建的所有事务日志备份,按顺序恢复完全备份之后发生在数据库上的所有操作。 (3) 同时使用三种备份的策略:在同时使用数据库完全备份和事务日志备份的基础上,再以增量备份作为补充。,3. SQL Server的数据备份方法,(1) 创建备份设备 管理文件夹中找到备份文件夹。右键击该文件夹,在弹出单中选择“新建备份设备”项,在备份设备属性对话框中:输入备份设备的逻辑名字;确定备份设备的文件名;击“确定”按钮,(2) 备份数据库,1)右击要备份的数据库;在弹出单上选择“全部任务”中的“备份数据库”项。 2) 在常规卡中:选要备份的数据库;取一个便于识别的名称;选择完全备份、差异
30、备份、事务日志、文件或文件组之一;确定备份文件的存放位置;选择将备份保存到备份设备时的覆盖模式;设置数据库备份计划选中调度复选框,击文本框右边的“”按钮,就会出现编辑备份计划对话框。,4) 设置选项页面内容,设置“完成后验证备份”复选框:设置“检查媒体集名称和备份集到期时间”复选框。设置“初始化并标识媒体”复选框。,4. SQL Server的数据恢复方法,(1)用鼠标右键击要进行数据恢复的数据库。在弹出单中选择“全部任务”中的“还原数据库”项。(2) 恢复数据库:选择还原栏中的“数据库” ;选择要恢复的数据库名和要还原的第一个备份文件;在备份设备表中,选择要使用的备份文件。,2) 恢复文件、文件组或从备份设备中恢复,选择要恢复的数据库名;要进行部分恢复或有限制的恢复,可选中“选择备份集中的子集”复选框,单击右边的“选择条件”按钮,在弹出框中设置选择条件;在备份设备表中选择使用的备份设备。 击右边的“选择设备”按钮,在弹出框中选择备份设备;设置还原类型单选框。如果选择了还原备份集的类型,还应选择恢复方式。,本章结束谢谢,