SQLServer25的安全.ppt
第10章 SQL Server 2005的安全管理,内容提要:SQL Server 2005数据库系统具有各种高度精确的可配置安全特性,可以实现经过优化的深度防御。本章主要介绍:SQL Server的安全体系结构两种验证模式及其设置登录账号的设置角色与用户的创建方法权限设置与使用,第10章 SQL Server 2005的安全管理,本章内容:10.1 SQL Server 2005的安全性机制 10.2 管理服务器范围的安全性10.3 管理数据库范围的安全性10.4 管理密匙与证书10.5 权限管理10.6小结,10.1SQL Server 2005的安全性机制,SQL Server 2005的安全性机制主要包括以下5个方面的内容:SQL Server 2005客户机的安全机制。网络传输的安全机制。SQL Server 2005服务器的安全机制。数据库的的安全机制。数据对象的安全机制。,10.1SQL Server 2005的安全性机制,基本概念若要在SQL Server 2005的安全机制下,首先需要了解下面常用的基本概念或术语。(1)主体(Principal)。主体是可以请求对SQL Server资源的访问权限的用户、组和进程。主体有几个共同的特征。每个主体都有自己的安全标识号(SID)。主体可以是主体的集合(比如数据库角色或Windows组)或不可分割的主体(比如本地登录或域登录)。每个主体有一个作用域,作用域基于定义主体的级别。,10.1SQL Server 2005的安全性机制,基本概念(2)安全对象。安全对象是 SQL Server 2005数据库引擎授权系统控制对其进行访问的资源。通过创建可以为自己设置安全性的名为“范围”的嵌套层次结构,可以将某些安全对象包含在其他安全对象中。安全对象范围包括服务器、数据库、架构和对象。,10.1SQL Server 2005的安全性机制,基本概念(3)用户、数据库用户、账户、账号、登录名和密码。用户是指能够在SQL Server 2005安全机制下,访问数据库对象中的数据的操作员或客户。用户若要访问数据库对象,必须获得管理员分配的账号和密码。从SQL Server 2005管理系统的角度来看,用户就是一组匹配的账户和密码。账户和账号是一个概念的不同说法,在服务器中的账户又叫登录名(Login),因此访问服务器也称为登录服务器。服务器的登录名可以映射到数据库中成为数据库用户。一个登录名可以映射多个数据库用户,而一个用户只能映射一个登录名。,10.1SQL Server 2005的安全性机制,基本概念(4)角色(roles)。角色是SQL Server 2005中管理权限相近的安全账户的集合,相当于Windows域中的组。(5)权限。权限是SQL Server 2005安全性的最后一个级别,实际上是安全机制的设计者分配给某一个用户(或角色)访问数据库时,对数据对象的可以进行的操作集合。要拥有对SQL Server 2005上的安全对象的访问权限,主体必须具有在在数据对象上执行操作的权限。,10.1SQL Server 2005的安全性机制,基本概念(6)身份验证与授权。身份验证(Authentication)是SQL Server 2005系统标识用户或进程的过程,SQL Server 2005 中有两种身份验证方式:Windows身份验证模式和混合身份验证模式。客户端自身必须通过服务器的身份验证后才可以请求其他资源。授权(Authorization)是授予通过身份验证的用户或进程以访问或修改资源的指定权限的过程。,10.1SQL Server 2005的安全性机制,查询权限用户可以利用fn_my_permissions函数查询用户的有效权限,该函数一般返回调用对方服务器的有效权限列表。fn_my_permissions函数语法格式如下:fn_my_permissions(securable,securable_class)fn_my_permissions 函数的返回列如表10.1所示.,10.1SQL Server 2005的安全性机制,基本概念,例10.1 列出对服务器的有效权限。程序代码如下:USE master GOSELECT*FROM fn_my_permissions(NULL,SERVER);GO,例10.2 列出对数据库test01的有效权限程序代码如下:USE test01GOSELECT*FROM fn_my_permissions(NULL,DATABASE);GO,10.1SQL Server 2005的安全性机制,基本概念,例10.3 列出对表的有效权限。分析:以下示例返回调用方对teaching数据库内dbo架构中teacher的有效权限的列表。程序代码如下:USE teaching;GOSELECT*FROM fn_my_permissions(dbo.teacher,OBJECT)ORDER BY subentity_name,permission_name;,例10.4列出一个用户的有效权限分析:以下示例返回数据库用户dbo对 teaching 数据库内dbo架构中score表的有效权限的列表。调用方需要对用户dbo具有 IMPERSONATE 权限。程序代码如下:EXECUTE AS USER=dbo;SELECT*FROM fn_my_permissions(dbo.score,OBJECT)ORDER BY subentity_name,permission_name;REVERT;GO,10.2 管理服务器范围的安全性,服务器访问权限是属于SQL Server的第1个安全层次,该权限决定是否允许客户端访问服务器,这个安全级别总是由DBA负责。SQL Server 2005支持用Windows或SQL Server身份验证模式来验证客户端的身份。10.2.1 SQL Server 2005的验证模式SQL Server 2005的身份验证基于SQL Server存储在主数据库中的登录名和密码。客户端必须提供登录名和密码,才能获得授权访问服务器。SQL Server的安全性是和Windows操作系统集成在一起的,因此SQL Server提供了两种确认用户的验证模式:Windows验证和混合验证模式。,10.2 管理服务器范围的安全性,10.2.1 SQL Server 2005的验证模式1.Windows身份验证模式SQL Server数据库系统通常运行在Windows服务器平台上,其本身就具备管理登录、验证用户合法性的能力,因此Windows 验证模式正是利用了这一用户安全性和账号管理的机制,允许SQL Server也可以使用Windows的用户账户和密码。在这种模式下,用户只需要通过Windows的验证,就可以连接到SQL Server,而SQL Server本身也就不需要管理一套登录数据。Windows身份验证通常被认为更安全和更易维护。Windows身份验证对于用户和管理员来说都比较容易管理。,10.2 管理服务器范围的安全性,10.2.1 SQL Server 2005的验证模式2.混合身份验证模式混合验证模式允许以SQL Server验证模式或者Windows验证模式来进行验证。混合验证模式先将客户机的账号和密码与SQL Server 2005数据库中存储的账号和密码进行比较,如果符合就通过验证;如果不符合,则再和Windows中存储的账号和密码进行比较,如果符合就通过验证。Microsoft公司在SQL Server 2005中对SQL Server身份验证作了一些改进。例如,SQL Server实例可以设置为需要安全性更强的口令,以及在指定时间段后要求更新口令。,10.2 管理服务器范围的安全性,10.2.1 SQL Server 2005的验证模式3更新服务器的身份验证机制的步骤(1)在“对象资源管理器”中,右击SQL Server 2005数据库实例,在弹出的快捷菜单中,选择“属性”命令。(2)在“服务器属性”对话框中选择“安全性”选项卡。(3)在“服务器身份验证”区域可以设置服务器身份验证模式,然后单击“确定”按钮即可完成设置。(4)重启SQL Server 2005,即可改变身份验证模式。,10.2 管理服务器范围的安全性,服务器角色SQL Server 2005的安全体系结构中包括含有特定隐含权限的两类预定义的角色:服务器角色和固定数据库角色。服务器角色是执行服务器管理操作的具有相近权限的用户集合。根据SQL Server的管理任务和重要性等级来把具有SQL Server管理职能的用户划分到不同的服务器角色,每一个角色所具有的管理SQL Server的权限都是SQL Server内置的。,10.2 管理服务器范围的安全性,服务器角色服务器角色是服务器级别的主体,可以成为服务器角色的成员以控制服务器作用域中的可保护对象。表10.5列出了SQL Server 2005默认创建的服务器角色及其功能。SQL Server 2005的服务器角色在实例中的位置如图10.8所示。,10.2 管理服务器范围的安全性,管理登录名登录名就是可以访问SQL Server数据库系统的账户。1利用SQL Server Management Studio创建登录名(1)启动SQL Server Management Studio工具后,在“对象资源管理器”下,右击“安全性”下的“登录名”节点,在弹出的快捷菜单中选择“新建登录名”命令。(2)在“登录名-新建”界面上,设置登录名(te_login)、身份验证模式(SQL Server身份验证)、密码(123456)、默认数据库(teaching)和语言的类型等,如图10.9所示。,10.2 管理服务器范围的安全性,管理登录名1利用SQL Server Management Studio创建登录名(3)可以选择“服务器角色”选项卡,配置登录的服务器角色,如sysadmin。(4)也可以选择其他选项卡进行“用户映射”、“安全对象”和“状态”的配置。(5)然后单击“确定”按钮即可完成登录名的创建。(6)可以在“对象资源管理器”下查看新建登录名如图10.10所示。,10.2 管理服务器范围的安全性,管理登录名1利用SQL Server Management Studio创建登录名(7)右击登录名te_login,在弹出的快捷菜单中,选择“编写登录脚本为:”|“CREATE到”|“新查询编辑器窗口”命令,系统将创建登录名的过程以脚本形式保存下来。由此可知利用Transact-SQL语句创建登录名的方法。,脚本中的主要代码如下:CREATE LOGIN te_login WITH PASSWORD=N123456,DEFAULT_DATABASE=teaching,DEFAULT_LANGUAGE=简体中文,CHECK_EXPIRATION=OFF,CHECK_POLICY=OFFGOEXEC sys.sp_addsrvrolemember loginame=Nte_login,rolename=NsysadminGOALTER LOGIN te_login DISABLE,10.2 管理服务器范围的安全性,管理登录名2测试登录名下面使用SQL Server Management Studio测试新登录名是否成功连接服务器。(1)右击SQL Server 中的实例,在快捷菜单中选择“连接”命令。(2)在弹出的“连接服务器”界面中,选择SQL Serve身份验证,然后输入登录名和密码,如图10.11所示。(3)单击“连接”按钮可以测试连接是否成功。如图10.12所示。,10.2 管理服务器范围的安全性,管理登录名3利用系统过程管理登录名利用master数据库下的下列系统存储过程sp_addlogin、sp_droplogin、sp_password也可以用于管理SQL Server的登录名。(1)sp_addlogin。系统过程sp_addlogin可以用于创建SQL Server登录名,用户可以通过该登录访问SQL Server系统,其语法过程如下:sp_addlogin login_name,passwd,database,language,例10.5 利用系统过程sp_addlogin向“职员管理”数据库创建3个新登录。sp_addlogin rose,aabbcc,teachingGOsp_addlogin hanry,aabbcc,teaching GOsp_addlogin pool,aabbcc,teaching GO,10.2 管理服务器范围的安全性,管理登录名3利用系统过程管理登录名(2)sp_droplogin。利用系统存储过程sp_droplogin可以删除一个现有的SQL Server登录名,sp_droplogin系统过程可以通过系统表syslogins中删除相应的行来达到删除登录名的目的。需要注意的是,正在访问的SQL Server 2005系统中的任何一个数据库的SQL Server登录名是不能被删除的。若要删除某登录名,必须先利用系统过程sp_revokedbaccess删除相应的数据库用户。,10.2 管理服务器范围的安全性,管理登录名3利用系统过程管理登录名(3)sp_password。系统存储过程sp_password为SQL Server登录创建密码,或替换现有的口令密码。利用该过程用户可以随时修改自己的口令密码,系统管理员通过sp_password可以更改任何口令密码。例如:sp_password aabbcc,112233,hanry,10.2 管理服务器范围的安全性,管理登录名4.密码的复杂性策略SQL Server 2005的密码复杂性策略是指一系列限制密码复杂性的规则。密码复杂性策略通过增加可能密码的数量来阻止强力攻击。实施密码复杂性策略时,新密码必须符合以下原则:长度至少有6个字符,最多可包含 128 个字符。密码包含以下4类字符中的3类:英文大写字母(A-Z)、英文小写字母(a-z)、10个基本数字(0-9)、非字母数字(例如:!、$、#或%)字典中查不到,且不是命令名、人名或用户名,不得包含全部或部分用户名。定期更改且与以前的密码明显不同的密码。,10.2 管理服务器范围的安全性,管理凭据 凭据是包含连接到 SQL Server 之外的资源所需的身份验证信息的记录。1凭据的构成大多数凭据包含一个 Windows 登录名和密码。通过凭据,使用 SQL Server身份验证连接到 SQL Server 的用户可以连接到 Windows 或其他 SQL Server 以外的资源。在创建凭据之后,可以将凭据映射到登录名。单个凭据可映射到多个SQL Server 登录名,但是一个SQL Server 登录名只能映射到一个凭据。系统凭据是自动创建的,并与特定端点关联,其名称以#开头。,10.2 管理服务器范围的安全性,管理凭据 2.创建凭据的过程下面介绍创建凭据平局pingju的一般步骤。(1)在“对象资源管理器”下,右击“安全性”下的“凭据”节点,在弹出的快捷菜单中选择“新建凭据”命令。(2)在弹出的“新建凭据”对话框中,输入凭据名称(pingju)、标识(JIANG-N9VJWXJ11 Administrator)和密码,如图10.13所示,即可完成创建凭据的操作。,10.2 管理服务器范围的安全性,管理凭据 2.创建凭据的过程例10.6 在 sys.credentials 目录视图中查看凭据的有关信息。分析:用户可以利用SELECT语句在sys.credentials目录视图中查看凭据的相关信息。程序代码如下:SELECT*FROM sys.credentials,例10.7 创建映射到凭据的登录名分析:创建一个登录名USER1,然后将其映射到凭据pingju。程序代码如下:CREATE LOGIN USER1 WITH PASSWORD=1A2B3C4D CREENTIAL=pingjuGO,10.3 管理数据库范围的安全性,访问一个服务器并不意味着用户自动拥有数据库的访问权限。DBA以下列方式之一指定一个数据库登录用户:在每个用户需要访问的数据库中,创建一个与用户登录名对应的数据库用户。将数据库配置为把登录名或数据库用户作为数据库角色的成员对待的方式,使得用户能够继承角色中的所有权限。将登录名设置为使用默认账户之一:guest或dbo(数据库拥有者)。一旦授予了对数据库的访问权限,用户就可以看到所有数据库对象。,10.3 管理数据库范围的安全性,10.3.1 数据库角色数据库角色是在数据库级别定义的,并且存在于每个数据库中,是对数据库对象操作权限的集合。SQL Server 2005的数据库角色分为固定数据库角色和用户自定义数据库角色。后者又分为标准角色和应用程序角色两种。1固定数据库角色固定数据库角色是数据库级别的主体,可以管理数据库作用域的可保护对象,其中,public公有角色比较特殊。每个被授予对数据库的访问权限的用户会自动成为公有角色的成员,并继承授予它的权限。,10.3 管理数据库范围的安全性,10.3.1 数据库角色1固定数据库角色一般情况下,public角色允许用户做以下操作:public角色为数据库中所有用户保持默认权限。当尚未对某个用户授予或拒绝对安全对象的特定权限时,则该用户将继承授予该安全对象的 public 角色的权限。通过guest账户访问任意数据库。用某些系统存储过程显示master数据库中的信息,查看系统表。执行一些不需要权限的语句,例如PRINT。表10.6具体列出了所有数据库角色的功能。,10.3 管理数据库范围的安全性,10.3.1 数据库角色1固定数据库角色对于某个数据库而言,每一个数据库角色都有它特定的许可。可以用系统过程sp_dbfixdrolepermission来查看每一个固定数据库角色的许可。如果不指定role的值,所有固定服务器角色的许可都会显示出来。这个存储过程的语法结构为:sp_dbfixedrolepermission rolename=role例如:EXEC sp_dbfixedrolepermission db_ddladmin,10.3 管理数据库范围的安全性,10.3.1 数据库角色2.自定义数据库角色可以创建一个数据库角色,并赋予对数据库作用域和架构作用域的可保护对象的访问权限。一个用户可以是若干个数据库角色的成员。创建角色的步骤如下(1)在“对象资源管理器”下,展开数据库teaching,右击“安全性”|“角色”,在弹出的快捷菜单中选择“新建”|“数据库角色”命令。(2)在弹出的“数据库角色-新建”窗体中的“常规”选项卡中,输入角色名jsj09、所有者名te_login,并选择架构,如图10.15所示。,10.3 管理数据库范围的安全性,10.3.1 数据库角色2.自定义数据库角色创建角色的步骤如下(3)在“安全对象”选项卡中,单击“添加”按钮,在弹出的“添加对象”对话框中,选择其中一项,如“特定对象。(4)单击“确定”按钮,按照示例提示选择数据对象。(5)单击“确定”按钮,返回如图10.18所示的“安全对象”选项卡中为表设置权限后。单击“确定”按钮,数据库角色jsj09创建完毕。,10.3 管理数据库范围的安全性,10.3.1 数据库角色3.应用程序角色应用程序角色(Application role)是在没有成员的数据库级别上定义的,Microsoft创建应用程序角色目的是防止用户直接访问底层表数据。应用程序角色可以加强对某一个特别的应用程序的安全性。例如,某公司职员只是用某个特定的应用程序来修改员工数据信息,那么就可以为其建立应用程序角色。,10.3 管理数据库范围的安全性,10.3.1 数据库角色3.应用程序角色应用程序角色和所有其他的角色都有很大不同。应用程序角色没有成员,因为它们只是应用程序中使用,所以不需要直接对某些用户赋予权限。必须为应用程序角色设计一个密码以激活它。当应用程序角色被应用程序的会话激活以后,会话就会失去所有属于登录、用户账号或角色的权限,会话只能通过guest 用户账号的权限来访问其他数据库。如果在数据库中没有guest 用户账号的话,会话就不能获得访问数据库的权限。,10.3 管理数据库范围的安全性,10.3.1 数据库角色3.应用程序角色(1)利用SQL Server Management Studio创建应用程序角色的步骤 在“对象资源管理器”下,展开数据库teaching,右击“安全性”|“角色”,在弹出的快捷菜单中选择“新建”|“应用程序角色”命令。在弹出的“应用程序角色-新建”对话框的“常规”选项卡中,输入角色名称、默认架构和密码,如图10.19所示。,10.3 管理数据库范围的安全性,10.3.1 数据库角色3.应用程序角色(1)利用SQL Server Management Studio创建应用程序角色的步骤 参照创建数据库角色时的步骤设置“安全对象”选项卡后,单击“确定”按钮,应用程序角色建成。查看创建应用程序角色的脚本,应用程序角色jsj10的脚本如下:USE teachingGOCREATE APPLICATION ROLE jsj10 WITH DEFAULT_SCHEMA=dbo,PASSWORD=Naaaaaa,10.3 管理数据库范围的安全性,10.3.1 数据库角色3.应用程序角色(2)使用系统过程sp_addapprole来创建应用程序角色,并且赋予它们权限,这个过程的语法结构为:sp_addapprolerolenamerolepasswd_name=password(3)激活应用程序角色:当一个连接启动以后,必须执行系统过程sp_setapprole来激活应用程序角色所拥有的权限。这个过程的语法结构为:sp_setapprole rolenamerolepasswd=password,encrypt=encrypt_style,例如,激活应用程序角色jsj10的命令如下:Exec sp_setapprole jsj10,aaaaaa当用系统存储过程sp_setapprole激活应用程序角色的时候,可以了解到应用程序角色总是和数据库绑定的,即应用的范围是当前数据库,如果在会话中改变了当前数据库,那么你就只能做那个数据库中允许的操作。,10.3 管理数据库范围的安全性,10.3.1 数据库角色4管理数据库架构架构(schema)是管理数据对象的逻辑单位,是形成单个命名空间的数据库对象的集合。多个用户可以共享一个默认架构以进行统一名称解析。开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中,而不是 DBO 架构中。SQL Server 2005在引入架构后,访问数据库对象的完全限定模式为:,10.3 管理数据库范围的安全性,10.3.1 数据库角色4管理数据库架构下面介绍创建数据库架构的步骤。(1)在“对象资源管理器”下,展开数据库teaching,右击“安全性”|“架构”,在快捷菜单中选择“新建架构”命令。(2)在弹出的“架构-新建”窗体中的“常规”选项卡中,输入架构名schema1、架构所有者名public。(3)在“权限”选项卡中,单击“添加”按钮,在弹出的“选择用户和角色”对话框中,选择对象类型和对象。(4)单击“确定”按钮,在如图10.22所示的“权限”选项卡中为用户和角色设置权限后。单击“确定”按钮,数据库架构schema1创建完毕。,10.3 管理数据库范围的安全性,10.3.1 数据库角色4管理数据库架构下面介绍创建数据库架构的步骤。(5)对“架构”项进行刷新,即可观察到新建的架构schema1。还可以通过执行创建脚本的操作查看创建架构的代码。同样:也可以通过SQL Server Management Studio图形工具和Transact-SQL命令对架构进行修改和删除。在SQL Server 2005中,多个用户可以通过角色和成员身份拥有一个架构,可以对该架构进行安全权限的设置。多个用户可以共享一个默认架构,进行统一的名称解析。删除数据库用户不必再修改和测试显示引用这些对象的应用程序。,10.3 管理数据库范围的安全性,10.3.2 管理数据库用户数据库用户是访问某个特定数据库的主体。1利用SQL Server Management Studio创建数据库用户(1)在“对象资源管理器”下,展开数据库teaching,右击“安全性”|“用户”,在弹出的快捷菜单中选择“新建”|“用户”命令。(2)在弹出的“数据库用户-新建”窗体中的“常规”选项卡中,输入用户名hans、选择登录名te_login,并选择架构,如图10.23所示。也可以指定“默认架构”项。,10.3 管理数据库范围的安全性,10.3.2 管理数据库用户数据库用户是访问某个特定数据库的主体。1利用SQL Server Management Studio创建数据库用户(3)在“安全对象”选项卡中,添加用户的安全对象。(4)单击“脚本”按钮,可以生成如下脚本代码:(5)单击“确定”按钮,数据库用户hans创建完毕。,10.3 管理数据库范围的安全性,10.3.2 管理数据库用户2利用Transact-SQL命令创建数据库用户向当前数据库添加用户的Transact-SQL 语法如下:CREATE USER user_name FOR|FROM LOGIN login_name|CERTIFICATE cert_name|ASYMMETRIC KEY asym_key_name|WITHOUT LOGIN WITH DEFAULT_SCHEMA=schema_name,例10.8 在teaching数据库中创建用户AbolCREATE LOGIN Abol WITH PASSWORD=327Shy;USE teaching;CREATE USER Abol;GO,10.3 管理数据库范围的安全性,10.3.3 特殊用户所有 SQL Server 2005数据库中均提供的一种特殊用户,不能从任何数据库中删除该用户。1guest用户guest(游客)用户在默认情况下存在于所有数据库,且是禁用的。授予guest用户的权限由在数据库中没有账号的用户继承。,10.3 管理数据库范围的安全性,10.3.3 特殊用户1guest用户guest用户还具有如下特点:(1)guest 用户不能删除,但可以通过在 master 和 temp 以外的任何数据库中执行 REVOKE CONNECT FROM GUEST来撤消该用户的CONNECT 权限,从而禁用该用户。(2)guest用户允许没有账号的用户访问数据库。(3)应用程序角色是数据库级别的主体,只能通过其他数据库中授予guest 用户的权限来访问这些数据库。因此,任何已禁用guest用户的数据库对其他数据库中的应用程序角色都是不可访问的。,10.3 管理数据库范围的安全性,10.3.3 特殊用户2dbo用户dbo是具有在数据库中执行所有活动的暗示性权限的用户。固定服务器角色sysadmin的任何成员都映射到每个数据库内的称为dbo的特殊用户上,由固定服务器角色sysadmin的任何成员创建的任何对象都自动属于dbo。另外,dbo用户还具有如下特点:(1)dbo用户无法删除,而且始终存在于每个数据库中。(2)只有固定服务器角色sysadmin的成员或dbo用户创建的对象才属于dbo。(3)dbo拥有和固定服务器角色db_owner中的成员有着同样的权力,dbo是唯一一个能在db_owner角色中加入成员的用户。,10.4 管理密匙与证书,SQL Server 2005的加密策略和机制对主要包括密码系统架构、密钥与证书的使用。利用此机制可以对数据库访问进行加密,也可对数据进行加密。10.4.1 SQL Server 2005的密码系统架构SQL Server 2005 用分层加密和密钥管理基础结构来加密数据。每一层都使用证书、非对称密钥和对称密钥的组合对它下面的一层进行加密。如图10.24所示,加密层次结构与权限层次结构中介绍的安全对象的层次结构相似。,10.4 管理密匙与证书,10.4.1 SQL Server 2005的密码系统架构加密层次结构的每一层是如何对它下面的一层进行加密的:顶层的服务主密钥是用 Windows DP API 进行加密的。服务主密钥是加密层次结构的根。此密钥是在安装 Microsoft SQL Server 2005 实例时自动生成的,并受 Windows 数据保护 API 保护。只有创建服务主密钥的Windows 服务账户或有权访问服务账户名称和密码的主体能够打开服务主密钥。具有重新生成或还原服务主密钥涉及解密和重新加密完整的加密层次结构。备份服务主密钥可以将备份副本存储在一个安全、较远的位置。,10.4 管理密匙与证书,10.4.2 创建密钥密钥分为非对称密钥和对称密钥。对称密钥是加密和解密都使用的一个密钥。使用对称密钥进行加密和解密非常快,并且适用于使用数据库中的敏感数据的例程。对称密钥具有速度快,系统占用资源少,密钥的安全分发困难的特点。非对称密钥由私钥和对应的公钥组成。每个密钥都可以解密另一个密钥加密的数据。非对称加密和解密相对来说会消耗大量资源,但它们比对称加密提供了更高的安全级别。非对称密钥可用于加密对称密钥,以便存储在数据库中。非对称密钥具有加密、解密速度慢,占用系统占用资源较多,方便进行密钥分发的特点。,10.4 管理密匙与证书,10.4.2 创建密钥例10.9 创建和备份服务主密钥示例。-生成新的服务主密钥ALTER SERVICE master KEY REGENERATE;GO-备份服务主密钥到文件BACKUP SERVICE master KEY TO FILE=F:SQLPROGRAMSMK.BAKENCRYPTION BY PASSWORD=PASSWORD1-从备份文件还原服务主密钥。RESTORE SERVICE master KEY FROM FILE=F:SQLPROGRAMSMK.BAKDECRYPTION BY PASSWORD=PASSWORD1,例10.10 创建数据库的主密钥示例USE test02GO-为数据库创建数据库的主密钥CREATE master KEY ENCRYPTION BY PASSWORD=PASSWORD1GO-查看数据库加密状态SELECT name,is_master_key_encrypted_by_serverFROM sys.databases WHERE name=test02;,例10.10-查看数据库主密的信息USE TEST02SELECT*FROM sys.symmetric_keysGO-对数据库密进行备份USE test02GOBACKUP master KEY TO FILE=F:SQLPROGRAMDMK.BAKENCRYPTION BY PASSWORD=PASSWORD1GO,10.4 管理密匙与证书,10.4.3 创建证书公钥证书(通常只称为证书)是一个数字签名语句,它将公钥的值绑定到拥有对应私钥的人员、设备或服务的标识上。证书是由证书颁发机构(CA)颁发和签名的。从 CA 接收证书的实体是该证书的主题。证书中通常包含下列信息:主题的公钥。主题的标识符信息,如姓名和电子邮件地址。有效期。这是指证书被认为有效的时间长度。颁发者标识符信息。颁发者的数字签名。此签名用于证明主题的公钥和标识符信息之间的绑定的有效性。,10.4 管理密匙与证书,10.4.3 创建证书证书的主要好处是使主机不再需要为每个主题维护一组密码。相反,主机只需要与证书颁发者建立信任关系,然后证书颁发者就可以签名无限数量的证书。当主机(如安全 Web 服务器)将某个颁发者指定为受信任的根颁发机构时,主机将隐式信任该颁发者用来建立它所发出的证书绑定的策略。主机可以通过将颁发者自签名的证书放入主机的受信任根证书颁发机构证书存储区,将此颁发者指定为受信任的根颁发机构。颁发者可以在证书到期之前便撤消该证书。,10.4 管理密匙与证书,10.4.3 创建证书例10.11 创建证书mycert1-创建证书USE test02GOCREATE CERTIFICATE mycert1ENCRYPTION BY PASSWORD=PASSWORD1WITH SUBJECT=mycert,START_DATE=11/01/2009,EXPIRY_DATE=01/01/2011GOselect*from sys.certificates;GO,-备份导出证书和私钥USE test02GOBACKUP CERTIFICATE mycert1TO FILE=F:SQLPROGRAMmycert1.cerWITH PRIVATE KEY(DECRYPTION BY PASSWORD=PASSWORD,FILE=F:SQLPROGRAMmycert1_pvt,ENCRYPTION BY PASSWORD=PASSWORD)运行结果如图:,10.4 管理密匙与证书,10.4.3 创建证书例10.12 从证书mycert1中创建数据库用户hongtaoliu。USE test02CREATE USER hongtaoliu FOR CERTIFICATE mycert1GO程序执行成功后,可以发现数据库test02中用户hongtaoliu已经存在。,10.4 管理密匙与证书,10.4.4 加密实例下面看一个关于加密的例子。例10.13 利用前面的证书对字符串进行加密和解密。DECLARE source varbinary(200)DECLARE encrytext varbinary(200)SET source=CONVERT(varbinary(200),This is test!)SET encrytext=EncryptByCert(Cert_ID(mycert),source)SELECT encrytextSELECT CONVERT(varchar(200),DecryptByCert(Cert_ID(mycert),encrytext,NPASSWORD)as Source,10.5 权限管理,权限是SQL Server安全性的最后一个级别。权限可以明确用户能够使用哪些数据库对象,并对它们进行何种操作。用户在数据库内的权限取决于用户账号的权限和该用户所属的角色的权限。在SQL Server中,权限分为语句、对象和暗示性3种类型:语句权限。在数据库中创建数据库或其他项目的活动时所受到的权限控制。对象权限。使用数据或执行程序的活动受到的权限控制。暗示性权限。执行只有固定角色的成员或数据库对象的所有者才能够秩序的某些活动权限,不能授予、撤消或拒绝。,10.5 权限管理,10.5.1 语句权限语句权限授予用户某些Transact-SQL语句的操作权力。语句权限是对语句本身定义的,而不是在数据库中定义的一个特定项。1利用SQL Server Management Studio管理语句权限在SQL Server Management Studio中,为查看现有的角色或用户的语句权限,以及“授予”、“具有授予权限”、“允许”或“拒绝”语句权限提供了图形界面。SQL Server 2005中可以通过多种方式获取这种图形界面。,10.5 权限管理,10.5.1 语句权限1利用SQL Server Management Studio管理语句权限在“对象资源管理器”下,右击“数据库”|“teaching”,在弹出的菜单中选择“属性”,然后选择“权限”选项卡,可以查看、设置角色或用户的语句权限,如图10.27所示。“授予”表示指权限分配给用户或角色。“具有授予权限”是指用户或角色获得的权限可以再授予其他用户或角色。“拒绝”将覆盖表级对列级权