版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE 25第12章 数据库安全管理第12章 数据库安全管理本章主要介绍SQL Server 2005数据安全管理中的事务的概念、特性及类型;角色的概念、种类及作用;以及权限的层次结构。事务、权限和角色是SQL Server 2005数据库安全管理中的重要部分。数据库的修改是以事务为单位进行的。一个事务就是一个操作序列,这些操作要么全做,要么全不做,它是一个不可分割的工作单位。权限是通过角色成员来获得的。角色就是一组具有相同权限的用户的集合。不同角色中的成员有不同的权限。12.1 事务事务是作为单个逻辑工作单元执行的一系列操作。事务处理可以确保只有在事务性单元内的所有操作都成功完成的情况下,
2、才会永久更新面向数据的资源。通过将一组相关操作组合为一个或者全部成功或者全部失败的单元,可以简化错误恢复并使 HYPERLINK /view/330120.htm t _blank 应用程序更加可靠。例如,网上购物的一次交易,其付款过程至少包括以下数据库操作步骤。更新客户所购商品的库存信息;保存客户付款信息,可能包括与银行系统的交互;生成订单并且保存到数据库中;更新用户相关信息,例如购物数量等等。正常情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果在这一系列过程中任何一个环节出了差错(例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等),都将
3、导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,比如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库原来的状态,即库存信息没有被更新,用户也没有付款,订单也没有生成。否则,数据库的信息将会一片混乱而不可预测。数据库事务正是用来保证这种情况下交易的平稳性和可预测性的技术。12.1.1 事务特性每一个事务都具有原子性、一致性、隔离性和持久性,也称为事务的ACID属性。(1)原子性事务必须是原子工作单元,对其数据的修改,或者全都执行,或者全都不执行。(2)一致性事务在完成时,必须使所有的数据都保持一致性状态。在相关数据库中,所有规则都必须应用于
4、事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如B树索引或双向链表)都必须是正确的。(3)隔离性由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。事务识别数据时数据所处的状态,或者是另一并发事务修改它之前的状态,或者是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重做一系列事务,以使数据结束时的状态与原始事务执行的状态相同。(4)持久性事务完成之后,它对于系统的影响是永久性的,该修改即使出现系统故障也将一直保持。SQL程序员要负责启动和结束事务,同时强制保持数据的逻辑一致性。程序员必须定义数据修改的顺序,使
5、数据相对于其组织的业务规则保持一致。程序员将这些修改语句包括到一个事务中,使SQL Server 2005 Database Engine能够强制该事务的物理完整性。数据库系统应提供一种机制,保证每个事务的物理完整性。数据库引擎提供:锁定设备,使事务保持隔离。记录设备,保证事务的持久性,即使服务器硬件、操作系统或数据库引擎实例自身出现故障,该实例也可以在重新启动时使用事务日志,将所有未完成的事务自动地回滚到系统出现故障的点。事务管理特性,强制保持事务的原子性和一致性,事务启动之后,就必须成功完成,否则数据库引擎实例将撤消该事务启动之后对数据所做的所有修改。12.1.2 事务管理应用程序主要通过
6、指定事务启动和结束的时间来控制事务。可以使用Transact-SQL语句或数据库应用程序编程接口(API)函数来指定这些时间。系统还必须能够正确处理那些在事务完成之前便终止事务的错误。1. 事务类型在SQL Server中有三种事务类型,分别是隐式事务、显式事务、自动提交事务,缺省为自动提交。(1)自动提交事务自动提交事务是指对于用户发出的每条Transact-SQL语句,SQL Server都会自动开始一个SQL Server事务,并且在执行后自动进行提交操作来完成这个事务,也可以说在这种事务模式下,一个Transact-SQL语句就是一个事务。(2)显式事务显式事务是指在自动提交模式下以B
7、EGIN TRANSACTION开始一个SQL Server事务,以COMMIT或ROLLBACK结束一个SQL Server事务,以Commit结束事务是把SQL Server事务中的修改永久化,即使这时发生断电这样的故障。例如下面是SQL Server中的一个显式事务的例子。BEGIN TRANSACTIONUPDATE student SET SNAME=XIE WHERE SNO=S1INSERT INTO student VALUES (S9, XI, FM,21)COMMIT(3)隐式事务隐式事务是指在当前会话中用SET IMPLICIT_TRANSACTIONS ON命令设置的事
8、务类型,这时任何DML语句(DELETE、UPDATE、INSERT)都会开始一个事务,而事务的结束也是用COMMIT或ROLLBACK。2. 启动和技术事务使用API函数和Transact-SQL语句,可以在SQL Server Database Engine实例中将事务作为显式、自动提交或隐式事务启动和结束。(1) HYPERLINK ms-help:/MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/udb9/html/052c6ef6-8854-4d26-b6b5-0d4ccf6d1018.htm 显式事务显式事务就是可以显式地在其中定义事务的开始和结束的事务。BEGIN
9、 TRANSACTION标记显式连接事务的起始点。COMMIT TRANSACTION或COMMIT WORK如果没有遇到错误,可使用该语句成功地结束事务。该事务中的所有修改了的数据在数据库中都将永久有效。事务占用的资源将被释放。ROLLBACK TRANSACTION或ROLLBACK WORK用来清除遇到错误的事务。该事务修改的所有数据都返回到事务开始时的状态。事务占用的资源将被释放。(2)自动提交模式自动提交模式是SQL Server Database Engine的默认事务管理模式。每个Transact-SQL语句在完成时,都被提交或回滚。如果一个语句成功地完成,则提交该语句;如果遇到
10、错误,则回滚该语句。只要没有显式事务或隐式事务覆盖自动提交模式,与数据库引擎实例的连接就以此默认模式操作。在使用BEGIN TRANSACTION语句启动显式事务或隐式事务模式设置为开启之前,与数据库引擎实例的连接一直以自动提交模式操作。当提交或回滚显式事务,或当关闭隐式事务模式时,连接将返回到自动提交模式。编译和运行时错误在自动提交模式下,有时看起来好像数据库引擎实例回滚了整个批处理而不是仅仅一个Transact-SQL语句。当遇到的错误是编译错误而非运行时错误时,会发生这种情况。编译错误会阻止数据库引擎生成执行计划,就使得批处理中的任何语句都不会执行。尽管看起来好像是回滚了产生错误的语句之
11、前的所有语句,但实际上该错误阻止了批处理中的所有语句的执行。【例12.1】在以下示例中,由于发生编译错误,第三个批处理中的INSERT语句都没有执行。但看起来好像是前两个INSERT语句没有执行便进行了回滚。USE AdventureWorksGOCREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)GOINSERT INTO TestBatch VALUES (1, aaa)INSERT INTO TestBatch VALUES (2, bbb)INSERT INTO TestBatch VALUSE (3, ccc) - 语法
12、错误GOSELECT * FROM TestBatch - 没有任何记录被插入并显示GO【例12.2】在下面的示例中,第三个INSERT语句产生运行时重复键错误。由于前两个INSERT语句成功地执行并且提交,因此它们在运行时错误之后被保留下来。USE AdventureWorksGOCREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)GOINSERT INTO TestBatch VALUES (1, aaa)INSERT INTO TestBatch VALUES (2, bbb)INSERT INTO TestBatch VA
13、LUES (1, ccc) - 发生重复键错误GOSELECT * FROM TestBatch - 显示前两条记录GO【例12.3】在下面的示例中,执行并提交了前两条INSERT语句,但第三条INSERT语句由于引用一个不存在的表而产生运行时错误,因此只有前两行仍然保留在TestBatch表中。USE AdventureWorksGOCREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)GOINSERT INTO TestBatch VALUES (1, aaa)INSERT INTO TestBatch VALUES (2, b
14、bb)INSERT INTO TestBch VALUES (3, ccc) - 表名称出现错误GOSELECT * FROM TestBatch -显示前两条记录GO(3)隐式事务当连接以隐式事务模式进行操作时,SQL Server Database Engine实例将在提交或回滚当前事务后自动启动新事务。无需描述事务的开始,只需提交或回滚每个事务。隐式事务模式生成连续的事务链。为连接将隐式事务模式设置为打开(SET IMPLICIT_TRANSACTIONS ON)之后,当数据库引擎实例首次执行如表12.1所示的任何语句时,都会自动启动一个事务。表12.1 能够启动事务的语句ALTER T
15、ABLEINSERTCREATEOPENDELETEREVOKEDROPSELECTFETCHTRUNCATE TABLEGRANTUPDATE在发出COMMIT或ROLLBACK语句之前,该事务将一直保持有效。在第一个事务被提交或回滚之后,下次当连接执行以上任何语句时,数据库引擎实例都将自动启动一个新事务。该实例将不断地生成隐性事务链,直到隐性事务模式关闭为止。3. 事务处理过程中的错误如果某个错误使事务无法成功完成,SQL Server会自动回滚该事务,并释放该事务占用的所有资源。如果客户端与数据库引擎实例的网络连接中断了,那么当网络向实例通知该中断后,该连接的所有未完成事务均会被回滚。如
16、果客户端应用程序失败或客户机崩溃或重新启动,也会中断连接,而且当网络向数据库引擎实例通知该中断后,该实例会回滚所有未完成的连接。如果客户端从该应用程序注销,所有未完成的事务也会被回滚。12.2 SQL Server的安全机制SQL Server 2005的安全性是指保护数据库中的各种数据,以防止因非法使用而造成数据的泄密和破坏。SQL Server 2005的安全管理机制包括身份验证(authentication)和授权(authorization)两种类型。身份验证是指检验用户的身份标识,授权是指允许用户做些什么。验证过程在用户登录操作系统和SQL Server 2005的时候出现,授权过程
17、在用户试图访问数据或执行命令时出现。12.2.1 安全机制级别SQL Server 2005的安全机制分为四级,其中第一层和第二层属于验证过程,第三层和第四层属于授权过程,如图12.1所示。图12.1 SQL Server的安全机制(1)操作系统的安全防线。用户需要一个有效的登录帐户,才能对网络系统进行访问。(2)SQL Server的身份验证防线。SQL Server通过登录帐户来创建附加安全层,一旦用户登录成功,将建立与SQL Server的一次连接。(3)SQL Server数据库身份验证安全防线。当用户与SQL Server建立连接后,还必须成为数据库用户(用户ID必须在数据库系统表中
18、),才有权访问数据库,即允许用户与一个特定的数据库相连接。(4)SQL Server数据库对象的安全防线。用户登录到要访问的数据库后,要使用数据库内的对象,必须得到相应权限,即用户拥有对指定数据库中一个对象的访问权限。四层安全防线中,第一层涉及网络操作系统安全技术,后三层综合起来便形成了SQL Server的安全管理。12.2.2 主体“主体”是指可以请求SQL Server资源的个体、组和过程。与SQL Server授权模型的其他组件一样,主体也可以按层次结构排列。主体的影响范围取决于主体定义的范围(Windows、服务器或数据库)以及主体是不可分主体还是集合主体。例如,Windows登录名
19、就是一个不可分主体,而Windows组则是一个集合主体。每个主体都有一个唯一的安全标识符(SID)。各级别的主体包含的内容如下。Windows级别的主体Windows域登录名Windows本地登录名SQL Server级别的主体SQL Server登录名数据库级别的主体数据库用户数据库角色应用程序角色12.2.3 SQL Server中的身份验证访问SQL Server的第一步必须建立到SQL Server的连接,建立连接是通过登录ID实现的。登录ID是帐户标识符,用于连接到SQL Server 2005的帐户都称为登录。其作用是用来控制对SQL Server 2005的访问权限。SQL Se
20、rver 2005只有在首先验证了指定的登录帐号有效后,才完成连接。这种登录验证称为身份认证。但登录帐号没有使用数据库的权力,即SQL Server 2005登录成功并不意味着用户已经可以访问SQL Server 2005上的数据库。1. 身份验证模式类型SQL Server 支持两种身份验证模式:Windows身份验证模式和混合身份验证模式。(1)Windows身份验证Windows身份验证是默认模式,使用Windows操作系统的内置安全机制,也就是使用Windows的用户或组帐号控制用户对SQL Server的访问。在这种模式下,用户只需通过Windows的认证,就可以连接到SQL Ser
21、ver,而SQL Server本身不再需要管理一套登录数据。Windows身份认证采用了Windows安全特性的许多优点,包括加密口令、口令期限、域范围的用户帐号及基于Windows的用户管理等,从而实现了SQL Server与Windows登录安全的紧密集成。使用Windows身份验证,已经登录到Windows的用户不必再单独登录到SQL Server。(2)混合身份验证在混合身份验证模式下,如果用户在登录时提供了SQL Server登录ID,则系统将使用SQL server身份认证,如果没有提供SQL Server登录ID而提供的是请求Windows身份认证,则使用Windows身份验证。
22、SQL Server 2005中有两个默认的登录帐户:BUILTINAdministrators和sa。BUILTINAdministrators提供了对所有Windows管理员的登录权限,并且具有在SQL Server所有数据库中的所有权限。系统管理员(sa)是一个特殊的登录帐户,只有在SQL Server 2005使用混合验证模式时有效,它也具有在所有数据库中的所有权限。2. 身份验证模式的设置可以使用图形工具设置SQL Server 2005身份验证模式,但只能由系统管理员来完成,有如下两种方法。(1)通过编辑服务器注册属性设置1)连接到相应的Microsoft SQL Server D
23、atabase Engine实例之后,在“已注册的服务器”中,右击服务器名称,在出现的快捷菜单中选择“属性”,出现如图12.2所示的“编辑服务器注册属性”对话框。图12.2 “编辑服务器注册属性”对话框2)在图12.2中,可以在“身份验证”下拉列表框中选择“Windows身份验证”或“SQL Server身份验证”,也可以在“已注册的服务器”文本框中修改服务器名称。3)完成设置后,单击【保存】按钮。(2)通过编辑服务器属性设置1)连接到相应的Microsoft SQL Server Database Engine实例之后,在“对象资源管理器”中,右击服务器名称,在出现的快捷菜单中选择“属性”,
24、会出现如图12.3所示的“服务器属性”窗口。图12.3 “服务器属性”窗口2)在图12.3中,在左侧“选择页”中选择“安全性”选项,在右侧的“服务器身份验证”选项下选择新的身份验证模式。3)完成选择后,单击【确定】按钮。3. 创建登录帐号(1)Windows用户或组创建SQL Server登录帐号在Windows中创建的用户或组必须被授予连接SQL Server的权限后才能访问数据库,其用户名称为“域名计算机名用户名”形式。可以使用图形工具将Windows用户映射到SQL Server中,以创建SQL Server登录帐号。1)连接到相应的Microsoft SQL Server Databa
25、se Engine实例之后,在“对象资源管理器”中,展开服务器名称,在“安全性”下右击“登录名”。2)在出现的快捷菜单中选择“新建登录名”,出现如图12.4所示的“登录名-新建”窗口。图12.4 “登录名-新建”窗口3)在图12.4中的“登录名”中选择“Windows身份验证”,单击【搜索】按钮,出现如图12.5所示的“选择用户或组”对话框。图12.5 “选择用户或组”对话框4)在图12.5中,在“输入要选择的对象名称”文本框中输入登录名,或单击【高级】按钮查找用户或组名称以完成输入(此用户已是Windows帐户)。5)完成输入后,单击【确定】按钮,返回图12.4的“登录名-新建”窗口。6)在
26、图12.4的左侧“选择页”中选择“服务期角色”,可以将此用户加入某个服务器角色以具有某些权限。7)在图12.4的左侧“选择页”中选择“用户映射”,可以选择映射到此登录名的数据库用户及相应的数据库角色。8)单击【确定】按钮,完成从Windows用户或组到SQL Server登录帐号的映射。(2)创建SQL Server登录帐号如果使用混合验证模式或不通过Windows用户或组连接SQL Server,则需要在SQL Server下创建用户登录权限,使用户得以连接使用SQL Server身份验证的SQL Server 2005 Database Engine实例。使用图形工具创建SQL Serve
27、r登录帐号的方法与将Windows用户或组映射到SQL Server登录帐号的方法相同,只是在图12.4中选择“SQL Server 身份验证”,并设置登录名及密码。4. 删除登录帐号当不再使用某一登录帐号时应该将其删除,以保证数据库的安全性和保密性。可以使用图形工具删除登录帐号。1)连接到相应的Microsoft SQL Server Database Engine实例之后,在“对象资源管理器”中,展开服务器名称,在“安全性”下选择“登录名”。2)右击要删除的登录名,在出现的快捷菜单中选择“删除”,在出现的“删除对象”界面中,单击【确定】按钮。注意:删除Windows登录帐号,只是删除了到S
28、QL Server登录帐号的映射,不能登录到SQL Server中,但该用户没有在Windows中删除。12.2.4 数据库用户登录ID成功地进行了身份验证后,只是建立了到SQL Server的连接,要实现对数据库及数据库对象的访问,可通过两种途径来实现:一种是登录ID与相应数据库中的用户ID相关联来访问数据库,另一种是如果登录ID不能与任何数据库用户ID关联,但此数据库启用了Guest客户,则可以通过与Guest客户相关联来访问数据库。后一种方法不提倡采用,因为任何没有数据库权限的用户都可通过Guest客户获取数据库的访问权限,这样降低了安全性。SQL Server数据库用户,用于管理对指定
29、数据库使用的对象,控制对数据库及数据库对象的访问权限。一般地,登录ID与数据库用户ID是相同的。一个登录ID可以与多个数据库用户相关联。用户信息均存储在数据库的系统表sysusers中。权限的分配是通过数据库用户ID实现的,根据用户的性质合理分配最小权限。在安装SQL Server后,默认数据库中包含两个用户:dbo和guest,即系统内置的数据库用户。dbo代表数据库的拥有者(database owner)。每个数据库都有dbo用户,创建数据库的用户是该数据库的dbo,系统管理员也自动被映射成dbo。guest用户帐号在安装完SQL Server系统后被自动加入到master、pubs、te
30、mpdb数据库中,且不能被删除。用户自己创建的数据库默认情况下不会自动加入guest帐号,但可以手工创建。guest用户也可以像其他用户一样设置权限。当一个数据库具有guest用户帐号时,允许没有用户帐号的登录者访问该数据库。所以guest帐号的设立方便了用户的使用,但如使用不当也可能成为系统安全隐患。可以使用图形工具将要求访问数据库的登录帐户添加到数据库中成为数据库用户,并授予其相应的活动权限,以便访问数据库。1)连接到相应的Microsoft SQL Server Database Engine实例之后,在“对象资源管理器”中,单击服务器名称以展开服务器树。2)展开“数据库”,然后根据数据
31、库的不同,选择用户数据库,如teaching。3)展开“安全性”,右键单击其中的“用户”,然后单击“新建用户”,如图12.6所示。图12.6 新建用户界面4)在出现的如图12.7所示的“数据库用户-新建”窗口中,可以设置用户名、架构及数据库角色成员身份。图12.7 “数据库用户-新建”窗口5)在图12.7中单击“登录名”右侧的【浏览】按钮,会出现图12.8所示的“选择登录名”对话框,可以通过【浏览】按钮选择用户名,也可以直接输入用户名。用户名可以与登录帐号名不同。设置用户名后,单击【确定】按钮,返回图12.7“数据库用户-新建”窗口。图12.8 “选择登录名”对话框6)在“此用户拥有的架构”和
32、“数据库角色成员身份”中选择相应的架构和数据库角色,如图12.9所示,单击【确定】按钮,完成数据库用户的创建。图12.9 “选择登录名”对话框12.2.5 角色角色是指为管理相同权限的用户而设置的用户组,也就是说,同一角色下的用户权限都是相同的。将一些用户添加到具体某种权限的角色中,权限在用户成为角色成员时自动生效。在SQL Server数据库中,把相同权限的一组用户设置为某一角色后,当对该角色进行权限设置时,这些用户就自动继承修改后的权限。这样,只要对角色进行权限管理,就可以实现对属于该角色的所有用户的权限管理,极大地减少了工作量。一个用户可以同时属于不同的角色,也就是说,一个用户可以同时拥
33、有多个角色中的权限,但这些权限不能冲突,否则只能拥有最小的权限。SQL Server数据库的角色通常可以分为以下三类。前两种是系统预定义的。1. 服务器角色服务器角色具有一组固定的权限,作用域在服务器范围内,是独立于数据库的管理特权分组,主要实现SA、数据库创建者及安全性管理员职能,且不能更改分配给它们的权限。具有服务器角色的用户必须绝对可靠,并且人员要少。SQL Server 2005中的服务器角色都是固定的,不允许改变。固定服务器角色的作用域为服务器范围。固定服务器角色的每个成员都可以向其所属角色添加其他登录名。表12.2列出了固定服务器角色的名称及权限。表12.2 固定服务器角色固定服务
34、器角色权限bulkadmin可以运行BULK INSERT语句。dbcreator数据库创建者,可以创建、更改、删除和还原任何数据库。diskadmin用于管理磁盘文件。processadmin进程管理员,可以终止SQL Server实例中运行的进程。securityadmin安全管理员,管理登录名及其属性。它们可以用GRANT、DENY和REVOKE命令授予、禁止和回收服务器级权限。也可以GRANT、DENY和REVOKE数据库级权限。另外,它们可以重置SQL Server登录名的密码。serveradmin服务器管理员,可以更改服务器范围的配置选项和关闭服务器。setupadmin设置管理
35、员,可以添加和删除链接服务器,并且也可以执行某些系统存储过程。sysadmin系统管理员,可以在服务器中执行任何活动。默认情况下,Windows BUILTINAdministrators组(本地管理员组)的所有成员都是sysadmin固定服务器角色的成员。不能添加、删除或修改固定服务器角色,只能将登录帐户添加到固定服务器角色中。使用图形工具添加登录帐号到固定服务器角色的过程如下。1)连接到相应的Microsoft SQL Server Database Engine实例之后,在“对象资源管理器”中,展开服务器名称,在“安全性”选择“服务器角色”。2)在右侧窗口中出现的当前服务器角色名中,右击
36、要添加登录帐号的角色,如dbcreator,在出现的快捷菜单中选择“属性”,如图12.10所示。图12.10 服务器角色界面3)在出现的图12.11所示的“服务器角色属性”窗口中,单击【添加】按钮,选择要添加的登录帐号名,也可以选择【删除】按钮删除登录帐号,设置后单击【添加】按钮完成添加。设置后单击【确定】按钮。图12.11 “服务器角色属性”窗口2. 数据库角色数据库角色在数据库级别上定义,提供数据库层管理特权的分组,主要实现数据库的访问、备份与恢复及安全性等职能。它也有一系列预定义的权限,可以直接给用户指派权限,但在大多数情况下,只要把用户放在正确的角色中就会给予它们所需要的权限。一个用户
37、可以是多个角色中的成员,其权限等于多个角色权限的“和”,任何一个角色中的拒绝访问权限会覆盖这个用户所有的其他权限。数据库角色分为固定数据库角色和用户定义的数据库角色。固定数据库角色不允许改变。用户定义的数据库角色只适用于数据库级别,通过用户定义的角色可以轻松地管理数据库中的权限。固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。db_owner和db_securityadmin数据库角色的成员可以管理固定数据库角色成员身份,但只有db_owner数据库的成员可以向db_owner固定数据库角色中添加成员。表12.3显示了固定数据库角色到权限的映射关系。表12.3 固定数据库角色固定数
38、据库角色权限db_accessadmin数据库访问权限管理者,可以为Windows登录帐户、Windows组和SQL Server登录帐户添加或删除访问权限。db_backupoperator可以备份该数据库。db_datareader可以读取所有用户表中的所有数据。db_datawriter可以在所有用户表中添加、删除或更改数据。db_ddladmin可以在数据库中运行任何数据定义语言(DDL)命令。db_denydatareader不能读取数据库内用户表中的任何数据。db_denydatawriter不能添加、修改或删除数据库内用户表中的任何数据。db_owner数据库所有者,可以执行数据
39、库的所有配置和维护活动。db_securityadmin可以修改角色成员身份和管理权限。public每个数据库用户都属于public数据库角色。不能将用户、组或角色指派为public角色的成员,也不能删除public角色的成员。与固定服务器角色一样,对固定数据库角色也不能进行添加、删除或修改等操作,只能将数据库用户添加到固定数据库角色中。但对于数据库角色,用户可以创建及删除自定义的数据库角色。可以使用图形工具创建用户自定义的数据库角色,操作过程如下。1)连接到相应的Microsoft SQL Server Database Engine实例之后,在“对象资源管理器”中,单击服务器名称以展开服务
40、器树。2)展开“数据库”,然后根据数据库的不同,选择用户数据库,如teaching。3)展开“安全性”下面的“角色”,右键单击其中的“数据库角色”,然后单击“新建数据库角色”,如图12.12所示。图12.12 新建数据库角色界面4)在出现的如图12.13所示的“数据库角色-新建”窗口中,可以设置角色名,选择拥有的架构,以及添加和删除属于该数据库角色的成员,设置后单击【确定】按钮。图12.13 “数据库角色-新建”窗口可以使用图形工具将数据库用户添加到某数据库角色中或删除。除了在创建数据库角色时可以添加或删除用户,也可以使用下面的过程完成添加和删除用户。1)连接到相应的Microsoft SQL
41、 Server Database Engine实例之后,在“对象资源管理器”中,单击服务器名称以展开服务器树。2)展开“数据库”,然后根据数据库的不同,选择用户数据库,如teaching。3)展开“安全性”下面的“角色”,选择“数据库角色”,在右侧出现的数据库角色名中右击要添加或删除用户的数据库角色,出现图12.13所示的“数据库角色属性”对话框,可以为选择的数据库角色添加或删除用户。3. 应用程序角色应用程序角色是一个数据库主体,它使应用程序能够用其自身的、类似用户的特权来运行。使用应用程序角色,可以只允许通过特定应用程序连接的用户访问特定数据。与数据库角色不同的是,应用程序角色默认情况下不
42、包含任何成员,而且是非活动的。应用程序角色使用两种身份验证模式,可以使用sp_setapprole来激活,并且需要密码。因为应用程序角色是数据库级别的主体,所以它们只能通过其他数据库中授予guest用户帐户的权限来访问这些数据库。因此,任何已禁用guest用户帐户的数据库对其他数据库中的应用程序角色都是不可访问的。登录、用户、角色是SQL Server 2005安全机制的基础。三者联系如下:服务器角色和登录名相对应。数据库角色和用户对应的,数据库角色和用户都是数据库对象,定义和删除时必须选择所属的数据库。一个数据库角色中可以有多个用户,一个用户也可以属于多个数据库角色。12.3 SQL Ser
43、ver的权限管理设置用户对数据库的操作权限称为授权,SQL Server中未授权的用户将无法访问或存取数据库数据。SQL Server通过权限管理指明哪些用户被批准使用哪些数据库对象和Transact-SQL语句。SQL Server中的权限可授予用户安全帐户或用户安全帐户所属的组或角色。SQL Server中权限可识别以下四类用户,不同类型的用户形成不同层次。系统管理员(SA):服务器层权限,在服务器的所有数据库中对任何用户对象有全部权限。数据库拥有者(DBO):数据库层权限,在其拥有的数据库中对任何用户对象有全部权限。数据库对象拥有者:数据库对象层。数据库对象的一般用户:数据库对象用户层。
44、12.3.1 权限类型SQL Server中的权限可以分为以下三种。1. 对象权限对象权限(SELECT、UPDATE、INSERT、DELETE、EXEC、DRI)管理由哪些数据库用户来使用哪些数据库对象,是处理数据或执行过程时需要的权限类别,由数据库对象拥有者授予、废除或撤消。用户必须只授予在其工作范围内的权限,而禁止其在工作范围外的所有活动(最小权限),以确保数据安全。对象权限是指用户在数据库中执行与表、视图、存储过程等数据库对象有关的操作的权限。例如,是否可以查询表或视图,是否允许向表中插入记录或修改、删除记录,是否可以执行存储过程等。对象权限的主要内容有: 对表和视图,是否可以执行S
45、ELECT、INSERT、UPDATE、DELETE语句; 对表和视图的列,是否可以执行SELECT、UPDATE语句的操作,以及在实施外键约束时是否可以作为REFERENCES参考的列;对存储过程,是否可以执行EXECUTE。2. 语句权限语句权限是指用户创建数据库和数据库中对象(如表、视图、自定义函数、存储过程等)的权限。例如,如果用户想要在数据库中创建表,则应该向该用户授予CREATE TABLE 语句权限。语句权限适用于语句自身,而不是针对数据库中的特定对象。语句权限实际上是授予用户使用某些创建数据库对象的Transact-SQL语句的权力。只有系统管理员、安全管理员和数据库所有者才可
46、以授予用户语句权限。语句权限包括CREATE DATABASE、CREATE DEFAULT、CREATE RULE、CREATE TABLE、CREATE VIEW、CREATE PROCEDURE、CREATE FUNCTION、BACKUP DATABASE、BACKUP LOG等操作。3. 隐含权限隐含权限是指系统自行预定义而不需要授权就有的权限,包括固定服务器角色、固定数据库角色和数据库对象所有者所拥有的权限。12.3.2 设置权限1. 使用图形工具设置用户或角色权限(1)授予或拒绝语句权限1)连接到相应的Microsoft SQL Server Database Engine实例之
47、后,在“对象资源管理器”中,单击服务器名称,以展开服务器树。2)展开“数据库”,右击用户数据库,如teaching。3)在出现的快捷菜单中选择“属性”,出现如图12.14所示的“数据库属性-teaching”窗口。图12.14 “数据库属性-teaching”窗口4)在12.14的左侧“选择页”中选择“权限”,在右侧界面中选择需要为该用户授予或拒绝的语句权限,同时可以授予转授权限。设置后单击【确定】按钮。(2)授予或拒绝对象权限1)连接到相应的Microsoft SQL Server Database Engine实例之后,在“对象资源管理器”中,单击服务器名称以展开服务器树。2)展开“数据库
48、”,选择用户数据库,如teaching。展开用户数据库及其下的“表”。3)右击要设置权限的表名,如“s_c”,出现如图12.15所示的“表属性-s_c”窗口。图12.15 “表属性-s_c”窗口4)在12.15的左侧“选择页”中选择“权限”,在右侧界面中选择需要为该用户授予或拒绝的对象权限,同时可以授予转授权限,设置后单击【确定】按钮。图12.13 “数据库角色-新建”界面2. 使用Transact-SQL命令设置用户或角色权限(1)权限的授予可以使用Transact-SQL命令GRANT将权限授予用户,语法格式如下。GRANT ALL PRIVILEGES | permission ( co
49、lumn ,.,n ) ,.,n ON securable TO security_account ,.,n WITH GRANT OPTION 各选项含义如下。ALL PRIVILEGES :授予ALL参数相当于授予以下权限。如果安全对象为数据库,则ALL表示BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE和CREATE VIEW权限。如果安全对象是存储过程,则ALL表示EXECUTE权限。如果安全对象为表或视图
50、,则ALL表示DELETE、INSERT、REFERENCES、SELECT和UPDATE权限。permission:当前授予的权限名称。如12.3.1节所述。( column ,.n ):指定表中将授予其权限的列的名称。securable:指定将授予其权限的安全对象,可以是表、视图、存储过程等。TO security_account:指定权限将授予的对象或用户帐户,如当前数据库的用户与角色、Windows用户或组、SQL Server角色。WITH GRANT OPTION:指示被授权者在获得指定权限的同时还可以将指定权限授予其他用户帐户。【例12.4】以下示例将CREATE TABLE权限
51、授予yzm用户。USE teachingGOGRANT CREATE TABLE TO yzmGO【例12.5】以下示例将对student表的更新及插入权限授予yzm用户。USE teachingGOGRANT UPDATE, INSERT on student TO yzmGO【例12.6】以下示例将对student表的学号和姓名列的查询权限授予yzm用户。USE teachingGOGRANT SELECT(SNO, SNAME) ON student TO yzmGO(2)权限的禁止禁止权限就是删除以前授予用户、组或角色的权限,禁止从其他角色继承的权限,且确保用户、组或角色将来不继承更高级别的组或角色的权限。可以使用Transact-SQL命令DENY将权限禁止,语法格式如下。DENY ALL PRIVILEGES | permission ( column ,.,n ) ,.,n ON securable TO security_account ,.,n CASCADE其中:CASCADE指定授予用户禁止权限,并撤销用户的WITH GRANT OPTION权限。【例12.7】以下示例禁止yzm用户的CREATE VIEW权限
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部门个人工作计划
- 2024年汽车电子设备销售及维修合同3篇
- 2024年版鱼塘租赁经营协议模板
- 2024年版离婚双方权益保障合同模板版B版
- 小学教学计划二年级
- 居住建筑及公共建筑建设项目节能评估报告书
- 2025年中国大黄提取物行业市场调研及未来发展趋势预测报告
- 销售客服工作计划
- 2022初二语文教学工作计划
- 行政文员个人工作报告
- 生物入侵与生物安全智慧树知到期末考试答案章节答案2024年浙江农林大学
- 《公路工程集料试验规程》JTG-3432-2024考核试题及答案文档
- 常见的排序算法-冒泡排序 课件 2023-2024学年浙教版(2019)高中信息技术选修1
- (高清版)TDT 1031.6-2011 土地复垦方案编制规程 第6部分:建设项目
- 园林绿化工培训课件2
- 邻里商业中心案例研究:方洲邻里中心、新加坡
- 2024年02月上海沪剧艺术传习所(上海沪剧院)招考聘用笔试近6年高频考题难、易错点荟萃答案带详解附后
- 婚姻家庭关系心理讲座
- 三叉苦种植技术规程-征求意见稿
- 七上-动点、动角问题12道好题-解析
- 2024年九省联考新高考 数学试卷(含答案解析)
评论
0/150
提交评论