VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > T-SQL >
  • sql语句大全之SQL_Server_2008安全概述(一)

SQL Server 2008提供了丰富的安全特性来保护数据和网络资源。SQL Server提供了丰富的工具来配置服务器,特别是SQL Server Surface Area Configuration Tool,它的验证特性更强了,因为SQL Server与Windows验证更紧密地集成在一起,并保护脆弱的或是久远的密码。
1.导言
  随着网络越来越多的连接到一起,安全就变得更为重要。必须保护你的公司的设备,特别是它的数据库,它包含了你公司的非常重要的信息。安全是一个数据库引擎的重要特性之一,它保护企业免受众多威胁。Microsoft® SQL Server™ 2008的安全特性是设计用来使它更加安全并使得对于那些有责任保护数据安全的人们来说安全是触手可及和容易理解的。
  在过去的几年,人们已经对什么是基于计算机的系统的安全开发了一套非常成熟的理念。Microsoft 站在这个开发的最前沿,而SQL Server 是第一代完全贯彻了这个理念的服务器产品中的一个。它采用了最小权限的重要原则,所以你不需求为用户授予比他们执行他们的工作所需的更多的权限。它为防范提供了深入渗透工具,以便你可以实施措施来阻止最具技巧的攻击者。
  讨论了许多关于Microsoft指导公司里所有软件部署的可信赖计算计划(Trustworthy Computing initiative)。要获得更多的信息,请查看可信赖计算网站(http://www.microsoft.com/mscorp/twc/default.mspx).
  这个计划的四个重要组成部分是:
  · 设计安全。软件需要一个安全的设计作为抵制攻击者和保护数据的基础。
  · 缺省安全。系统管理员应该不需要花费时间去做一个新的安装安全;它应该可以按缺省来完成。
  · 部署安全。软件应该帮助保持它自己的最新安全补丁包的更新和协助维护。
  · 通信。传达最佳方法和威胁信息,以便管理员可以预先保护他们的系统。
  在SQL Server 2008中体现了这些指导原则,它提供了你需要保护你的数据库所需的所有工具。
  这篇白皮书探讨了对于系统和数据库管理员来说最重要的安全特性。它从讲述SQL Server 2008是怎样简单而安全地进行安装和配置。它探讨了验证和授权特性,这些控制对服务器的访问和决定一个用户一旦通过了验证他可以做什么。它最后讲述了一个管理员所需要了解的数据库安全特性,以便能够为数据库和访问这些数据库的应用程序提供一个安全的环境。
  2.安全配置
  一个安全的SQL Server 安装的第一个要求就是要有一个安全的环境。一个运行SQL Server 2008的服务器的外部安全要求没有什么改变。你需要保护服务器和定时地备份数据,如果它连接到网络上那么将它放到一个或多个防火墙后面,避免在一个装有其它服务器应用程序的计算机上安装SQL Server,并只使用所要求的最少的网络协议。在一个Microsoft Windows Server® 2003或Microsoft Windows Server® 2008计算机上安装SQL Server,以便它可以充分利用操作系统级别的安全保护。进一步的,在一个或多个NTFS分区上的安装是最安全的。
  确保环境是安全的之后,安全地安装SQL Server 2008是极为重要的。这个安装过程执行所有常规的安全工作,并有一个System Configuration Checker 会通知你所有可能会引起问题的漏洞。安装SQL Server 2008默认情况下不使用所有的特性。而是安装核心关键的和广泛使用的特性。其它可能在生产环境中不需要的特性会被默认的关闭。你可以使用所支持的工具将你需要的特性打开。
  这是可信赖计算安全所默认的所有要求。它意味着SQL Server 2008在你安装的时候是安全的,默认设置也是安全的。一个基本的数据库服务器所不需要的特性没有被安装,旨在降低外围应用。因为按默认的情况下不是系统中所有的特性都可用,这在系统安装图象方面推出了一个异构。因为这样限制了具有易受潜在攻击的特性的系统的数目,所以它帮助防范大范围的攻击或是蠕虫。
  2.1 Windows更新
  你在企业中部署了SQL Server 之后就很容易发现新的威胁和漏洞。Windows 更新是设计用来确保及时下载可以显著减少特殊的安全问题的应用程序补丁包。你可以使用Windows 更新来自动地应用SQL Server 2008补丁包,从而减少由已知的软件漏洞所引起的威胁。在大多数企业环境中,你应该使用Windows Server Update Service (WSUS)来管理补丁包的发送和在整个企业中进行更新。
  2.2 外围应用配置
  SQL Server 2008具有许多特性,其中许多是以关闭状态安装的。例如,CLR集成、数据库镜像、调试、Service Broker 和邮件功能都安装了,但是没有运行也不可用,除非你明确地将它们打开或是配置它们。这个设计与SQL server所默认的安全中的外围应用范例的缩减是一致的,它导致降低了攻击外围应用。如果一个特性不可用或没有开启,那么一个攻击者是不能利用它的。
  要权衡的是,要跟踪所有开启特性的Transact-SQL语句是很耗时的。甚至当你发现sp_configure system存储过程做了许多你所需要的,但仍然需要编写非原有的代码,如下所示:
以下是引用片段:
  sp_configure 'show advanced options', 1
  reconfigure with override
  sp_configure 'clr enabled', 1
 
  有许多配置选项要花费时间来编写这种代码——特别是当你在企业中部署了多个SQL server实例的时候。SQL Server 2008包含一个基于政策的管理技术,叫做声明式管理框架(Declarative Management Framework,DMF)。DMF提供了一些配置分面,其中每一个都定义了一组相关的配置设置或属性。你可以使用这些分面来创建指定想要的配置选项的设置的条件,并将这些条件作为政策实施到企业中的SQL Server实例上。
  在SQL Server 2008中所包含的分面的其中之一是Surface Area 分面,你可以使用这个分面来定义一个控制许多SQL Server 2008特性的状态的政策。通过创建一个定义你想要的用于你的服务器的surface area设置的政策,你可以很容易地在你公司里的所有SQL Server实例上实施最小限度的surface area,并且可以降低恶意攻击的可能性。
  3. 验证
  Microsoft部署SQL Server 2000时是当数据和服务器要求保护但不需要抵挡如今在网络上所看到的攻击的时候。基本的验证问题仍然相同,“你是谁、你怎样证明?”但是SQL Server 2008提供更多强大的验证特性,它们提供了更好的支持,在服务器的安全防卫上让好人通过,把坏人阻挡在外。
  SQL Server 验证提供了对不是基于Windows的客户端或应用程序的验证,它使用一个简单的连接字符串,其中包含用户ID和密码。尽管这个登陆易于使用并在应用程序开发人员中很流行,但是它不像Windows 验证一样安全,是不建议使用的验证机制。
  SQL Server 2008改进了SQL Server验证的选项。首先,它支持默认情况下通过使用SQL产生的证书进行路线加密。管理员不需要获得和安装一个有效的SSL证书来确保SQL证书流程的路线是安全的。有了SQL Server 2008 自动生成这些证书,当传送登陆包时它在默认情况下自动加密路线。这发生在客户端是SQL Server 2005级别或以上的情况下。
  注意 当攻击者在网络上搜寻时,SQL Server产生的本地证书防止被动的中间人攻击。为了更有效地保护你的系统免受中间人攻击,你应该部署和使用客户端信任的证书。
  SQL Server 2008进一步地加强了SQL Server验证,因为默认情况下,在与Windows 2003 server或以上版本结合使用时,数据库引擎目前采用Windows Group Policy用于密码复杂度、密码期限和在SQL登陆中的账户锁定。这意味着你可以对你的SQL Server帐户实施Windows密码政策。
  3.1 实施密码政策
  对于SQL Server 2008,密码政策的实施是内嵌到服务器中的。使用NetValidatePasswordPolicy()API,它是Windows Server 2003上的NetAPI32 库的一部分,SQL Server 在验证期间和按照Windows对于密码强度、期限和帐户锁定的政策进行密码的设置和重置期间进行密码验证。表3列出了这个政策的组成部分。
种类 名称 注释
密码政策 实行密码历史 防止用户重用旧的密码,例如在两个密码间转换。
  最小的密码长度  
  密码必须满足复杂度要求 看下面的文本。
  使用可逆的加密来存储密码 允许从Windows获得密码。你应该永远不使用这个,除非应用程序不要求安全的密码。(这个政策不适用于SQL Server。)
密码期限 最大密码期限  
  最小密码期限  
帐户锁定政策 帐户锁定持续时间 帐户锁定的Windows持续时间,以分钟计。当锁定极限>0时,Windows 使得这个可用。
  帐户锁定极限 不成功的登陆尝试的最大次数。
  解锁后重置帐户锁定计数器 在Windows 重置了不成功的登陆尝试的计数器后以分钟来计时。当锁定极限>0时,Windows 使得这个可用。
  表 3 Windows Server 2003密码政策组成部分
  如果你不是运行Windows Server 2003或以上版本,那么SQL Server 还会使用简单的检查来实施密码增强,防止密码是如下情况的:
  · Null或空
  · 与计算机名称或登陆名相同
  · 任何是“password”、“ admin”、“ administrator”、“ sysadmin”的密码
  相同的复杂度标准应用于你在SQL Server中创建和使用的所有密码,包括用于sa 登陆、应用角色、用于加密的数据库主键、以及相应的密钥的密码。
  SQL Server 总是默认检查密码政策,但是你可以对单个的登陆实行挂起,通过使用如下所示的代码中的CREATE LOGIN或ALTER LOGIN:
以下是引用片段:
  CREATE LOGIN bob WITH PASSWORD = 'S%V7Vlv3c9Es8',
  CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF
 
  CHECK_EXPIRATION 使用Windows Server 2003政策的最大和最小密码期限部分,而CHECK_POLICY 使用其它的政策设置。
  管理设置还允许打开和关闭密码期限检查,并使得当一个用户第一次登陆时要修改密码。在CREATE LOGIN 中的MUST_CHANGE 选项使得用户在他们下一次登陆的时候修改密码。在客户端,它允许在登陆的时候修改密码。所有的新客户端数据访问技术将支持这一点,包括OLE DB和OLE DB ,还有客户端工具,例如管理套件。
  如果用户登陆尝试失败了太多次,超过了密码政策的允许次数,SQL Server会基于在Windows 政策中的设置锁定这个帐户。一个管理员可以使用ALTER LOGIN语句为这个帐户解锁:
以下是引用片段:
  ALTER LOGIN alice WITH PASSWORD = '3x1Tq#PO^YIAz' UNLOCK
 
  3.2 终端验证
  SQL Server 2008支持传统的用于客户端访问数据的二进制表格数据流(Tabular Data Stream),还支持本地的使用HTTP的XML Web service 访问。允许通过HTTP来访问的主要好处是了解Web service的任何客户端软件和开发工具都可以访问存储在SQL Server中的数据。这意味着SQL Server 2008可以提供独立的Web service 方法,并且是服务面向架构(SOA)中的一个完整的终端。
  使用SQL Server 2008作为一个Web service 主机需要两个常规步骤,每一个都有许多可能:定义存储过程和用户定义的提供了Web service方法的功能、定义一个通过HTTP接收方法调用和将它们发送到适合的过程中去的HTTP终端。这篇白皮书专注于相关的安全问题。要查看配置和使用HTTP终端的细节,请查看SQL Server在线书籍的CREATE ENDPOINT(Transact-SQL)。
  因为SQL Server 中的XML Web service使用HTTP和默认情况下的80端口,大多数防火墙允许它通过。然而,一个不受保护的终端对于攻击者来说是一个潜在的美味,你必须保护它,所以SQL Server 拥有强大的验证和授权能力。默认情况下,SQL Server 没有任何终端,你不得不具有一个高级别的权限来创建、修改和开启HTTP终端。
  SQL Server 2008提供了五个验证类型,和IIS用于网站验证所使用的类似。
  · 基本验证
  基本验证是HTTP 1.1协议的一部分,它将登陆凭证放在基于-64编码的文本中传输。这个凭证必须与一个Windows登陆相匹配,然后SQL Server 使用它来验证对数据库资源的访问。如果你使用基本验证,你不能将PORTS参数设置为CLEAR ,而是必须设置它为SSL,并使用一个SSL的数字证书来加密与客户端软件的通信。
  · 摘要验证
  摘要验证也是HTTP 1.1协议的一部分。它在发送给服务器之前使用MD5哈希了凭证以便它不能通过电线发送它们,甚至是以加密的形式。这个凭证必须匹配一个有效的Windows域帐户;你不能使用本地用户帐户。
  · NTLM验证
  NTLM使用一开始在Microsoft Windows NT®中推出的挑战响应协议,并在之后的所有的Windows客户端和服务器版本中获得支持。它在客户端和服务器都是Windows系统时提供了安全验证,并要求一个有效的域帐户。
  · Kerberos验证
  Kerberos验证在Windows 2000和之后的版本中有效,它基于一个在许多操作系统中可用的行业标准协议。它允许相互验证,其中客户端和服务器都会一定程度上确定另一个的验证,并提供一个非常安全的验证形式。为了在Windows Server 2003上使用Kerberos,你必须使用SetSPN.exe工具用Http.sys注册Kerberos服务主体名称(Service Principal Name,SPN),SetSPN.exe工具是Windows支持工具的一部分。
  · 集成验证
  集成验证提供了最好的NTLM和Kerberos 验证。服务器使用客户端所要求的这两个验证类型之一,允许客户端支持最安全的验证,同时使得服务可用于Windows的之前版本。你可以在Windows 2003中配置Http.sys以决定它应该使用哪个协议。
  这个用于终端的验证方法使用CREATE或ALTER ENDPOINT语句的AUTHENTICATION属性来设置。例如,下面的代码创建了一个使用Kerberos来验证的终端:
以下是引用片段:
  CREATE ENDPOINT myEndpoint
  STATE=STARTED
  AS HTTP (PATH = '/MyHttpEndpoint',
  AUTHENTICATION = (KERBEROS),
  PORTS = (CLEAR),
  SITE = 'MySqlServer')
  FOR SOAP (WSDL = DEFAULT,
  DATABASE = 'myDB',
  NAMESPACE = 'http://example.com/MySqlServer/myDB/WebService')
 
  SQL Server 2008支持监听HTTP和在TCP上的用户定义的端口的终端。你还可以使用许多格式来格式化请求:SOAP、Transact-SQL 、专用于Service Broker 的格式、和另一个用于数据库镜像的格式。当使用SOAP时,你可以利用Web服务安全性(WS-Security)头来验证SQL Server 登陆。
  Microsoft 实行Web Service 终端验证来支持极广泛的协议和规格,本篇白皮书描述了其中的一部分。你将需要打开你的验证选项并确保客户端可以提供所需的凭证类型。一旦SQL Server 验证通过了客户端,你就可以授予这个登陆被授权可以访问的资源,如下一节所描述的。
 

相关教程