SQLServer2008安全性概述教学文案.doc

上传人:1595****071 文档编号:86305925 上传时间:2023-04-14 格式:DOC 页数:23 大小:399.50KB
返回 下载 相关 举报
SQLServer2008安全性概述教学文案.doc_第1页
第1页 / 共23页
SQLServer2008安全性概述教学文案.doc_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《SQLServer2008安全性概述教学文案.doc》由会员分享,可在线阅读,更多相关《SQLServer2008安全性概述教学文案.doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Good is good, but better carries it.精益求精,善益求善。SQLServer2008安全性概述-面向数据库管理员的SQLServer2008安全性概述SQLServer技术文章作者:DonKiely更新:GeoffAllix(内容主管)技术审查:SethuKalavukar、SameerTejani、AlComeau、RobWalters和NirajNagrani出版日期:2007年10月适用产品:SQLServer2008摘要:SQLServer2008在设计、默认和部署方面均提供了保护措施。Microsoft承诺在必要时将交换有关线程、对策和安全增强的信息

2、,以尽量保证数据安全。本文涉及SQLServer2008的一些最重要的安全特性。它将告诉管理员如何安全地安装SQLServer,以及如何在应用程序和用户使用其中存储的数据时,仍能保证其安全。版权这是一份预备文档,在本文档中所述软件的最终商业版本发布之前,该文档的内容可能会发生重大变化。本文档中提供的信息代表了MicrosoftCorporation当前(软件发布之前)对所讨论问题持有的观点。因为Microsoft必须响应不断变化的市场条件,所以其当前的观点不应被解释为是一种承诺,软件发布之后,Microsoft不能保证现在所提供的所有信息准确无误。这份白皮书仅供参考。Microsoft对本文档

3、中提供的信息不做任何担保、明示、暗示或法律方面的承诺。用户有责任遵守所有适用的版权法。在版权权利限制下,未经Microsoft公司明确的书面许可,本文档的任何内容不能被复制、存储或放进检索系统,或者以任何形式或任何手段(电子、机械、复印、录制或其他)或为达到任何目的进行转换。Microsoft对本文档涵盖的主题内容可能拥有专利、专利申请、商标、版权或其他知识产权。没有来自Microsoft的任何书面许可协议的明确表示,本文档不赋予您对这些专利、商标、版权或其他知识产权的任何许可。2007MicrosoftCorporation。保留所有权利。Microsoft、Windows和SQLServe

4、r是MicrosoftCorporation在美国和/或其他国家的注册商标或商标。本文档中提及的真实的公司和产品名称可能是其各自所有者的商标。-目录简介1安全配置1WindowsUpade2外围应用配置2验证3口令策略强化3端点验证5授权6细粒度权限7主体和安全实体7角色和权限8元数据安全10SQLServerAgent代理10执行上下文14用户/架构分离15加密和密钥管理18数据加密18透明数据加密20可扩展的密钥管理21代码模块签名21SQLServer2008中的审核22所有动作审核22DDL触发器24结束语25导言随着越来越多的网络相互连接,安全性也变得日益重要。公司的资产必须受到保护

5、,尤其是数据库,它们存储着公司的宝贵信息。安全是数据引擎的关键特性之一,保护企业免受各种威胁。MicrosoftSQLServer2008安全特性的宗旨是使其更加安全,且使数据保护人员能够更方便地使用和理解安全。在过去几年中,世界各地的人们对于安全的、基于计算机的系统有了更深刻的理解。Microsoft在此过程中一直处于前沿,而SQLServer就是落实这种理解的首批产品之一。它实现了重要的“最少特权”原则,因此不必授予用户超出工作所需的权限。它提供了深层次的防御工具,可以采取措施防御最危险黑客的攻击。关于Microsoft首创的TrustworthyComputing技术,已经有了很多文献和

