没有合适的资源?快使用搜索试试~ 我知道了~
数据库应用技术:第12章 数据库安全管理.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 55 浏览量
2022-06-21
23:20:55
上传
评论
收藏 2.24MB DOC 举报
温馨提示
试读
26页
数据库应用技术:第12章 数据库安全管理.doc
资源推荐
资源详情
资源评论
第 12 章 数据库安全管理
本章主要介绍 SQL Server 2005 数据安全管理中的事务的概念、特性及类型;角色的
概念、种类及作用;以及权限的层次结构。
事务、权限和角色是 SQL Server 2005 数据库安全管理中的重要部分。
数据库的修改是以事务为单位进行的。一个事务就是一个操作序列,这些操作要么全
做,要么全不做,它是一个不可分割的工作单位。
权限是通过角色成员来获得的。角色就是一组具有相同权限的用户的集合。不同角色
中的成员有不同的权限。
12.1 事务
事务是作为单个逻辑工作单元执行的一系列操作。事务处理可以确保只有在事务性单
元内的所有操作都成功完成的情况下,才会永久更新面向数据的资源。通过将一组相关操
作组合为一个或者全部成功或者全部失败的单元,可以简化错误恢复并使应用程序更加可
靠。
例如,网上购物的一次交易,其付款过程至少包括以下数据库操作步骤。
① 更新客户所购商品的库存信息;
② 保存客户付款信息,可能包括与银行系统的交互;
③ 生成订单并且保存到数据库中;
④ 更新用户相关信息,例如购物数量等等。
正常情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也
成功地更新。但是,如果在这一系列过程中任何一个环节出了差错 (例如在更新商品库存
信息时发生异常、该顾客银行帐户存款不足等),都将导致交易失败。一旦交易失败,数
据库中所有信息都必须保持交易前的状态不变,比如最后一步更新用户信息时失败而导致
交易失败,那么必须保证这笔失败的交易不影响数据库原来的状态,即库存信息没有被更
新,用户也没有付款,订单也没有生成。否则,数据库的信息将会一片混乱而不可预测。
数据库事务正是用来保证这种情况下交易的平稳性和可预测性的技术。
12.1.1 事务特性
每一个事务都具有原子性、一致性、隔离性和持久性,也称为事务的 ACID 属性。
(1)原子性
事务必须是原子工作单元,对其数据的修改,或者全都执行,或者全都不执行。
(2)一致性
事务在完成时,必须使所有的数据都保持一致性状态。在相关数据库中,所有规则都
必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构
(如 B 树索引或双向链表)都必须是正确的。
(3)隔离性
由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。事务识别数据时数
据所处的状态,或者是另一并发事务修改它之前的状态,或者是第二个事务修改它之后的
状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,
并且重做一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
(4)持久性
事务完成之后,它对于系统的影响是永久性的,该修改即使出现系统故障也将一直保
持。
SQL 程序员要负责启动和结束事务,同时强制保持数据的逻辑一致性。程序员必须
定义数据修改的顺序,使数据相对于其组织的业务规则保持一致。程序员将这些修改语句
包括到一个事务中,使 SQL Server 2005 Database Engine 能够强制该事务的物理完整性。
数据库系统应提供一种机制,保证每个事务的物理完整性。数据库引擎提供:
锁定设备,使事务保持隔离。
记录设备,保证事务的持久性,即使服务器硬件、操作系统或数据库引擎实例自
身出现故障,该实例也可以在重新启动时使用事务日志,将所有未完成的事务自动地回滚
到系统出现故障的点。
事务管理特性,强制保持事务的原子性和一致性,事务启动之后,就必须成功完
成,否则数据库引擎实例将撤消该事务启动之后对数据所做的所有修改。
12.1.2 事务管理
应用程序主要通过指定事务启动和结束的时间来控制事务。可以使用 Transact-SQL
语句或数据库应用程序编程接口(API)函数来指定这些时间。系统还必须能够正确处理那
些在事务完成之前便终止事务的错误。
1. 事务类型
在 SQL Server 中有三种事务类型,分别是隐式事务、显式事务、自动提交事务,缺
省为自动提交。
(1)自动提交事务
自动提交事务是指对于用户发出的每条 Transact-SQL 语句,SQL Server 都会自动开
始一个 SQL Server 事务,并且在执行后自动进行提交操作来完成这个事务,也可以说在
这种事务模式下,一个 Transact-SQL 语句就是一个事务。
(2)显式事务
显式事务是指在自动提交模式下以 BEGIN TRANSACTION 开始一个 SQL Server 事务,
以 COMMIT 或 ROLLBACK 结束一个 SQL Server 事务,以 Commit 结束事务是把 SQL
Server 事务中的修改永久化,即使这时发生断电这样的故障。例如下面是 SQL Server 中的
一个显式事务的例子。
BEGIN TRANSACTION
UPDATE student SET SNAME=ꞌXIEꞌ WHERE SNO=ꞌS1ꞌ
第 12 章 数据库安全管理
INSERT INTO student VALUES (ꞌS9ꞌ, ꞌXIꞌ, ꞌFMꞌ,21)
COMMIT
(3)隐式事务
隐式事务是指在当前会话中用 SET IMPLICIT_TRANSACTIONS ON 命令设置的事务
类型,这时任何 DML 语句(DELETE、UPDATE、INSERT)都会开始一个事务,而事务的
结束也是用 COMMIT 或 ROLLBACK。
2. 启动和技术事务
使用 API 函数和 Transact-SQL 语句,可以在 SQL Server Database Engine 实例中将事
务作为显式、自动提交或隐式事务启动和结束。
(1)显式事务
显式事务就是可以显式地在其中定义事务的开始和结束的事务。
BEGIN TRANSACTION
标记显式连接事务的起始点。
COMMIT TRANSACTION 或 COMMIT WORK
如果没有遇到错误,可使用该语句成功地结束事务。该事务中的所有修改了的数据在
数据库中都将永久有效。事务占用的资源将被释放。
ROLLBACK TRANSACTION 或 ROLLBACK WORK
用来清除遇到错误的事务。该事务修改的所有数据都返回到事务开始时的状态。事务
占用的资源将被释放。
(2)自动提交模式
自动提交模式是 SQL Server Database Engine 的默认事务管理模式。每个 Transact-
SQL 语句在完成时,都被提交或回滚。如果一个语句成功地完成,则提交该语句;如果
遇到错误,则回滚该语句。只要没有显式事务或隐式事务覆盖自动提交模式,与数据库引
擎实例的连接就以此默认模式操作。
在使用 BEGIN TRANSACTION 语句启动显式事务或隐式事务模式设置为开启之前,
与数据库引擎实例的连接一直以自动提交模式操作。当提交或回滚显式事务,或当关闭隐
式事务模式时,连接将返回到自动提交模式。
编译和运行时错误
在自动提交模式下,有时看起来好像数据库引擎实例回滚了整个批处理而不是仅仅一
个 Transact-SQL 语句。当遇到的错误是编译错误而非运行时错误时,会发生这种情况。
编译错误会阻止数据库引擎生成执行计划,就使得批处理中的任何语句都不会执行。尽管
看起来好像是回滚了产生错误的语句之前的所有语句,但实际上该错误阻止了批处理中的
所有语句的执行。
【例 12.1】在以下示例中,由于发生编译错误,第三个批处理中的 INSERT 语句都没
有执行。但看起来好像是前两个 INSERT 语句没有执行便进行了回滚。
USE AdventureWorks
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3))
GO
·3·
INSERT INTO TestBatch VALUES (1, 'aaa')
INSERT INTO TestBatch VALUES (2, 'bbb')
INSERT INTO TestBatch VALUSE (3, 'ccc') -- 语法错误
GO
SELECT * FROM TestBatch -- 没有任何记录被插入并显示
GO
【例 12.2】在下面的示例中,第三个 INSERT 语句产生运行时重复键错误。由于前两
个 INSERT 语句成功地执行并且提交,因此它们在运行时错误之后被保留下来。
USE AdventureWorks
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3))
GO
INSERT INTO TestBatch VALUES (1, 'aaa')
INSERT INTO TestBatch VALUES (2, 'bbb')
INSERT INTO TestBatch VALUES (1, 'ccc') -- 发生重复键错误
GO
SELECT * FROM TestBatch -- 显示前两条记录
GO
【例 12.3】在下面的示例中,执行并提交了前两条 INSERT 语句,但第三条 INSERT
语句由于引用一个不存在的表而产生运行时错误,因此只有前两行仍然保留在 TestBatch
表中。
USE AdventureWorks
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3))
GO
INSERT INTO TestBatch VALUES (1, 'aaa')
INSERT INTO TestBatch VALUES (2, 'bbb')
INSERT INTO TestBch VALUES (3, 'ccc') -- 表名称出现错误
GO
SELECT * FROM TestBatch --显示前两条记录
GO
(3)隐式事务
当连接以隐式事务模式进行操作时,SQL Server Database Engine 实例将在提交或回滚
当前事务后自动启动新事务。无需描述事务的开始,只需提交或回滚每个事务。隐式事务
模式生成连续的事务链。
为连接将隐式事务模式设置为打开(SET IMPLICIT_TRANSACTIONS ON)之后,当数
据库引擎实例首次执行如表 12.1 所示的任何语句时,都会自动启动一个事务。
表12.1 能够启动事务的语句
ALTER TABLE INSERT
第 12 章 数据库安全管理
CREATE OPEN
DELETE REVOKE
DROP SELECT
FETCH TRUNCATE TABLE
GRANT UPDATE
在发出 COMMIT 或 ROLLBACK 语句之前,该事务将一直保持有效。在第一个事务
被提交或回滚之后,下次当连接执行以上任何语句时,数据库引擎实例都将自动启动一个
新事务。该实例将不断地生成隐性事务链,直到隐性事务模式关闭为止。
3. 事务处理过程中的错误
如果某个错误使事务无法成功完成,SQL Server 会自动回滚该事务,并释放该事务占
用的所有资源。如果客户端与数据库引擎实例的网络连接中断了,那么当网络向实例通知
该中断后,该连接的所有未完成事务均会被回滚。如果客户端应用程序失败或客户机崩溃
或重新启动,也会中断连接,而且当网络向数据库引擎实例通知该中断后,该实例会回滚
所有未完成的连接。如果客户端从该应用程序注销,所有未完成的事务也会被回滚。
12.2 SQL Server 的安全机制
SQL Server 2005 的安全性是指保护数据库中的各种数据,以防止因非法使用而造成
数据的泄密和破坏。SQL Server 2005 的安全管理机制包括身份验证(authentication)和授权
(authorization)两种类型。身份验证是指检验用户的身份标识,授权是指允许用户做些什么。
验证过程在用户登录操作系统和 SQL Server 2005 的时候出现,授权过程在用户试图访问
数据或执行命令时出现。
12.2.1 安全机制级别
SQL Server 2005 的安全机制分为四级,其中第一层和第二层属于验证过程,第三层
和第四层属于授权过程,如图 12.1 所示。
图12.1 SQL Server的安全机制
(1)操作系统的安全防线。用户需要一个有效的登录帐户,才能对网络系统进行访问。
·5·
剩余25页未读,继续阅读
资源评论
wxg520cxl
- 粉丝: 24
- 资源: 3万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功