《数据库的安全》PPT课件.ppt
第12章 数据库的安全管理,本章内容,12.1 事务12.2 SQL Server 的安全机制12.3 SQL Server 的权限管理,12.1 事务,第11章 数据库的安全管理,12.1.1 事务特性12.1.2 事务管理,12.1 事务,第11章 数据库的安全管理,事务是作为单个逻辑工作单元执行的一系列操作。事务处理可以确保只有在事务性单元内的所有操作都成功完成的情况下,才会永久更新面向数据的资源。通过将一组相关操作组合为一个或者全部成功或者全部失败的单元,可以简化错误恢复并使应用程序更加可靠。,12.1.1 事务特性,第11章 数据库的安全管理,每一个事务都具有原子性、一致性、隔离性和持久性,也称为事务的ACID属性。(1)原子性(2)一致性(3)隔离性(4)持久性,12.1.1 事务管理,第11章 数据库的安全管理,应用程序主要通过指定事务启动和结束的时间来控制事务。可以使用Transact-SQL语句或数据库应用程序编程接口(API)函数来指定这些时间。系统还必须能够正确处理那些在事务完成之前便终止事务的错误,1.事务类型,第11章 数据库的安全管理,在SQL Server中有三种事务类型,分别是隐式事务、显式事务、自动提交事务,缺省为自动提交。(1)自动提交事务自动提交事务是指对于用户发出的每条Transact-SQL语句,SQL Server都会自动开始一个SQL Server事务,并且在执行后自动进行提交操作来完成这个事务,也可以说在这种事务模式下,一个Transact-SQL语句就是一个事务。,第11章 数据库的安全管理,(2)显式事务显式事务是指在自动提交模式下以BEGIN TRANSACTION开始一个SQL Server事务,以COMMIT或ROLLBACK结束一个SQL Server事务,以Commit结束事务是把SQL Server事务中的修改永久化,即使这时发生断电这样的故障。(3)隐式事务隐式事务是指在当前会话中用SET IMPLICIT_TRANSACTIONS ON命令设置的事务类型,这时任何DML语句(DELETE、UPDATE、INSERT)都会开始一个事务,而事务的结束也是用COMMIT或ROLLBACK。,2.启动和技术事务,第11章 数据库的安全管理,使用API函数和Transact-SQL语句,可以在SQL Server Database Engine实例中将事务作为显式、自动提交或隐式事务启动和结束。(1)显式事务显式事务就是可以显式地在其中定义事务的开始和结束的事务。BEGIN TRANSACTION:标记显式连接事务的起始点。COMMIT TRANSACTION或COMMIT WORK:如果没有遇到错误,可使用该语句成功地结束事务ROLLBACK TRANSACTION或ROLLBACK WORK:用来清除遇到错误的事务。,(2)自动提交模式,第11章 数据库的安全管理,自动提交模式是SQL Server Database Engine的默认事务管理模式。每个Transact-SQL语句在完成时,都被提交或回滚。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。只要没有显式事务或隐式事务覆盖自动提交模式,与数据库引擎实例的连接就以此默认模式操作。,(3)隐式事务,第11章 数据库的安全管理,当连接以隐式事务模式进行操作时,SQL Server Database Engine实例将在提交或回滚当前事务后自动启动新事务。无需描述事务的开始,只需提交或回滚每个事务。隐式事务模式生成连续的事务链。,3.事务处理过程中的错误,第11章 数据库的安全管理,如果某个错误使事务无法成功完成,SQL Server会自动回滚该事务,并释放该事务占用的所有资源。如果客户端与数据库引擎实例的网络连接中断了,那么当网络向实例通知该中断后,该连接的所有未完成事务均会被回滚。如果客户端应用程序失败或客户机崩溃或重新启动,也会中断连接,而且当网络向数据库引擎实例通知该中断后,该实例会回滚所有未完成的连接。如果客户端从该应用程序注销,所有未完成的事务也会被回滚。,12.2 SQL Server 的安全机制,第11章 数据库的安全管理,12.2.1 安全机制级别12.2.2 主体12.2.3 SQL Server中的身份验证12.2.4 数据库用户12.2.5 角色,12.2.1 安全机制级别,第11章 数据库的安全管理,SQL Server 2005的安全机制分为四级,其中第一层和第二层属于验证过程,第三层和第四层属于授权过程,12.2.2 主体,第11章 数据库的安全管理,主体”是指可以请求SQL Server资源的个体、组和过程。与SQL Server授权模型的其他组件一样,主体也可以按层次结构排列。各级别的主体包含的内容如下。,12.2.3 SQL Server中的身份验证,11.1 SQL Server 的安全机制,SQL Server的安全性管理是建立在身份验证和访问许可两者机制上的。身份验证是确定登录SQL Server的用户的登录账号和密码是否正确,以此来验证其是否具有连接SQL Server的权限。通过认证的用户必须获取访问数据库的权限,才能对数据库进行权限许可下的操作。,1.SQL Server身份验证模式类型,11.1.1 身份验证,(1)Windows身份验证模式该模式使用Windows操作系统的安全机制验证用户身份,只要用户能够通过Windows用户账号验证,即可连接到SQL Server而不再进行身份验证。这种模式只适用于能够提供有效身份验证的Windows操作系统。,(2)混合身份验证模式,11.1.1 身份验证,在该模式下,Windows身份验证和SQL server验证两种模式都可用。对于可信任连接用户(由Windows验证),系统直接采用Windows的身份验证机制,否则SQL Server将通过账号的存在性和密码的匹配性自行进行验证,即采用SQL Server身份验证模式。,2 身份验证模式的设置,11.1.1 身份验证,在该模式下,Windows身份验证和SQL server验证两种模式都可用。对于可信任连接用户(由Windows验证),系统直接采用Windows的身份验证机制,否则SQL Server将通过账号的存在性和密码的匹配性自行进行验证,即采用SQL Server身份验证模式。,身份验证内容,11.1.1 身份验证,包括确认用户的账号是否有效、能否访问系统、能访问系统的哪些数据库。,11.1.2 身份验证模式的设置,11.1 SQL Server 的安全机制,1.方法一:打开SQL Server管理平台,在“已注册的服务器”子窗口中设置验证模式。,2方法二在SQL Server管理平台的对象资源管理器中,右键单击服务器,在弹出的快捷菜单中选择“属性”,打开如图所示的“服务器属性”窗口。,11.1.2 身份验证模式的设置,11.2 登录账号管理,3.创建登录账户,创建登录账户的方法有两种:一种是从Windows用户或组中创建登录账户一种是创建新的SQL Server登录账户。,11.2.1 创建登录账户,1.通过Windows身份验证创建登录,(1)创建Windows用户以管理员身份登录到Windows 2003,选择“开始程序管理工具计算机管理”选项。,11.2.1 创建登录账户,展开“本地用户和组”文件夹,选择“用户”图标,单击鼠标右键,在快捷菜单中选择“新用户”项,打开“新用户”对话框,输入用户名、密码,单击“创建”按钮,然后单击“关闭”按钮完成创建。,11.2.1 创建登录账户,(2)使用企业管理器将Windows 2003账号加入到SQL Server中,创建SQL Server登录,启动SQL Server管理平台,在对象资源管理器中分别展开“服务器”“安全性”“登录名”。右击“登录名”,在弹出的快捷菜单上选择“新建登录名”,进行“登录名-新建”对话框。,11.2.1 创建登录账户,在“登录名-新建”对话框选择Windows验证模式,登录名通过单击“搜索”按钮自动产生,单击“搜索”按钮后出现“选择用户或组”对话框,在对象名称框中直接输入名称或单击“高级”按钮后查找用户或组名称来完成输入。,11.2.1 创建登录账户,单击“确定”按钮,一个Windows组或用户即可增加到SQL Server登录帐户中去。,11.2.1 创建登录账户,对于已经创建的Windows用户或组,可以使用系统存储过程sp_grantlogin授予其登录SQL Server的权限。,其语法格式如下:sp_grantlogin loginame=login 其中,loginame=login 为要添加的Windows用户或组的名称,名称格式为“域名计算机名用户名”。,11.2.1 创建登录账户,如果使用混合验证模式或不通过Windows用户或用户组连接SQL Server,则需要在SQL Server下创建用户登录权限,使用户得以连接使用SQL Server身份验证的SQL Server实例。,2.创建SQL Server登录,11.2.1 创建登录账户,在SQL Server管理平台中创建SQL Server登录帐户的具体步骤类似于“将Windows 2003帐号映射到SQL Server中”的操作方法。只是要选择SQL Server验证模式,并输入登录帐户名称、密码及确认密码。其他选项卡的设置操作类似,最后单击“确定”按钮,即增加了一个新的登录帐户。,(1)使用SQL Server管理平台创建登录帐户,11.2.1 创建登录账户,(2)使用系统存储过程sp_addlongin创建登录,sp_addlogin语法格式如下:sp_addlogin loginame=login,passwd=password,defdb=database,deflanguage=language,sid=sid,encryptopt=encryption_option,11.2 登录账号管理,4.删除登录账户,当某一登录帐户不再使用时,应该将其删除,以保证数据库的安全性和保密性。删除登录帐户可以通过管理平台和Transact-SQL语句来进行。1使用SQL Server管理平台删除登录 其操作步骤如下:(1)启动SQL Server管理平台,在对象资源管理器中分别展开“服务器”“安全性”“登录名”。(2)在“登录名”详细列表中鼠标右键单击要删除的用户,在弹出的快捷菜单中选择“删除”命令,确定删除。,11.2 登录账号管理,删除登录账号有两种形式:删除Windows用户或组登录和删除SQL Server登录。(1)删除Windows用户或组登录sp_revokelogin的语法格式为:sp_revokelogin liginame=login其中,liginame=login为Windows用户或组的名称。,2.使用Transact-SQL语句删除登录账号,11.2 登录账号管理,使用sp_droplogin可以删除SQL Server登录。其语法格式如下:sp_droplogin loginame=login例11-8 使用系统存储过程sp_droplogin删除SQL Server登录账号ZG001。EXEC sp_droplogin ZG001,(2)删除SQL Server登录,12.2.4 数据库用户的管理,第11章 数据库的安全管理,1使用SQL Server管理平台创建数据库用户 其操作步骤如下:(1)打开SQL Server管理平台,在其“对象资源管理器”面板中依次展开“服务器”“数据库”“安全性”节点。右击选择其下的“用户”对象,在打开的菜单中选择“新建用户”命令,打开的“数据库用户-新建”窗口。,11.3 数据库用户的管理,(2)在打开的“数据库用户-新建”窗口中,单击“登录名”右边的“”命令可搜索登录用户或直接在文本框中输入用户的登录名,在用户名栏中输入用户名称,用户名可以与登录名不一样。(3)在“此用户拥有的架构”和“数据库角色成员身份”区域选择此用户拥有的架构和加入的角色,选中角色名前的复选框即可。(4)单击“新建用户”窗口的“确定”按钮,数据库用户建立完成。,2.使用系统存储过程创建数据库用户,SQL Server使用系统存储过程sp_grantdbaccess为数据库添加用户,其语法格式如下:sp_grantdbaccess loginame=login,name_in_db=name_in_db OUTPUT,11.3 数据库用户的管理,12.2.5 角色,第11章 数据库的安全管理,1 服务器角色2 数据库角色应用程序角色角色是指为管理相同权限的用户而设置的用户组,也就是说,同一角色下的用户权限都是相同的。将一些用户添加到具体某种权限的角色中,权限在用户成为角色成员时自动生效。,11.4 角色管理,1 服务器角色,服务器角色具有一组固定的权限,作用域在服务器范围内,是独立于数据库的管理特权分组,主要实现SA、数据库创建者及安全性管理员职能,且不能更改分配给它们的权限。固定服务器角色的作用域为服务器范围。固定服务器角色的每个成员都可以向其所属角色添加其他登录名。表12.2列出了固定服务器角色的名称及权限。,11.4.1 SQL Server角色的类型,2.数据库角色,数据库角色在数据库级别上定义,提供数据库层管理特权的分组,主要实现数据库的访问、备份与恢复及安全性等职能数据库角色分为固定数据库角色和用户定义的数据库角色。固定数据库角色不允许改变。用户定义的数据库角色只适用于数据库级别,通过用户定义的角色可以轻松地管理数据库中的权限。,3 应用程序角色,应用程序角色是一个数据库主体,它使应用程序能够用其自身的、类似用户的特权来运行。管理平台和系统存储过程实现。登录、用户、角色是SQL Server 2005安全机制的基础。三者联系如下:服务器角色和登录名相对应。数据库角色和用户对应的,数据库角色和用户都是数据库对象,定义和删除时必须选择所属的数据库。一个数据库角色中可以有多个用户,一个用户也可以属于多个数据库角色,11.4 角色管理,11.4.4 用户定义数据库角色,(1)在SQL Server管理平台中添加或删除数据库角色成员,方法一:在上面提到过的某数据库角色的“数据库角色属性”对话框中,在“常规”选项卡上,右下角成员操作区,单击“添加”或“删除”按钮实现操作。方法二:通过“对象资源管理器”“数据库服务器”“数据库”“某具体数据库”“安全性”“用户”“某具体用户”上单击鼠标右键,在弹出的快捷菜单选择“属性”,出现“数据库用户”对话框,在右下角成员操作区,通过多选按钮直接实现为该用户从某个或某些数据库角色中添加或删除。,12.3 SQL Server的权限管理,第11章 数据库的安全管理,12.3.1 权限种类12.3.2 设置权限,11.5.1 权限类型,11.5 权限管理,权限是指用户对数据库中对象的使用及操作的权利,当用户连接到SQL Server实例后,该用户要进行的任何涉及修改数据库或访问数据的活动都必须具有相应的权限,也就是用户可以执行的操作均由其被授予的权限决定。SQL Server中的权限包括3种类型:对象权限、语言权限和隐含权限。,1.对象权限,11.5.1 权限的种类,对象权限用于用户对数据库对象执行操作的权力,即处理数据或执行存储过程(INSERT、UPDATE、DELETE、EXECUTE等)所需要的权限,这些数据库对象包括表、视图、存储过程。,表11-3 对象及作用的操作,11.5.1 权限的种类,2.语句权限,语句权限主要指用户是否具有权限来执行某一语句,这些语句通常是一些具有管理性的操作,如创建数据库、表、存储过程等。这种语句虽然也包含有操作(如CREATE)的对象,但这些对象在执行该语句之前并不存在于数据库中,所以将其归为语句权限范畴。,11.5.1 权限的种类,表11-4 语句权限及其作用,11.5.1 权限的种类,3.隐含权限,隐含权限是指系统自行预定义而不需要授权就有的权限,包括固定服务器角色、固定数据库角色和数据库对象所有者所拥有的权限。固定角色拥有确定的权限,例如固定服务器角色sysadmin拥有完成任何操作的全部权限,其成员自动继承这个固定角色的全部权限。数据库对象所有者可以对所拥有的对象执行一切活动,如查看、添加或删除数据等操作,也可以控制其他用户使用其所拥有的对象的权限。,11.5.1 权限的种类,12.3.2 设置权限,1使用图形工具设置用户或角色权限操作步骤如下:(1)授予或拒绝语句权限1)连接到相应的Microsoft SQL Server Database Engine实例之后,在“对象资源管理器”中,单击服务器名称,以展开服务器树。2)展开“数据库”,右击用户数据库,如teaching。3)在出现的快捷菜单中选择“属性”,出现如图12.14所示的“数据库属性-teaching”窗口。,11.5 权限管理,11.5.2 授予权限,(2)授予或拒绝对象权限1)连接到相应的Microsoft SQL Server Database Engine实例之后,在“对象资源管理器”中,单击服务器名称以展开服务器树。2)展开“数据库”,选择用户数据库,如teaching。展开用户数据库及其下的“表”。3)右击要设置权限的表名,如“s_c”,出现如图12.15所示的“表属性-s_c”窗口。,2.使用Transact-SQL命令设置用户或角色权限,(1)权限的授予可以使用Transact-SQL命令GRANT将权限授予用户,语法格式如下。GRANT ALL PRIVILEGES|permission(column,.,n),.,n ON securable TO security_account,.,n WITH GRANT OPTION,11.5.2 授予权限,(2)权限的禁止禁止权限就是删除以前授予用户、组或角色的权限,禁止从其他角色继承的权限,且确保用户、组或角色将来不继承更高级别的组或角色的权限。可以使用Transact-SQL命令DENY将权限禁止,语法格式如下。DENY ALL PRIVILEGES|permission(column,.,n),.,n ON securable TO security_account,.,n CASCADE,11.5.2 授予权限,(3)权限的撤销撤销权限用于删除用户的权限,但撤销权限是删除曾经授予或拒绝的权限,并不禁止用户、组或角色通过其他方式继承权限。撤销了用户的某一权限并不一定能够禁止用户使用该权限,因为用户可能通过其他角色继承这一权限。可以使用Transact-SQL命令REVOKE将授予或拒绝的权限撤销,语法格式如下。REVOKE GRANT OPTION FOR ALL PRIVILEGES|permission(column,.,n),.,n ON securable TO|FROM security_account,.,n CASCADE,11.5 权限管理,本章小结(1)身份验证是指当用户访问数据库时,系统对该用户的帐号和口令的确认过程。SQL Server的身份验证包括3种模式:SQL Server身份验证模式、Windows身份验证模式、混合验证模式。可以使用SQL Server管理平台进行身份验证模式的设置。(2)登录帐户是用户建立自己与SQL Server的连接途径,可以使用SQL Server管理平台和Transact-SQL语句建立和删除登录帐号。(3)只有添加为数据库用户才有访问数据库的特定权限,使用SQL Server管理平台和Transact-SQL语句可以建立和删除数据库用户。(4)角色是进行数据库权限管理的管理单位。角色分为固定角色和用户定义数据库角色,固定角色是系统预定义的,不可添加、修改与删除,用户定义数据库角色可以通过SQL Server管理平台和Transact-SQL语句建立和删除。(5)权限是用户对数据库中对象的使用及操作的权利,权限分为对象权限、语句权限和隐含权限3种。通过SQL Server管理平台和Transact-SQL语句可以进行权限的管理。,