6、讨论,它可指导公司的所有软件开发。有关更多信息,请参阅TrustworthyComputing网站:(该首创技术的4个核心组件为: Securebydesign。作为抵御黑客及保护数据的基础,软件需要进行安全设计。 Securebydefault。系统管理员不必操心新安装的安全,默认设置即可保证。 Secureindeployment。软件自身应能更新最新的安全补丁,并能协助维护。 Communications。交流最佳实践和不断发展的威胁信息,以使管理员能够主动地保护系统。这些指导准则在SQLServer2008中均得到了体现,它提供了保护数据库所需的所有工具。本文介绍了系统和数据库管理员需

7、要掌握的最重要的安全特性。首先介绍如何安全地安装和配置SQLServer2008。它讨论了验证和授权特性,这些特性用以控制对服务器的访问,并规定用户一旦通过验证就可以执行的操作。最后介绍管理员需要理解的数据库安全特性,以便为数据库以及访问这些数据库的应用程序提供安全的环境。安全配置要安全地安装SQLServer,必须有一个安全的环境。对于运行SQLServer2008的服务器,其外部安全要求没有太多改变。需要保护服务器的物理安全,并要定期备份数据,如果联网,还须将其放到一个或多个防火墙后面,避免在运行其他服务器应用程序的计算机上安装SQLServer,且要尽可能减少必要的网络协议数量。要在Mi

8、crosoftWindowsServer2003或MicrosoftWindowsServer2008计算机上安装SQLServer,以使它能充分利用操作系统级的安全保护措施。此外,最安全的方案就是安装到一个或多个NTFS分区上。有了安全的环境,接下来最关键的就是安全地安装SQLServer2008。安装程序执行所有的常规安装任务,其自带的SystemConfigurationChecker将通知用户可能导致问题的任何不足之处。默认情况下,安装SQLServer2008并不能启用所有特性。而是只安装核心组件以及常用特性。生产环境中可能用不到的其他特性默认是关闭的。可以使用该产品支持的工具启用所

9、需特性。这些都是TrustworthyComputing技术中securebydefault特性的一部分。这表示在安装时,SQLServer2008可利用默认的安全设置集实现开箱即用的安全性。基本数据库服务器不需要的特性并未被安装,目的是为了减少外围应用。由于默认情形下并未在所有系统中启用所有特性,因此在安装系统镜像时引入了异质性。这一点限制了启用易受潜在攻击的特性的系统数量,因此有助于防御大规模攻击或蠕虫病毒。WindowsUpdate在企业中部署SQLServer之后,就能发现新的威胁和漏洞。WindowsUpdate旨在确保及时下载并应用能够显著减少特定安全问题的补丁。可以利用Windo

10、wsUpdate自动应用SQLServer2008补丁,并减少由于已知的软件漏洞所导致的威胁。在大多数企业环境中,应使用WindowsServerUpdateService(WSUS)管理补丁在组织内部的分发和更新。外围应用配置SQLServer2008具有大量特性,其中有许多在安装时处于禁用状态。例如,CLR集成、数据库镜像、调试、ServiceBroker以及邮件功能虽被安装,但未运行且不可用,除非显式地启用或对其进行配置。该设计与SQLServer“默认保证安全”思路的“减少外围应用”原则保持一致,可以减小攻击表面。如果特性不可用或未被启用,攻击者就不能利用它。这样做的代价就是,要花些时

11、间搜寻启用特性的所有Transact-SQL语句。即使发现sp_configuresystem存储过程可以满足很多需要,仍须编写并不直观的如下代码:sp_configureshowadvancedoptions,1reconfigurewithoverridesp_configureclrenabled,1由于配置选项过多,编写此类代码很耗时间,尤其是在组织中部署了多个SQLServer实例时更是如此。SQLServer2008带有基于策略的管理技术,名为DeclarativeManagementFramework(声明管理框架,DMF)。DMF提供了大量的配置facet,其中的每一个都定义了

12、一组相关的配置设置或属性。可以利用这些facet创建一些为配置选项指定所需设置的“条件”,并将这些条件作为“策略”应用给企业中的SQLServer实例。SQLServer2008自带的一个facet就是SurfaceArea,可以利用该facet定义用以控制各种SQLServer2008特性状态的策略。通过创建为服务器定义所需外围应用设置的策略,可以方便地在组织中所有的SQLServer上配置最小的外围应用,并减小恶意攻击的可能性。验证在数据和服务器都需要保护,而且不想承受如今互联网上常见的无情攻击之际,Microsoft开发了SQLServer2000。基本的验证问题依然存在:您是谁?您如何

13、证明自己的身份?但是,SQLServer2008提供了更健壮的验证特性,对服务器的安全便捷有着更好的支持,放行好人并阻止坏人。SQLServerAuthentication利用包含用户id和口令的简单连接字符串,为基于非Windows的客户端或应用程序提供了验证机制。这种登录易于使用,很受应用程序开发人员的欢迎,它的安全性不如Windows验证机制,因此在验证机制中不推荐使用。SQLServer2008改进了SQLServerAuthentication选项。首先,默认情形下它利用SQL生成的证书支持通道的加密。管理员不必获取或安装有效的SLL证书,以确保SQL凭证流经的通道是安全的。由于SQ

14、LServer2008自动生成这些证书,因此在传送登录数据包时,默认情形下它将自动加密通道。如果客户端使用SQLServer2005或更新版本,即可使用该特性。注意:SQLServer生成的本地证书可保护被动的中间人攻击,其中的攻击者会嗅探网络。要更有效地系统免受被动中间人攻击,应部署并使用客户端也信任的证书。SQLServer2008进一步增强了SQLServerAuthentication,因为在与Windows2003服务器或更新版本一起使用时,默认情形下数据库引擎将利用WindowsGroupPolicy检查SQL登录的口令复杂度、口令过期日以及帐户锁定状态。这表示可以对SQLServ

15、er帐户强行应用Windows口令策略。口令策略强制有了SQLServer2008,口令策略强制特性被内置到服务器中。作为WindowsServer2003NetAPI32库的一部分,SQLServer利用NetValidatePasswordPolicy()API根据Windows的口令强度、过期日和帐户锁定状态策略,在验证以及口令设置、重置期间验证口令的有效性。表3列出来构成该策略的各种设置。表3WindowsServer2003口令策略组件类别名称注释口令策略强行应用口令历史记录防止用户重用旧口令,如交替使用两个口令。最短的口令长度口令必须满足复杂度要求参见下文。利用可逆加密存储口令允许

16、在Windows中检索口令。绝对不要启用该选项,除非应用程序的要求优先于安全口令的要求。(该策略不适用于SQLServer。)口令过期日口令的最长存在时间口令的最短存在时间帐户锁定策略帐户锁定持续时间帐户锁定的持续时间(以分钟计)。当锁定阈值0时,Windows将启用该策略。帐户锁定阈值不成功登录尝试的最大次数。时间到后即可重置帐户锁定计数器多久之后Windows将重置不成功尝试的计数器。当锁定阈值0时,Windows将启用该选项。如未运行WindowsServer2003或更新版本,SQLServer仍利用简单的检查方法,强行应用口令强度,以阻止以下口令: Null或空口令 与计算机或登录名

17、相同 Password、admin、administrator、sa、sysadmin等口令相同的复杂度标准被应用给在SQLServer中创建及使用的所有口令,包括sa登录的口令、应用程序角色、用于加密的数据库主密钥以及对称加密密钥。SQLServer默认情形下总会检查口令策略,但利用CREATELOGIN或ALTERLOGIN语句,可取消对个别登录的强行应用,代码如下:CREATELOGINbobWITHPASSWORD=S%V7Vlv3c9Es8,CHECK_EXPIRATION=OFF,CHECK_POLICY=OFFCHECK_EXPIRATION使用WindowsServer2003

18、策略的“口令最大和最小年龄”部分,而CHECK_POLICY使用其他的策略设置。管理设置还允许启用或关闭口令策略检查、启用或关闭口令过期检查,并在用户第一次登录时强行修改口令。CREATELOGIN中的MUST_CHANGE选项强行让用户修改下次登录时的口令。在客户端,它允许在登录时修改口令。所有新型客户端数据访问技术都支持该特性,包括OLEDB和ADO.NET以及客户端工具,如ManagementStudio。如果用户的不成功登录次数过多,超出了口令策略允许的尝试次数,SQLServer将根据Windows策略中的设置锁定该帐户。管理员可利用ALTERLOGIN语句取消锁定该帐户:ALTER

19、LOGINaliceWITHPASSWORD=3x1Tq#POYIAzUNLOCK端点验证SQLServer2008支持传统的二进制TabularDataStream(表格数据流),客户端利用该数据流通过HTTP访问数据,也可通过HTTP访问本地XMLWeb服务。允许通过HTTP进行访问的主要好处就是,任何理解Web服务协议的客户端软件和开发工具都可访问存储在SQLServer中的数据。这表示SQLServer2008可以提供独立的Web服务方法,它也是ServiceOrientedArchitecture(面向服务的体系结构,SOA)中的一个完整端点。将SQLServer2008用作Web服

20、务主机需要两步通用操作,每一步都有很多变化:定义存储过程和用户定义的函数,以提供Web服务方法;定义HTTP端点,以通过HTTP接收方法调用,并将其转给适当的过程。本文主要介绍其中涉及到安全问题。有关配置及使用HTTP端点的详情,请参阅SQLServerBooksOnline中的CREATEENDPOINT(Transact-SQL)部分。由于默认情形下SQLServer中的XMLWeb服务使用HTTP和80端口,因此大多数防火墙都允许流量通过。但是,不受保护的端点其实是潜在的攻击载体,必须对其施加保护,因此SQLServer提供了强大的验证和授权机制。默认情形下,SQLServer没有任何端

21、点,用户必须拥有高级权限,以创建、更改及启用HTTP端点。SQLServer2008提供了五种不同的验证类型,与IIS用于网站验证的方法类似。 Basic验证基本验证是HTTP1.1协议的一部分,它以base-64编码的明文传送登录凭证。凭证必须映射到Windows登录,然后SQLServer利用该凭证授权给对数据库资源的访问。如果使用Basic验证,就无法将PORTS自变量设为CLEAR,反之必须将其设为SSL,并通过SSL利用数字证书加密与客户端软件的通信。 Digest验证Digest验证也是HTTP1.1的一部分。在将凭证发送给服务器之前,它利用MD5对凭证进行杂散化,这样就无法通过电

22、线发送它们,即使采用加密形式也是如此。凭证必须映射到有效的Windows域帐户,且不能使用本地的用户帐户。 NTLM验证NTLM使用的是挑战响应协议,该协议最初是在MicrosoftWindowsNT中最先得到应用的,自此之后得到了Windows所有版本客户端和服务器的支持。当客户端和服务器都使用Windows系统时,它提供了安全验证机制,而且需要有效的域帐户。 Kerberos验证Kerberos验证是Windows2000及更新版本才有的特性,它以许多操作系统中都有的行业标准协议为基础。它允许执行相互验证,其中客户端和服务器都有理由相信对方的身份,并提供高级别的验证形式。为利用Window

23、sServer2003中的Kerberos特性,必须通过HTTP.sys以及作为WindowsSupportToos一部分的SetSPN.exe实用工具,注册KerberosServicePrincipalName(Kerberos服务主体名,SPN)。 Integrated验证Integrated验证提供了最好的NTLM和Kerberos验证。服务器将使用其中的一种验证类型并输入客户端请求,允许执行客户端支持的最安全验证,同时使旧版Windows也能使用该服务。可在Windows2003中配置Http.sys,使之与客户端协商要采用的协议。用于端点的验证方法是通过CREATE或ALTEREN

24、DPOINT语句的AUTHENTICATION属性设置的。例如,下列代码将创建利用Kerberos执行验证的端点:CREATEENDPOINTmyEndpointSTATE=STARTEDASHTTP(PATH=/MyHttpEndpoint,AUTHENTICATION=(KERBEROS),PORTS=(CLEAR),SITE=MySqlServer)FORSOAP(WSDL=DEFAULT,DATABASE=myDB,NAMESPACE=SQLServer2008支持侦听HTTP和用户定义的TCP端口的端点。也可对请求进行各种格式化:SOAP、Transact-SQL、ServiceBr

25、oker专用格式以及数据库镜像专用格式。使用SOA时,可利用WS-Security标题验证SQLServer登录。Microsoft已实现了WebService端点验证,以支持各种协议和规范,本文只介绍其中几种。需要显式地启用验证选项,并确保客户端能够提供必要的凭证类型。一旦SQLServer完成对客户端的验证,就可以为登录有权访问的资源授权,如下节所述。授权验证完成后,就该考虑已验证登录可以执行的操作了。在这个方面,SQLServer2008和SQLServer2005比旧版更灵活。权限的粒度更细,这样即可授予必要的特定权限,而不是授予固定角色的成员,以免其权限超出需要。现在有了更多的实体和

26、安全实体,因此可为其分配粒度更细的权限。除了增强对用户数据的保护,与特定安全实体有关的结构信息和元数据现在只能供拥有访问该安全实体权限的主体使用。进一步而言,可以利用某种机制创建定制的权限集,该机制允许定义可运行存储过程的安全上下文。此外,SQLAgent利用灵活地代理方案允许工作步骤运行以及访问必要的资源。所有这些特性都使得SQLServer更加灵活、更加安全。细粒度权限SQLServer2008和SQLServer2005比旧版安全的诸多方面之一就是改进了权限的粒度。以前,管理员必须授予用户固定服务器角色或固定数据库角色的成员,以执行特定的操作,但这些角色的权限通常会远远超出简单任务的需要

27、。“最少特权”的原则要求用户只能拥有完成工作所需的最低权限,因此为达到小目标而分配用户高级角色就违背了该原则。从SQLServer2000开始,固定服务器和数据库角色集已发生了巨大变化,当用户或应用程序需要所有或大多数已定义的权限时,仍可利用这些预定义的权限。或许最大的变化就是添加了public服务器角色。但是,“最少特权”的原则要求用户不能使用无法恰好提供主体完成工作所需权限的角色。虽然为发现及分配主体所需权限需要更多工作,但这会带来更加安全的数据库环境。主体和安全实体在SQLServer2008中,“主体”就是可以访问受保护资源且能获得访问资源所需权限的任何个人、组或流程。与旧版SQLSe

28、rver一样,可以在Windows中定义主体,也可将没有对应Windows主体的SQLServer登录作为其基础。下面的列表显示了SQLServer2008主体的层次结构,但不包括固定服务器和数据库角色,还显示了将登录和数据库用户映射为安全对象的方法。主体的影响范围取决于它的定义范围,这样Windows级别的主体就比SQLServer级别的主体拥有更大的影响范围,而后者的影响范围又大于数据库级别的主体。每个数据库用户都会自动隶属于固定的public角色。Windows级别的主体 Windows域登录 Windows本地登录 Windows组SQLServer级别的主体 SQLServer登录

29、映射为Windows登录的SQLServer登录 映射为证书的SQLServer登录 映射为不对称密钥的SQLServer登录数据库级别的主体 数据库用户 映射为SQLServer登录的数据库用户 映射为Windows登录的数据库用户 映射为证书的数据库用户 映射为不对称密钥的数据库用户 数据库角色 应用程序角色公共角色授权的另一部分就是可用以保护权限授予操作或拒绝授予操作的对象。图4列出了SQLServer2008中安全实体对象的层次结构。在服务器级别,可以保护网络端点,以控制进出服务器的通信通道,以及数据库、绑定角色和登录。在数据库和架构级别,用户创建的每一个对象都被当作安全主体,包括那些

30、驻留在架构中的对象。服务器数据库端点远程绑定路由SQLServer登录数据库应用程序角色程序集不对称密钥证书数据库用户固定数据库角色全文目录消息类型服务服务合同对称密钥架构默认函数过程查询状态队列规则同义词表触发器类型视图XML架构集合图4:SQLServer2008中的安全实体对象层次结构角色和权限要了解可在SQLServer中可用的权限数量,可以调用fn_builtin_permissions系统函数:SELECT*FROMsys.fn_builtin_permissions(default)下面是SQLServer2005中的新权限类型: CONTROL。授予与所有者类似的权限,可有效地

31、将所有已定义的权限授予对象及其范围内的所有对象,包括能够授予其他被授予者任何权限。CONTROLSERVER相当于授予sysadmin特权。 ALTER。授予权限以更改安全实体对象的任何属性,但修改所有权除外。从本质上讲,它将为同一范围内的ALTER、CREATE或DROP安全实体对象授予权限。例如,为数据库授予ALTER权限就可以修改它的表。 ALTERANY。授予权限以修改指定类型的任何安全实体对象。例如,授予ALTERANYASSEMBLY就可以修改数据库中的任何.NET程序集,而在服务器级别授予ALTERANYLOGIN,则用户将可修改该服务器上的任何登录。 IMPERSONATEON

32、。授予权限以扮演特定用户或登录。本章稍后将讲到,该权限是为存储过程切换执行上下文所必需的。在以批处理方式执行扮演时也需要该权限。 TAKEOWNERSHIP。授予权限以保证获得对安全实体的所有权,使用的是ALTERAUTHORIZATION语句。SQLServer2008仍然使用大家熟悉的GRANT、DENY和REVOKE架构,将安全实体对象的权限分配或拒绝分配主体。GRANT语句现在提供了所有的新权限选项,如授予范围以及主体是否能够向其他主体授予权限等。SQLServer不允许使用跨数据库权限。要授予此类权限,要在每个数据库中创建复制用户,并分别为各个数据库的用户分配该权限。与旧版SQLSe

33、rver类似,激活应用程序角色时,其他权限在角色激活期间内都会被暂时取消。然后,在SQLServer2008和SQLServer2005中,可以取消设置应用程序角色。SQLServer2000与新版本之间的另一个区别就是,在激活应用程序角色时,角色也会暂时取消任何服务器特权,包括public。例如,如为public授予VIEWANYDEFINITION,则应用程序角色将不会允许使用该权限。在应用程序角色上下文中访问服务器级元数据时,这一点最明显。注释应用程序角色的新首选替代方法就是在代码模块中使用执行上下文。有关更多信息,请参阅本文的“执行上下文”部分。i授予特定权限隐含地可以传送其他权限的权

34、利。例如,架构的ALTER权限“涵盖”更细的粒度和低级权限,这些都是隐式定义的。图5为ALTERSCHEMA的隐含权限。请参阅SQLServerBooksOnline上的“Covering/ImpliedPermissions(DatabaseEngine)”,以了解ImplyingPermissions用户定义函数的Transact-SQL代码,该函数从sys.fn_builtin_permissions目录视图中收集层次结构列表,并识别层次结构中每种权限的深度。在主数据库中添加ImplyingPermissions后,执行该语句将产生图5的结果,传入对象和权限类型:SELECT*FROMm

35、aster.dbo.ImplyingPermissions(schema,alter)ORDERBYheight,rank这是浏览SQLServer2008权限层次结构的理想方法。图5:ALTERSCHEMA的隐含权限层次结构考虑可用的主体数量和类型、服务器和典型数据库中的安全实体对象数量,以及可用权限、涵盖权限、隐含权限的数量时,会很容易发现SQLServer2008中的权限的粒度非常细。创建数据库需要对其安全需要进行更详细的分析,并谨慎控制所有对象的权限。不过,这种分析工作是值得做的,使用SQLServer2008中的这些功能会使数据库更加安全。元数据安全细粒度权限架构的一个优点就是SQL

36、Server不仅保护元数据,也保护数据。在SQLServer2005之前,能够访问数据库的用户可以看到数据库中所有对象的元数据,无论该用户是否可以访问其中的数据或是否能够执行存储过程。SQLServer2008仔细检查数据库中主体所拥有的各种权限,仅当主体具有所有者身份或拥有对象的某些权限时,才会显示该对象的元数据。还有一种VIEWDEFINITION权限,即使没有该对象的其他权限,利用它也能查看元数据信息。这种保护扩展到了某些操作返回的出错消息,这些操作试图访问或更新用户无权访问的对象。SQLServer不会确认确实存在一份名为Address的表,使攻击者确信自己的方向是正确的,而是返回提示

37、各种可能性的出错消息。例如,如果用户无权访问数据库中的对象,并且试图访问Address表,则SQLServer将显示下列出错消息:Msg3701,Level14,State20,Line1CannotdropthetableAddress,becauseitdoesnotexistoryoudonothavepermission.通过这种方式,攻击者无法确认是否真的存在Address表。但是,通过排查问题,仍然有很小的攻击可能性。SQLServerAgent代理关于SQLServer2008中的授权模型,一个最佳示例就是SQLServerAgent。可以定义往往与Windows登录相关的各种凭

38、证,且它们将链接到具有必要权限以执行一个或多个SQLServerAgent步骤的用户。然后,SQLServerAgent代理将凭证与工作步骤链接到一起,以提供必要的权限。这就以颗粒方式实现了“最少特权”原则:只授予工作步骤必要的权限,仅此而已。可以随意创建代理,并使其与一个或多个SQLServerAgent子系统相关联。这与SQLServer2000中的全能式代理帐户截然不同,后者允许用户在SQLServerAgent的任何子系统中创建工作步骤。注释在SQLServer2000中升级服务器时,将创建单代理帐户,而且所有的子系统都将被分配这个单代理帐户,以使现有的工作继续运行。升级完成后,将创建

39、凭证和代理帐户,通过实施更安全、粒度更细的代理集,以保护服务器资源。图6为ManagementStudio中的ObjectExplorer,它显示了SQLServerAgent中可用的子系统列表。每个子系统都可以拥有一个或多个与之相关的代理,以为工作步骤分配适当的权限。该架构有一个例外,即Transact-SQL子系统需要在模块所有者的权限下执行,这与SQLServer2000中的方式相同。图6:可与代理相关联的SQLServerAgent子系统新安装了SQLServer之后,只有SystemAdministrator角色有权维护SQLServerAgent工作,而且只有sysadmins能够

40、使用ManagementStudioObjectExplorer中的管理窗格。SQLServer2008允许用户利用其它一些角色授予各种级别的权限。可以分配用户SQLAgentUser、SQLAgentReaderRole或SQLAgentOperator角色,其中每一个角色都会分配级别逐渐提高的权限,以创建、管理及运行工作,也可分配MaintenanceUser角色,它拥有SQLAgentUser的所有权限,还能创建维护计划。当然,sysadmin角色的成员可以在任何子系统中随意执行任何操作。要授予其他任何用户使用子系统到权限,需要创建至少一个代理帐户,这可授予访问一个或多个子系统的权利。图

41、7显示了如何将代理帐户MyProxy分配多个主体,这里包括一位用户和一个角色。代理帐户使用凭证,将其链接到帐户,通常是链接到域帐户,并且拥有在操作系统中执行各种任务的权限,这些权限也是子系统所必需的。每个代理都拥有一个或多个与之相关的子系统,它们使主体能够运行这些子系统。图7:用于各种子系统的SQLServerAgent代理帐户下列代码就是实施图7所示架构所需的Transact-SQL代码。首先创建凭证和一个数据库对象,后者将提供操作系统帐户链接,该帐户有权在子系统中执行所需动作。然后它添加MyProxy代理帐户,该帐户其实只是凭证的友好名称。接着,它将代理分配两个主体,就是SQLServer

42、登录和定制角色。最后,它使代理与4个SQLServerAgent子系统相关联。.CREATECREDENTIALMyCredentialWITHIDENTITY=MyDOMAINuser1GOmsdb.sp_add_proxyproxy_name=MyProxy,credential_name=MyCredentialGOmsdb.sp_grant_login_to_proxylogin_name=MyLogin,proxy_name=MyProxyGOmsdb.sp_grant_login_to_proxylogin_name=MyRole,proxy_name=MyProxyGOsp_gr

43、ant_proxy_to_subsystemproxy_name=MyProxy,subsystem_name=ActiveScriptingGOsp_grant_proxy_to_subsystemproxy_name=MyProxy,subsystem_name=CmdExecGOsp_grant_proxy_to_subsystemproxy_name=MyProxy,subsystem_name=ANALYSISQUERYGOsp_grant_proxy_to_subsystemproxy_name=MyProxy,subsystem_name=DTSGOSQLServerManage

44、mentStudio完全支持凭证和代理的创建,如图8所示。这将创建与上一段代码相同的代理。图8:SQLServerManagementStudio中的SQLServerAgent新代理代理不只是操作系统中杜绝安全问题的一种方式。如果与代理一起使用的凭证没有Windows权限,如通过网络写入目录的权限,则该代理也不会有此权限。也可利用代理为xp_cmdshell授予有限的执行权限,因为它是黑客最喜欢利用的工具,只要他们能够成功威胁到SQLServer计算机的安全,就会进一步利用该工具将其威胁范围扩展到网络空间。代理提供了该领域的保护机制,因为纵使主体在网络上不受任何限制,例如域管理员主体,通过代

45、理执行的任何命令也只拥有凭证帐户的有限权限。执行上下文一直以来,SQLServer都支持所有权链的概念,它可确保管理员和应用程序开发人员能够在数据库的入口点提前检查权限,而不是用来提供所有被访问对象的权限。只要调用模块(存储过程或函数)或视图的用户拥有模块的执行权限或视图的选择权限,而且模块或视图的所有者曾是被访问对象的所有者(所有权链),则不会检查基本对象的任何权限,而且调用者将收到请求的数据。假如因为代码的所有者没有被引用对象的所有权,而导致所有权链被打断,SQLServer将按照调用者的安全上下文检查权限。如果调用者拥有访问对象的权限,SQLServer将返回数据。如果没有此权限,SQL

46、Server将提示出错。所有权链有一些局限性:它只适用于数据操作,而不适用于动态SQL。而且,如要跨越所有权边界访问对象,就不可能实现所有权链。因此,权限提前检查行为只适用于某些场合。SQLServer2008能够利用执行上下文标记模块,这样模块中的语句即可供与调用用户并列的特殊用户执行。通过这种方式,调用用户仍然需要模块的执行权限,而SQLServer将按照模块的执行上下文检查模块中语句的权限。可以利用此行为客服所有权链的某些缺陷,因为它适用于模块中的所有语句。想要执行权限提前检查的管理员可以利用执行上下文达到这一目的。在定义用户定义函数(除了内联的表值)、存储过程和触发器时,可以利用EXECUTEAS子句指定SQLServer要使用哪个用户的权限验证对对象以及过程引用数据的访问:CREATEPROCEDUREGetData(Tablevarchar(40)WITHEXECUTEASUser1SQLServer2008提供了4种EXECUTEAS选项。 EXECUTEASCALLER指定代码在模块调用者的安全上下文中执行。不会出现假冒的现象。调用者必须拥有所有被引用对象的访问权限。但是,SQLServer只检查被打断的所有权链

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