保护 SQL Server 2005 Express Edition Server ---- 转载

什么是 SQL Server Express

SQL Server 2005 Express Edition 是 Microsoft SQL Server 的 Microsoft 桌面引擎 (MSDE) 版本的替代产品。它的体系结构完全重新设计,您可以像使用 Microsoft Access/JET 那样安装和使用它,但是不会出现与该方法相关联的问题。SQL Server 2005 Express Edition 为满足下列应用程序的需要而构建更好的解决方案,这经历了很长的历程:

替代 JET 数据库。也就是说,如果需要,可以由 IT 部门代替 DBMS,这一方面可以满足 HIPA 安全性的需要,一方面可以使用所有 SQL Server 保护数据和参照安全性的功能,并且无需考虑用户采取的手段。(HIPPA 或 HIPAA(通常简略为 HIPA)指联邦立法部门,该部门要求将可靠的安全性和访问保护用于存储个人医疗卫生信息的数据库中。)

无需升级到 SQL Server Standard Edition,DBMS 即可从单个用户扩展到很多用户,并且 DBMS 无需担心在最需要调控器时,调控器的性能降低。

可以轻松地在小型网站上和客户端/服务器配置中工作的 DBMS。

当 Service Pack 可用时,可以轻松地安装并就地更新的 DBMS 引擎。这意味着安装例程可以轻松地集成到应用程序的部署脚本中。

通过简单地指向安装或传递到应用程序中的 DBMS 文件,就可以对其进行访问的 DBMS。因为 SQL Server Express 旨在允许数据库随时连接,它可以比以前更加简单地使用“松散”的 SQL Server MDF 数据库文件并利用应用程序对它们进行部署。这使得部署独立的 SQL Server Express 数据库 .MDF 文件非常简单,就像利用 JET 数据库完成那样。

引用 SQL Server 的共享实例的标准方法。当安装 SSE 时,默认情况下安装为具有相同的实例名称 SQLEXPRESS。这意味着如果假设应用程序安装例程利用了该功能,无论应用程序的连接字符串是安装在本地系统上还是安装在局域网上,它都可以更简单地针对 SQL Server Express。我会在稍后谈论实例问题。

我的新书,Hitchhiker's Guide to Visual Studio and SQL Server 2005 (Addison Wesley),将会用一整节来讨论 SQL Server 2005 Express Edition,但对于本文,我将重点限制在使用 SQL Server 2005 Express Edition Beta 2 的托管安全性上。随后我将会讨论下列内容:

什么是“安全”的系统?对于小型系统而言,安全性意味着什么呢?

MSDE 开发人员面临着什么问题?

SQL Server Express 如何解决这些问题?

应用程序如何获得对 SQL Server Express 数据库的访问?

如何保护 SQL Server Express 数据库?

在撰写本文时,SQL Server 2005 Express Beta 2 不应该用于产品系统中,不应该公开在 Web 上或在 EULA 限制外使用。

什么是“安全”的系统?

在我们深入讨论 SQL Server 2005 Express Edition 的技术优点以及如何配置其安全功能之前,我认为有必要定义安全性的实际含义。当然,对于小型企业或部门系统来说,当数据服务器受到安全威胁或其数据丢失或损坏时,该公司与大型公司一样容易面临失败。SQL Server Express 可以驻留在 Web 服务器上,为 ASP 应用程序提供 SQL Server 服务。因此,正常运行时间、可靠性和安全性也意味着对 Web 服务器应用程序公开信息的能力,但同时还不易受到来自 Web 的攻击。对于将编写代码和构建应用程序作为兼职的“经验不足的开发人员”来说,SQL Server Express 也是非常理想的。这些医生、律师、接待员和出租车司机都需要一个用于存储和检索数据的简单、安全、稳定的方式,而不必考虑在后台正在为他们所做的操作。

安全性还包括应用程序设计程序和开发人员要防止数据丢失而采取的这些步骤,无论丢失是由于意外、疏漏或是恶意攻击所致。安全性意味着将那些不应该访问数据的人员拒之门外,并保护物理文件和系统本身。它意味着制作备份并能够无缝地执行还原。利用 SQL Server Express 系统,尤其具有挑战性,因为与通常不同,没有专职系统管理员或 IT 部门介入并执行周期性的备份,或者当系统发生故障时从各个部分中进行还原整个系统。具有安全的系统意味着当发生问题时保持您的工作(并且可能会有提升),然后可以快速、安静、高效地恢复应用程序。我将会指出很多事项,您可以完成它们使应用程序更持久、更不容易受到攻击并且更易于维护。

问题是什么?

相当长时间以来,我一直都在赞美 SQL Server 的 MSDE 版本。这是因为我确信对于需要“少量用户”数据存储区的应用程序,或应用程序不需要对远程 DBMS 引擎进行访问的情况下,MSDE 是非常好的解决方案。尽管 MSDE 已经广泛地被大量关键业务采用,它们通常必须依赖自己来处理很多问题 — 实现非标准解决方案,该解决方案有时与解决相同或不同问题的其他公司的尝试相冲突。这些冲突包括:

部署:如果将 SQL Server 与应用程序一起安装将会怎样?下面就是对相关问题的阐述。例如,如果 SQL Server 已经安装,又该如何呢?如果实例名与其他现有实例冲突,又该如何呢?应用程序应该共享一个现有的 SQL Server 实例还是创建一个独特的实例呢?当卸载安装有共享 SQL Server 实例的应用程序行时会发生什么情况?它还会卸载 SQL Server 实例吗?如果会,那么该实例宿主的其他数据库会发生什么情况呢?

安全性:如果选择共享一个 SQL Server 实例,应该为 SA 使用什么密码呢?如何设置用户帐户?应用程序是否应该只是使用由域控制器管理的集成安全性呢?如果没有 Active Directory,又该如何呢?如何将数据库安装在目标 MSDE 服务器上?安装后,数据库是否对服务器上的其他应用程序可见呢?应用程序如何隐藏专用数据呢?

性能: MSDE 使用限制服务器上并发操作数量的调控器。如果单个用户应用程序需要同时执行几个操作,但是调控器不发挥作用并使其速度下降,又该如何呢?坦白地说,我不确认这个问题是十分普遍的。我曾经听到非常少的人抱怨调控器终止,并且使他们的应用程序运行得非常慢。的确,我曾听说应用程序运行得不是特别快,但是这(通常)是由于野蛮强制查询或“置疑的”数据库实现导致的结果。

可伸缩性: MSDE 数据库限制在 2GB。如果您需要比这更多的数据,又该如何呢?这是否意味着您必须升级目标系统以使用 SQL Server Standard Edition,而这可能比期望使用它的系统花费更多?另外,我所听到的最多的抱怨就是人们存储二进制大对象 (BLOB)(例如数据库中的文档或图片)时涉及的问题。一旦它们将 BLOB 替换为一个到 BLOB 文件的路径,它们的数据库就缩小到非常合理的大小了。

工具: SQL Server 的 MSDE 版本是“部署”配置。同样,它并不包括管理服务器或它所管理的数据库所需要的任何工具。我通常会推荐开发人员购买 49 美元的 (SRP) Developer Edition,它包括用于管理其 MSDE 数据库的整套工具。但是,由于许可限制,这些工具无法利用应用程序进行部署。这意味着开发人员必须构建他们自己的客户端工具或简单地将需要的功能构建到他们已部署的应用程序中。

管理: 无论它是如何完成的,应用程序必须要承担很多管理性责任。对于没有“SA”(系统管理员)值守的 SQL Server Express 系统而言,这一点尤为重要。这些管理责任包括管理登录帐户、权限、备份、还原和日志维护。最终用户通常不具有执行这些操作的能力并且不应该被信任来执行这些操作 — 这取决于应用程序。因为 JET 数据库需要周期性的压缩或修复,MSDE(和任意 SQL Server 数据库)需要周期性地备份(和转储)日志和数据库。当数据库没有进行集中管理时(集中管理可以更简单地管理管理性和维护任务),这个问题就变得相当重要。同样,这取决于应用程序。

Service Pack 由于 MSDE 通常嵌入到应用程序中,用户可能不知道他们已经安装了一个 SQL Server 实例。同样,他们也没有注意到他们可能需要应用 SQL Server Service Pack 来保护他们的数据和系统以免受攻击,即使他们在 5 点钟新闻时看到它时,还在正常运转。为了防止由和其他攻击病毒引起的某些问题,MSDE SP3(a) 禁用了网络连接,因此应用程序无法通过 Intranet(或 Internet)连接到服务器。问题在于 Service Pack 未能应用到很多系统中,因为用户不知道它是必要的,或者不知道如何应用修补程序。将 SQL Server 更新应用到 MSDE 安装这个问题仍然难以解决,因为 Microsoft 升级不是始终可以与用于部署 MSDE 应用程序和数据库的自定义安装脚本一起使用的。


SQL Server Express 如何解决这些问题?

近年来,世界范围的开发人员、架构师和 IT 经理一直对上述问题进行着讨论。尽管没有对所有这些问题的解决方案,但是通过一些相当基本的改动,SQL Server Express 已经解决了其中的很多问题。在了解差异之前,知道什么内容没有变化非常重要。SQL Server 2005 Express Edition 仍然是免费的(具有惯例的 licensing and use restrictions),它仍然支持订阅者复制以及实际上与 MSDE 相同的所有功能。新的 SQL Server Express 版本无法宿主报告服务,但它可以作为宿主在 SQL Server 2000 Standard Edition 上的服务器的数据源。(有关 SQL Server 报告服务的详细信息,请参阅 Boost.net 网站。)默认情况下,安装程序仍然禁用将 SQL Server Express 实例公开到网络的能力(首次在 MSDE SP3 中实现)。让我们更仔细地考察一下 SQL Server Express 是如何解决每个问题的。

部署

SQL Server Express 设计为可以通过 Web 下载,并可以像任何其他系统软件那样安装在用户系统上。(这假设系统管理员安装了 SQL Server Express。)您可以使用交互式安装程序(我将在稍后进行说明),或运行命令行安装可执行文件。利用“安静”模式,用户根本不需看到任何 SQL Server Express 安装对话框。

当安装 SQL Server Express 时,默认情况下安装程序会尝试创建一个公用的 SQLEXPRESS 实例。如果它已经准备就绪,将提示您选择放弃安装或是选择另一个实例名。此处的思想在于让使用 SQL Server Express 的应用程序共享一个公用实例,而不是创建它们自己的实例。这使得应用程序配置更加简单,同时还可以降低用户系统上的内存和磁盘占用空间。

如果卸载应用程序,最好还是卸载您所安装的任意唯一的 SQL Server Express 实例。但是,Microsoft 建议保留所有就绪的 SQLEXPRESS 实例,除非您确认系统没有任何其他使用该实例的相关应用程序。确定这一点的一种方法是搜索其他应用程序可能连接或创建的其他的 Master 数据库。

安全性

默认情况下,SQL Server Express 配置为保护您的数据。在安装时,您会有机会根据要求进一步加强安全性或放松安全性。您必须首先做出的决定就是选择安装实用工具配置 SQL Server Express 实例的方式。实例就是程序的一个副本。从 SQL Server 2000 版本开始,SQL Server 允许您安装服务器的几个独立的实例。每个实例都被视为独立的实体:每个实例具有其自己的 Master 数据库、其自己的安全性配置以及其自己的磁盘和内存中的位置。安装 SQL Server Express 后,每个应用程序(或您)必须决定它是否与使用该服务器的共享实例的其他应用程序共存,或者它是否要求其自己的独立实例。有几个与每个配置相关联的安全性问题,我将在下面进行阐述。请注意,SQL Server Express 允许您安装多达 15 个实例,但是我希望人们不要安装多个实例,除非在非常特殊的情况下。

安装公用实例

默认情况下,SQL Server Express 假设您要创建(或使用)一个名为“SQLEXPRESS”的公用实例。还可以命名一个“公用”实例,但是这假设您所安装的所有程序都可以分辩出这个独特的名称。如果保留默认名称 (SQLEXPRESS),其他应用程序可以自动共享这个公用实例。利用这种方法,所有数据库都可以由一个单个的、共享 Master 数据库管理,并且有一个永远不需要显示的 SA 密码。当使用公用实例时,您有可能看到其他安装的数据库,而其他应用程序也可能会看到您的数据库 — 除非您确保应用了适当的权限。一般而言,对于家庭、个人或小型办公室实现,您通常不必担心一个应用程序会扰乱另一个数据库中的数据。如果您安装一个单独的公用实例,那么只有一组 SQL Server DLL、缓存和其他驻留内存的结构会加载到内存中。这意味着只有一个 SQL Server 实例占用 CPU 资源。

安装独立的实例

在安装过程中,如果您将实例名设置为自己的值,那么安装程序会创建一个完全独立的 SQL Server Express 版本。该实例具有其自己的 Master 数据库、其自己的文件、DLL、内存占有空间以及其自己的 SA 密码。除了可能已安装的任意其他实例外,每个独立的实例都会启动占用 CPU 周期的单独的 SQL Server 服务(程序)。尽管该方法在某种意义上增加了安全性,只有那些被授予对该实例访问权限的程序才能看到它所管理的数据库,但是实现和维护却增加了很多成本。这是因为每个实例都要复制 DLL、缓存和其他内存中的结构。

安装默认实例

另一种方法就是在安装过程中删除实例名。在这种情况下,SQL Server Express 作为默认实例安装,假设没有已安装的默认实例。在这种方式中,只可以安装一个服务器实例。同样,如果这是安装到系统上的唯一的实例,那么在其他配置之间差异就会非常小,除非当它连接 SQL Server Express 时,我将在稍后对此进行讨论。

选择系统管理员的密码

SA 密码是解开整个数据库的密钥。系统管理员获准对数据库或数据库中的信息进行任何操作。SA 可以添加、更改或删除数据库,所有操作都可以在任何人不知道所做更改的情况下进行。正确设置这个密码并对其进行保护是至关重要的。

当您使用公用实例安装 SQL Server Express 时,只有一个 SA 密码需要关注。由于只有在您选择使用 Windows 身份验证进行安装时,SA 帐户才可以访问,所以 SA 密码永远不需要显示。在任何情况下,当安装 SQL Server Express 时,都要求您提供 SA 密码,但是在已发布的版本中,可以设置为随机(隐藏)的值。

Microsoft 建议您配置 SQL Server Express 实例以使用 Windows 集成安全性身份验证。这意味着计算机和 Windows 域系统管理员帐户都被授予对 SQL Server Express 实例的完全 SA 访问权限。当然,您需要成为计算机或域管理员才能执行维护、安装数据库以及执行像更改数据库表值这样的简单操作。这并不意味着使用 SQL Server Express 的每个人都应该成为管理员。它真正的意义在于,作为安装制度的组成部分,您需要创建“用户”或应用程序登录,并在应用程序需要的表格、视图、函数以及存储过程上设置适当的权限。我将会在稍后对此进行更详细的讨论。

性能

SQL Server Express 已经摒弃了“调控器”的概念。坦白地讲,我以前几乎没有看到调控器降低任何 MSDE 系统的情况,但是通过放弃调控器,Microsoft 消除了有关 SQL Server 引擎可伸缩性的混淆。SQL Server Express 有很多方法来限制可伸缩性。正如在测试版中所配置的那样,SQL Server Express 只能处理缓冲池中 1GB 的系统 RAM。这限制了 RAM 缓存中数据页面和过程的数量。任何 SQL Server 专业人士都可以告诉您改进性能的最简单方法就是向缓存中增加内存。将可见 RAM 限制在 1GB 意味着在您向 SQL Server Express 实例中增加负载时,您将(最终)耗尽性能。这是否意味着 SQL Server Express 可以支持 1000 个用户呢?当然,如果将负载放在 SQL Server Express 实例上并不会那么完美。在相同的情况下,10 个用户就可以将 SQL Server Express 陷入困境,尤其是如果应用程序编写得并不是非常有效时。

SQL Server Express 也限制到一个单个的处理器,而不可以在附加处理器(最多两个)上运行线程(如果系统支持)。这种限制也压缩了您期望从 SQL Server Express 获得的性能上限。

当使用 SQL Server Express 的应用程序结束时,SQL Server 并不会关闭。在 SQL Server Express 版本中并没有自动关闭选项。因此,即使在您的应用程序结束后,SQL Server 引擎也会保留在内存中,并继续占用系统 RAM 和 CPU 资源。可以编写 SQL 管理对象 (SMO) 例程来关闭 SQL Server Express 实例,但只有在您确认该实例没有被其他应用程序共享时,才可以完成该操作。

可伸缩性

尽管 MSDE 限制在 2GB,SQL Server Express 数据库文件却限制在 4GB。这意味着可以比以前多存储一倍的数据。坦白地讲,这使我很困惑。我曾经在大型机上使用过大型的公司数据库,它在单个 40MB 磁盘包上非常适合。我猜想人们喜欢使用数据库来存储其宠物的大量文档和图片。对于 MSDE 而言,日志文件大小并不受限制 — 至少表面上看是这样。您仍然需要周期性地备份或截断日志,我将在稍后进行讨论。

工具

Microsoft 同时还更改了其对工具的访问方法。即使您不将新的 GUI 安装程序计算在内,当您下载 SQL Server Express Beta 2 时,新的 OSQL 版本、SQL 计算机管理器(MMC 管理单元)以及 SQLCMD 命令行工具都包括在其中,以协助管理 SQL Server Express 实例。此外,Microsoft 计划设计一个新的 GUI 工具(暂时命名为 SQL Express Manager),以执行 SQL Server 数据库的初始配置和周期性维护。这个工具很快可用于独立下载,基本上可以说,它是不同于 SQL 查询分析器的工具,可以执行用户帐户设置和维护以及协助编写、测试和调试 SQL 查询。您不能使用其他任何工具连接到 SQL Server Express,包括 Management Studio 或 SQL 企业管理器。但是,我希望在它发布前,当前的任何工具都可以访问 SQL Server Express。

管理

要管理 MSDE,您只须对 SQL Server Express 进行操作,这与对 SQL Server 的其他版本所做操作相同。我希望看到一个可以周期性地转储数据库和日志然后截断日志的自动日志备份脚本。或许,这就是企业第三方需要创建的脚本。到那时,我建议开发人员将这些管理任务构建到他们的应用程序中,然后使用 SMO 来执行这些需要的维护功能,并且使用 Windows 计划程序来进行协助。

Service Pack

SQL Server Express 只能使用 Windows Installer (MSI) 安装软件包文件进行安装。与 MSDE 不同,您将无法创建自定义的 MSM 安装脚本。在其他方面中,它与 MSDE 相同,因此您仍然需要准备通过传统的 Service Pack 方式来更新 SQL Server 引擎。在 Microsoft 工作的人都敏锐地意识到与此相关的问题,并且仍然在规划着更好的策略。

安装 SQL Server Express Edition

与 MSDE 不同,MSDE 不支持任何形式的 GUI 安装实用工具,而 SQL Server Express 允许命令行安装和 GUI 版本。对于使用标准版版本或更高版本的开发人员来说,这个安装版本是非常熟悉的。但是,在该过程的早期,SQL Server Express GUI 安装程序出现对话框(如 1 所示),询问用户是否要设置 Advanced Configuration 选项。默认情况下,安装程序会配置正在进行安装的 SQL Server Express 实例来使用集成安全性,同时禁用对 TCP 端口和外部协议的所有访问。这意味着您将无法从其他系统或使用 SQL Server 凭据来访问 SQL Server Express 实例,除非更改高级配置选项。

ssesecurity_1

1. 捕获 SQL Server Express GUI 安装实用工具的注册信息

选择安全性模式

SQL Server Express 安装实用工具允许您在身份验证模式对话框(如图 2 所示)中设置服务器所使用的安全性类型。正如我将在稍后讨论的那样,默认模式是 Windows Authentication,它会根据域 Active Directory 来验证用户凭据。在理解切换到 SQL Server Mixed Mode 安全性的安全意义之前,最好保留为默认模式。例如,混合模式 (SQL Server) 安全性强制开发人员指出隐藏由其应用程序所使用的 SQL Server 凭据的方法,以防止肆无忌惮的黑客的使用。尽管如此,最好还是坚持使用默认设置,除非您的设计使该配置无法使用。

兴趣使然 黑客从何处来?在伦敦举行的 Diligence Information Security 研讨会上,一项调查表明大多数“黑客”(那些试图获得对受保护的数据进行未经授权访问的人)是公司防火墙内部的个人 — 并且大多数(到目前为止)都是公司的正式员工。

不管您选择的安全性类型如何,安装实用工具都将要求您提供 SA 密码。尽管它要求您需要提供“强”密码,这实际上是域密码强度设置的功能。我提倡您使用格式规范的强密码,但是如果使用 Windows 身份验证模式,这一点就并不那么重要了。实用工具不会让您将其保留为空。

ssesecurity_2

2. 设置由 SQL Server Express 实例使用的身份验证模式

安装 SQL Server 计算机管理器扩展

与 SQL Server Express 安装的一个也是唯一一个工具就是 SQL Server 计算机管理器 MMC 管理单元。该工具可用于管理 SQL Server 服务并且使得可以在网络上查看 SQL Server。要安装该组件,请在安装 SQL Server Express 实例过程中使用 Features Selection 对话框(如 3 所示)选择它即可。

ssesecurity_3

3. 安装 SQL Server 计算机管理器扩展。

在安装 SQL Server Express 实例后,通过导航到“Protocols for SQLEXPRESS”节点,右键单击然后选择 Enable(如图 4 所示),SQL Server 计算机管理器可以启用 TCP 端口或适当的网络协议。在此例中,我启用了 Named Pipes (Np) 协议。您还必须启动 SQL Brower 服务来提供服务器名称解析。

请注意,“Slammer”利用这样一个事实,大多数 SQL 服务器在 UDP 端口 1434 公开。这意味着 SQL Server Express 不会受到这种类型的攻击,除非您启用 SQL Browser 服务。

ssesecurity_4

4. 使用计算机管理器 MMC 管理单元组件来启用网络可视性

在安装完成后,安装文件(可以包含纯文本或弱加密凭据以及其他敏感配置信息 — 基本上是指服务器的密钥)应该被删除或进行保护。

连接到 SQL Server Express(获得对 SQL Server Express 的访问)

Microsoft 和我希望您使用托管代码来打破对 COM 和 OLE DB 提供程序的依赖性 — 即,SQL Server 提供程序。SqlClient .NET 数据提供程序仍然是最好的选择。如果必须使用 MDAC 和 OLE DB 从基于 COM 的应用程序连接到 SQL Server Express,您可以这么做,但是您无法通过共享的内存提供程序进行连接,并且您将需要确保启动了 SQL Browser 服务。

由于默认安全性设置是集成安全性,您将需要在连接字符串中使用 Integrated Security=SSPI,除非更改为混合模式安全性。您仍然需要在连接字符串中指定初始目录或 Database,以指向 SQL 所针对的特定。当使用 SQL 分析器来监视代码所执行的操作时,我还建议您使用 Application Name 连接字符串参数来唯一地标识您的操作。


使用 AttachDBFilename 进行连接

SQL Server 团队所推荐的新方法是将关键字 AttachDBFilename 添加到连接字符串。如果一直用于 Web 应用程序,对于典型 SQL Server 客户端/服务器前端应用程序而言,这是不常用而且是极少使用的方法。对于说明 SQL Sever 实例的任意连接字符串,您必须按名称(或 IP 地址)指向服务器并提供一个实例名。此外,当使用 AttachDBFilename 关键字指向连接字符串中的文件名时,ADO.NET(或 ADO)会通知目标 SQL Server 实例,您希望将引用的文件“附加”到服务器 — 这样,在打开连接的过程中会将该注册在 SQL Server Master 数据库中。

在附加数据库后,当您引用数据库时,从此时起,该服务器访问引用的文件 (.MDF) 及其附带日志文件 (.LDF)。因为此处有一个 catch 语句,请务必小心。您必须 在连接字符串中指定 Database 关键字。如果不指定,该服务器则无法确定这个新附加的数据库。代码列表 1 显示了被配置为附加并打开一个 .MDF 文件的 ADO.NET Sqlclient.SqlConnection 对象的示例。

代码列表 1. 使用 AttachDBFilename 关键字连接到 SQL Server .MDF 文件。

Try
cn = New SqlConnection("Data Source=.\SQL;" _
& "Integrated Security=True;Database=Biblio;" _
& "Timeout=60;" _
& "plication Name=SQLExpress Test;" _
& "AttachDBFilename=" & strFn)
da = New SqlDataAdapter("SELECT AU_ID, Author, Year_Born from authors", cn)
ds = New DataSet
da.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
Catch ex As Exception
MsgBox(ex.ToString)
End Try

提示 将新数据库附加到 Master 的过程比简单地打开它要花费更多的时间。确保设置连接字符串 Timeout 关键字,以考虑该增加的时间。

管理附加的 .MDF 数据库文件

尽管打开连接的过程会附加一个数据库,但是当应用程序关闭该连接时,数据库并没有分离。一旦附加,它会永久性地安装在 SQL Server 实例中。这意味着在应用程序结束后,数据库本身对任何应用程序都是可视的,且带有足够的权限。它还表示您需要负责在带有其他应用程序文件的相同目录中维护数据库文件。由于在 SQL Server 运行时,文件受到 Windows 的保护,所以在没有首先从数据库分离时,它不应该被“更新的”版本所覆盖。当然,分离并不困难。您可以从 SQLCMD 中使用以下命令,或使用 SQL Server 2005 GUI 管理工具。另一种方法是使用当使用该数据库的所有应用程序结束时自动关闭数据库文件的 AutoClose 选项。

EXEC sp_detach_db 'MyDb'
GO

请记住要将数据库文件保存在本地硬盘上,而不是保存在共享的网络服务器上。强制 SQL Server 执行通过线缆的物理 I/O(即使它支持该操作)是非常危险的,并且它确实会降低您的性能。

与 JET 数据库不同,备份 SQL Server 数据库文件(可能有若干个文件)非常简单,但是备份过程还涉及了通过 OSQL(其中一个工具)或 SMO 向 SQL Server 发送 T-SQL 命令。数据库可以在任何时间进行备份,可以带有任何数量的登录(和活动)用户。

直接连接到名为 SQL Server Express 的数据库

连接到名为 SQL Server Express 实例(或任意 SQL Server 实例)上的命名数据库的更典型方法是,简单地在实例名后写出计算机名,如代码列表 2 所示。这种方法假设作为目标的 Database 已经注册了 SQL Server Master 数据库。

代码列表 2. 使用对已注册的 SQL Server 数据库的直接访问。

            cn = New SqlConnection("Data Source=.\SQLExpress;" _
& "Integrated Security=True;Database=Biblio;" _
& "Timeout=60;" _
& "Application Name=SQLExpress Test;" _
& "AttachDBFilename=" & strFn)

SQL Server Express 仍然支持连接字符串的“(local)”或“.”表示法来指代 SQL Server 的“默认”实例,但前提是只有您按照我前面所述安装了“默认”实例。我并不建议使用这种方法,因为 SQL Server Express 服务器可能不是服务器上的原始“默认”实例。

使用备用的实例名

您不必使用默认的“SQLEXPRESS”实例名来安装 SQL Server Express。我可以想象出几种情况来说明使用默认实例名并不是很好的解决方案。在这种情况下,您需要使用安装过程中的“高级配置”选项,以选择另一个实例名并在连接字符串中使用这个实例名。这种方法的问题在于,如果应用程序安装实用工具不知道安装在目标服务器上的数据库名称,您的名称可能会与现有名称发生冲突 — 正像在用户系统上安装 SQL Server 的某个其他应用程序可能会与您选择的名称发生冲突一样。这就解释了为什么 SQLEXPRESS 的公用实例名是如此重要的一项创新。

 

使用别名

从应用程序连接到“公用”服务器名的另一种方法是使用别名。也就是说,您可以使用 SQL 计算机管理器来为 SQL Server 实例指定一个别名(如图 5 所示)。在此例中,我创建了别名“George”,我可以将其用于我的连接字符串中。如果基本服务器发生变化(例如,当我从测试服务器更改为生产服务器时),我只要更改别名,该应用程序就会重定向到正确的服务器。

ssesecurity_5

5. 使用计算机管理实用工具来创建实例别名。

利用 Windows 身份验证模式管理集成安全性

当您的连接字符串包含关键字 Integrated Security=SSPI 时,ADO.NET(或您所使用的数据访问接口)则使用 Windows 身份验证模式。在幕后,这种模式使用 NTLM (NT LAN Man) Windows NT 质询/响应身份验证协议来验证使用加密的帐户凭据,以便保护传输过程中的密码以防止“刺探者”以离线状态攫取您的凭据。每次打开(或重新打开)连接时,用户凭据会根据域控制器 (Active Directory) 重新进行验证。Microsoft 建议对大多数应用程序使用 Windows 身份验证模式。

有关安全性支持提供程序 (SSP) 软件包(如 NTLM 和 Kerberos)的详细信息,请参阅 Platform SDK 中的 SSP Packages Provided by Microsoft

当然,我所编写的用于验证这段代码的测试应用程序可以正常工作(该代码显示在代码列表 1 中)。因为我是以管理员身份登录的,所以我的 Windows 帐户被授予了 SQL Server 上的系统管理员权限。这就是当使用 SQL Server Express 时,为什么不需要使用 SA 帐户或者不需要知道 SA 密码的原因所在。然而,我的确希望最终用户不被授予管理员帐户。当任何人登录到 Windows 域时,域管理员会确定授予他们的权限。该信息存储在 Active Directory 中。这些权限不会传递到 SQL Server,除非您特别地授予这些权限。这意味着(默认情况下)不会 为非管理员授予到服务器或其内容的权限,并且您将需要设置用户、组和角色以管理数据库及其内容。执行该操作的机制在一段时间以来都没有改变,在 SQL Server Books Online 中有对它们的详细说明。有关 SQL Server 安全性最佳操作的详细信息,请访问 TechNet

从基本上讲,您需要建立并配置四层安全性。

1.

Windows 域帐户:系统管理员需要建立域帐户,包括登录名和(强)密码 — 用户“凭据”。该帐户(默认情况下)是“Domain Users”组的成员。管理员可以建立其他组并根据需要将用户分配到这些组。我通常建立用户的“类”,它按照用户在办公室中被分配的工作角色的类型对其进行分类。例如,我将建立“Accounting Admin1”和“Accounting Admin Lead”组,并将特定的 Windows 域帐户添加到这些组。可以分配给单个 Windows 用户多个角色。

2.

工作站和用户的物理安全性。如果在用户离开时,工作站保留为登录状态,或者用户允许其他人使用他们的 Windows 帐户凭据,那么您的安全性已经被洞穿。这一层通常被忽略。这就解释了为什么当用户没有实际出现时 Microsoft 使用密钥访问系统来防止对系统的访问。

3.

SQL Server 登录:这是在 SQL Server 上建立的帐户,用于屏蔽连接到 SQL Server 的尝试。您向该列表中添加的每个帐户,都会减弱保护数据的服务器能力,因为它允许额外的 Windows 用户获得对该服务器的访问。当使用集成安全性(我们建议这么做)时,您仍然需要在 SQL Server 上建立一个登录帐户,以允许特定用户或 Windows 域组(例如 Domain Users)对目标数据库进行访问。授予每个登录帐户对一个或多个数据库的访问权限,并且如果初始目录 (Database) 关键字没有在连接字符串中使用,则分配一个所引用的默认数据库。

4.

数据库用户:保护的最后一层是在数据库本身中进行管理的。在这种情况下,您需要建立一个或多个数据库用户,为这些用户授予对特定表格、视图、函数和存储过程的访问权限。如果需要,您甚至可以授予对特定列的访问权限。

在任何 SQL Server 数据库上管理安全性帐户的一个方法就是使用 SQLCMD。但是,除非您是数据库管理员 (DBA) 并且具有 T-SQL 的丰富经验,否则这可能有一点令人畏缩。幸运的是,您可以使用 SQL Server 2005 Management Studio(与 SQL 企业管理器等价)来创建数据库用户、组或角色。该工具没有包括在 SQL Server Express 中,因此您需要使用 Microsoft 提供的标准版或开发人员版的工具或使用第三方的一个工具。在创建这些角色后,您可以使用 SQL 工具将这些 T-SQL 命令导出到一个脚本文件。

使用混合模式的安全性

混合模式身份验证是使用 Windows 集成安全性的一个备选方法。在这种情况下,连接字符串 UID 和 PWD 关键字会根据 SQL Server 登录名和密码进行验证。由于这种技术绕过了 Windows 身份验证,它被认为是不太安全的。要使用这种安全性模式(并忽略我们的建议),您需要在安装过程中启用这种混合模式安全性。为此,当使用安装批处理文件时,您可以将 SECURITYMODE 命令参数设置为“SQL”。该选项还可用于 SQL Server Express 交互式安装程序和 SQL Server Express Manager (XM),其预览版本应该很快就可用了。

SQL Server 安全性常规指南

无论它是每小时百万次点击量的企业服务器还是每千年百万次点击量的小型办公系统,在任意系统上违反安全,都可能意味着公司的崩溃 — 或者丢掉您的工作。由于 SQL Server Express 系统假设应用程序扮演很多安全性角色,需要对其进行准备才能管理 SQL Server 登录、执行周期性维护(例如数据和日志备份)、将备份存储移动到系统外(最好是现场外)以及适于数据库使用的其他维护任务。应用程序还需要采取措施来监视服务器日志的运行状况,并且在遇到问题时对其进报告。

不熟悉 SQL Server 的开发人员通常会忽略一个维护安全性的更基本的方法,例如 SQL Server 具有将对象保护到列的能力。在大多数关键的办公系统中,DBA(如果有)会直接将访问权限限制到基表。此后,DBA 为重点访问数据库的人建立特定的用户和角色帐户,根据专用视图、存储过程和函数启用适当的权限。这样,如果用户凭据被盗,可以访问数据的唯一方法就是通过这些非常简单地限制的机制。

小结

本文介绍了 SQL Server 2005 的新改进的版本,也称为 Express Edition。我讨论了使 SQL Server Express 易于使用并易于保护的差异,并讨论了几个安全性问题,涉及了保护数据、保护服务器以及保护物理系统。我希望这篇概述能够促使您将现有的 JET 应用程序迁移到更安全稳定的 SQL Server 2005 Express Edition 中。

 
 

转载于:https://www.cnblogs.com/3368aa/archive/2008/01/10/1032873.html

Microsoft SQL Server 2005 Express Edition SQL Server 文档小组无法回答技术支持问题,但是欢迎您对本自述文档提出建议和意见。您可以使用提供的链接快速、直接地发送电子邮件反馈。请使用英语发送您的反馈信息。 若要通过邮件提交有关本文档的反馈信息,请单击此处:提交反馈。 目录 1.0 简介 2.0 下载并安装 SQL Server Express 2.1 .NET Framework 2.0 2.2 SQL Server Express 2.3 SQL Server Express 的管理工具 2.4 访问安装文档 2.5 SQL Server 2005 自述文件 3.0 安装问题 4.0 其他信息 4.1 服务帐户和网络协议 4.2 用户实例功能 4.3 WMI 提供程序和用户实例功能 4.4 联机丛书 4.5 获取 SQL Server Express 帮助 4.6 新闻组支持 4.7 提供有关 SQL Server Express 的反馈 5.0 数据库引擎 6.0 复制 [顶部] 1.0 简介 Microsoft SQL Server 2005 Express Edition (SQL Server Express) 是一个免费且易于使用的 SQL Server 2005 版本,它替换了 Microsoft Desktop Engine (MSDE)。与 Microsoft Visual Studio 2005 集成之后,SQL Server Express 可以轻松的开发功能强大且安全的数据驱动应用程序,并允许快速部署这些应用程序。SQL Server Express 可以根据协议重新进行发布,并可作为客户端数据库以及基本服务器数据库使用。SQL Server Express 是独立软件供应商 (ISV)、服务器用户、非专业开发人员、Web 应用程序开发人员、网站宿主以及客户端应用程序编程爱好者的理想之选。 未及时包括在本自述文件中的任何有关 SQL Server Express 的信息都将发布到 Microsoft 知识库文章 907284 中。 有关使用 SQL Server Express 新闻组提供反馈的信息,请参阅 4.6 新闻组支持部分。 [顶部] 2.0 下载并安装 SQL Server Express 本节介绍有关安装 .NET Framework 2.0、SQL Server Express 以及可用于连接到 SQL Server Express 的工具的信息。 2.1 .NET Framework 2.0 在安装 SQL Server Express 之前,必须安装 .NET Framework 2.0。 SQL Server Express 依赖于特定 2.0 版本的 .NET Framework。如果您已安装了其他版本的 .NET Framework,则 SQL Server Express 安装可能会在运行时发生意外情况。您可以从此 Microsoft 网站下载 .NET Framework 2.0。 注意: .NET Framework 2.0 由 Microsoft Visual Studio 2005 和所有版本的 SQL Server 2005 自动安装。 [顶部] 2.2 SQL Server Express SQL Server Express 可从此 Microsoft 网站下载获得。 注意: 下载和提取产品时,请务必按照下载站点提供的说明进行操作。 安装 SQL Server Express 之后,请在命令提示符下使用以下命令连接到 SQL Server Expresssqlcmd -S Server\Instance 其中 Server 是计算机名称,Instance 是要连接到的实例名称。如果已在安装过程中使用了默认的命名实例,则将实例指定为“SQLExpress”。 [顶部] 2.3 管理 SQL Server Express 的工具 有关连接到 SQL Server Express 数据库并进行管理的信息,请参阅 Microsoft 知识库文章 907716。 [顶部] 2.4 访问安装文档 SQL Server Express 的安装要求文档中概述了硬件和软件要求。 [顶部] 2.5 SQL Server 2005 自述文件 SQL Server 2005 自述文件可以从此 Microsoft 网站在线获取。 注意: 未及时包括在本自述文件中的任何有关 SQL Server 2005SQL Server Express 的信息都将发布到 Microsoft 知识库文章 907284 中。 [顶部] 3.0 安装问题 本部分详细介绍此版本中的安装问题。 3.1 现有的 SQL 本机客户端安装可能导致安装失败 安装可能失败并回滚,同时显示以下错误消息:“找不到产品 Microsoft SQL 本机客户端的安装包。请使用安装包 sqlncli.msi 的有效副本重试安装。”若要解决此问题,请使用“添加或删除程序”卸载 SQL 本机客户端。对于群集,请从所有节点中卸载 SQL 本机客户端。然后,再次运行 SQL Server 安装程序。 [顶部] 3.2 系统配置检查器失败并显示“性能监视器计数器检查失败”消息 在开始安装 SQL Server 之前,系统配置检查器 (SCC) 会验证性能监视器计数器注册表项的值。如果 SCC 无法验证现有的注册表项,或者 SCC 无法运行 Lodctr.exe 系统程序,则 SCC 检查会失败,并且安装程序会被阻止。若要完成安装,您必须手动增加注册表项。 注意: 如果注册表编辑不当,则可能会导致严重的问题并可能需要您重新安装操作系统Microsoft 不保证可以解决因注册表编辑不当而导致的问题。在编辑注册表之前,请备份所有重要数据。有关如何备份、恢复和编辑注册表的信息,请参阅 Microsoft 知识库文章 256986。 若要手动增加计数器注册表项,请执行下列操作: 在任务栏中,依次单击“开始”和“运行”,在“运行”文本框中键入 regedit.exe,再单击“确定”。 导航到以下注册表项:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]。查找下列项: "Last Counter"=dword:00000ed4 (5276) "Last Help"=dword:00000ed5 (5277) 验证值。上一步 (5276) 中的 Last Counter 值必须与以下注册表项内 Perflib\009 中 Counter 项的最大值相等,上一步 (5277) 中的 Last Help 值必须与以下注册表项内 Perflib\009 中 Help 项的最大值相等:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009]。 注意: “009”是用于英语(美国)的项。 如有必要,请修改 \Perflib 项中 Last Counter 和 Last Help 的值。在右窗格中,右键单击 Last Counter 或 Last Help,选择“修改”,单击 Base = Decimal,在“值”数据字段中设置值,再单击“确定”。如有必要,请对其他项重复此操作,然后关闭注册表编辑器。 再次运行 SQL Server 2005 Express Edition 安装程序。 [顶部] 3.3 SQL Server Express 联机丛书中包含关于操作系统支持的错误信息。 SQL Server Express 联机丛书中的“硬件和软件要求 (SQL Server Express)”主题中没有提供操作系统的精确列表。SQL Server Express 支持下列操作系统。 Windows Server 2003 SP1 Windows Server 2003 Enterprise Edition SP1 Windows Server 2003 Datacenter Edition SP1 Windows Small Business Server 2003 Standard Edition SP1 Windows Small Business Server 2003 Premium Edition SP1 Windows XP Professional SP2 Windows XP Home Edition SP2 Windows XP Tablet Edition SP2 Windows XP Media Edition SP2 Windows 2000 Professional Edition SP4 Windows 2000 Server Edition SP4 Windows 2000 Advanced Edition SP4 Windows 2000 Datacenter Server Edition SP4 [顶部] 3.4 如果在 Windows Server 2003 中禁用了加密服务,则安装程序会失败并显示“Windows 徽标要求”对话框 Windows 加密服务提供程序 (CSP) 是执行身份验证、编码和加密服务的代码,基于 Windows 的应用程序通过 Windows Server 2003 中的 CryptoAPI 访问这些服务。如果停止或禁用 CSP 服务,则 SQL Server 安装程序会失败并显示“Windows 徽标要求”消息。 注意: 在 Windows Server 2003 故障转移群集中运行 SQL Server 安装程序之前,必须在所有群集节点上启动 CSP 服务。 若要在 Windows Server 2003 中启用 Windows CSP 服务,请执行下列操作: 在“控制面板”中,打开“管理工具”,再双击“服务”。 在“名称”列中,右键单击“加密服务”,再单击“启动”。 关闭“服务”。 运行安装程序。 [顶部] 3.5 未在 Windows 中完全启用 MSDTC 由于未在 Windows 中完全配置 Microsoft 分布式事务处理协调器 (MS DTC),因此,应用程序可能无法在分布式事务中登记 SQL Server Express 资源。此问题会影响使用分布式事务的链接服务器、分布式查询以及远程存储过程。为了避免出现此类问题,您必须在安装有 SQL Server Express 的服务器中完全启用 MS DTC 服务。 若要完全启用 MS DTC,请执行下列操作: 在“控制面板”中,打开“管理工具”,再双击“组件服务”。 在左窗格的“控制台根目录”中,单击“组件服务”,再展开“计算机”。 右键单击“我的电脑”,再单击“属性”。 在 MSDTC 选项卡中,单击“安全配置”。 在“安全设置”下,选中所有复选框。 验证是否已将“DTC 登录帐户”名称设置为 NT AUTHORITY\NetworkService。 [顶部] 3.6 默认情况下不安装示例数据库 默认情况下,不在 SQL Server Express 中安装示例数据库。Northwind 和 pubs 示例数据库可以从 Microsoft 网站进行下载。Adventureworks 示例数据库可从此 Microsoft 网站安装。 [顶部] 3.7“强制加密”配置可能会导致 SQL Server Express 安装程序失败 如果现有的 SQL Server 客户端安装配置为启用了“强制加密”选项,则安装程序可能会失败。若要解决此问题,请在所有 SQL Server 客户端上禁用此选项。对于 SQL Server 2000 中的 Microsoft 数据访问组件 (MDAC) 客户端,请使用 SQL Server 2000 客户端网络实用工具。对于 SQL 本机客户端,请使用“添加或删除程序”卸载 SQL 本机客户端。在群集中,请卸载所有节点中的 SQL 本机客户端。然后,再次运行 SQL Server 2005 安装程序。 [顶部] 3.8 sp_configure 的设置可能会导致安装程序在升级系统数据库时失败 如果在更早 Community Technology Preview (CTP) 版本的 SQL Server Express 中禁用了 sp_configure 选项“SMO 和 DMO XP”,则在使用 SAVESYSDB 卸载该早期实例,然后使用 USESYSDB 安装本版本时,将可能无法从命令提示符下进行安装。若要解决此问题,请确保在使用安装程序升级系统数据库之前,已启用上述选项。有关详细信息,请参阅此 Microsoft 网站上 SQL Server 联机丛书中的“设置服务器配置选项”。 [顶部] 3.9 安装 SQL Server 2000 的默认实例可能会禁用 SQL Server Express 如果您的计算机已安装 SQL Server 2000 管理工具和 SQL Server Express 的默认实例,则可以使用 SQL Server 安装程序安装 SQL Server 2000 的默认实例。但是,这样做会禁用已安装的 SQL Server Express 实例。因此,如果计算机上已安装 SQL Server 2000 管理工具和 SQL Server Express 的默认实例,则不要安装 SQL Server 2000 的默认实例。 [顶部] 3.10 在 Windows 域控制器中安装 SQL Server Express 安全说明: 我们不建议在域控制器中运行 SQL Server Express。 可以在 Windows 域控制器中安装 SQL Server Express;但是,SQL Server Express 无法在 Windows Server 2003 域控制器中像本地服务或网络服务那样运行。SQL Server 服务帐户应以 Windows 域用户帐户的身份运行。您也可安装 SQL Server 服务帐户以本地系统的身份运行,但是不建议使用此选项。 不要在安装完 SQL Server Express 之后更改服务器的角色。例如,如果您在成员服务器中安装了 SQL Server Express,则不要使用 Dcpromo 工具将该服务器提升为域控制器。或者,如果您在域控制器中安装了 SQL Server Express,则不要使用 Dcpromo 将该服务器降级为成员服务器。如果在安装完 SQL Server Express 之后更改服务器的角色,便会导致功能丢失,不支持这样做。 [顶部] 3.11 现有的 SQL 本机客户端安装可能导致安装失败 安装可能失败并回滚,同时显示以下错误消息:“找不到产品 Microsoft SQL 本机客户端的安装包。请使用安装包 sqlncli.msi 的有效副本重试安装。”若要解决此问题,请使用“添加或删除程序”卸载 SQL 本机客户端。对于群集,请从所有节点中卸载 SQL 本机客户端。然后,再次运行 SQL Server 安装程序。 [顶部] 3.12 卸载 SQL Server Express 和 Visual Studio 2005 的预发布版本 安装前,您必须删除 SQL Server Express、Visual Studio 2005 和 .NET Framework 2.0 的所有以前内部版本。由于这两个产品都依赖于相同版本的 .NET Framework,因此必须按照以下顺序卸载它们: SQL Server Express Visual Studio 2005 .NET Framework 2.0 [顶部] 3.13 维护模式下将提示输入 Setup.exe 的路径 如果在维护模式下安装新的 SQL Server 2005 组件,系统将提示您指定 SQL Server 2005 安装媒体中 Setup.exe 文件的位置。指定该文件位置时,路径中一定要包含“Setup.exe”。例如,路径“D:\”将失败,而“D:\Setup.exe”将成功。 [顶部] 3.14 Setup 命令 Shell 脚本的故障排除失败 路径变量中包含括号时,Setup 命令 shell 脚本可以生成 Windows 脚本错误。出现该错误的原因是命令 shell 脚本不支持路径变量中包含的括号。在将 32 位组件安装到 64 位计算机的 Windows (WOW64) 32 位子系统中的 Windows 时可能会出现该错误。例如,下列路径值为“C:\Program Files (x86)\”的脚本将生成一个错误,因为 shell 脚本解释器会将扩展的 PATH 变量中的括号错误地解释为 IF/ELSE 语句的一部分: IF "%SOME_PATH%" == "" ( SET PATH=%PATH%;%PATH_A% ) ELSE ( SET PATH=%PATH%;%PATH_B% ) 若要解决此问题,请更改该脚本以删除括号。例如: IF "%SOME_PATH%" == "" set PATH=%PATH%;%PATH_A% IF NOT "%SOME_PATH%" == "" set PATH=%PATH%;%PATH_B% 或者从路径中删除包含括号的 SQL 项。 [顶部] 4.0 其他信息 4.1 服务帐户和网络协议 在 SQL Server Express 中,本地系统帐户即为网络服务帐户。 SQL Server Express 可侦听本地命名管道和共享内存。执行默认安装时,无法远程连接到 SQL Server Express。您需要启用 TCP/IP 并检查是否已启用防火墙。 若要启用 TCP/IP,请执行下列操作: 在“开始”菜单中,选择“所有程序”,依次指向 Microsoft SQL Server 2005 和“配置工具”,再单击“SQL Server 配置管理器”。 或者,您可以通过右键单击“我的电脑”并选择“管理”来打开计算机管理器。在“计算机管理”中,依次展开“服务和应用程序”和“SQL Server 配置管理器”。 展开“SQL Server 2005 网络配置”,再单击“InstanceName 的协议”。 在协议列表中,右键单击要启用的协议,再单击“启用”。 协议的图标将更改为显示该协议已启用。 若要启用防火墙,请执行下列操作: 依次单击“开始”和“控制面板”,再单击“网络连接”。 在左侧的导航栏中,单击“更改 Windows 防火墙的设置”。 在“异常”选项卡的“程序和服务”框中,您可能看到已列出 SQL Server,但未将其选择为异常。如果您选中该复选框,则 Windows 将打开端口 1433 以允许 TCP 请求进入。或者,如果您未看到列出 SQL Server,则请执行下列操作: 单击“添加程序”。 单击“浏览”。 导航到 drive:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BINN 将文件 sqlservr.exe 添加到异常列表中。 [顶部] 4.2 用户实例功能 SQL Server Express 允许非管理员用户在没有 DBCreator 特权的情况下也能复制或移动数据库(使用 Xcopy 部署)。有关详细信息,请参阅此 Microsoft 网站上的 SQL Server Express 联机丛书中的“非管理员用户实例”。 [顶部] 4.3 WMI 提供程序和用户实例功能 动态生成的用户实例中不支持 WMI Provider for Server Events。此程序仍运行于父 SQL Server Express 实例中。 [顶部] 4.4 联机丛书 SQL Server Express 联机丛书可从此 Microsoft 网站下载获得。 注意: 由于 SQL Server ExpressSQL Server 2005 的一个受限版本,因此,SQL Server Express 联机丛书中的文档很大程度上依赖于 SQL Server 2005 联机丛书中的内容。 SQL Server 2005 联机丛书可从此 Microsoft 网站下载获得。 Microsoft 定期发布 SQL Server Express 联机丛书和 SQL Server 2005 联机丛书的可下载更新。我们建议您安装这些更新以及时更新该文档的本地副本中相应的信息。 [顶部] 4.5 获取 SQL Server Express 帮助 Microsoft 通过以下四个主要信息来源提供有关 SQL Server Express 的信息: SQL Server Express 文档和示例 SQL Server 2005 文档 Microsoft Developer Network (MSDN) 和 TechNet 上的 SQL Server 站点 其他 Microsoft 网站上的 SQL Server 信息 您也可以通过 SQL Server 社区从其他人或直接从 Microsoft 支持人员处获取帮助。有关详细信息,请参阅 SQL Server Express 联机丛书中的“获取 SQL Server Express 帮助”。 [顶部] 4.6 新闻组支持 有关新闻组支持的信息,请从此 Microsoft 网站访问 SQL Server Express 新闻组。请不要使用其他 Microsoft 新闻组张贴有关 SQL Server Express 的问题。 可在 SQL Server Express 网站日志中找到来自 SQL Server Express 小组的最新信息。 注意: 仅支持英语版的新闻组。 [顶部] 4.7 提供有关 SQL Server Express 的反馈 可通过下列方式提供有关 SQL Server Express 的建议和错误报告: 在此 Microsoft 网站发送有关 SQL Server Express 的功能和用户界面的建议和错误报告。 使用 SQL Server Express 联机丛书中的反馈功能发送有关文档的建议以及报告其中不正确的内容。 选择自动将错误报告和功能使用情况数据发送给 Microsoft 进行分析。 有关详细信息,请参阅 SQL Server 联机丛书中的“提供有关 SQL Server 2005 的反馈”。 [顶部] 5.0 数据库引擎 本部分说明 SQL Server 2005 数据库引擎数据库引擎特定的命令提示实用工具的最新项,这些最新项也应用于 SQL Server Express。 [顶部] 5.1 在 Windows Server 2003 SP1 中运行时连接可能会被强行关闭 如果 TCP/IP 网络处于打开状态,则指向 Windows Server 2003 Service Pack 1 中运行的 SQL Server Express 数据库引擎实例的客户端连接可能会失败,并出现以下错误:“提供程序号: 7,错误: 10054,错误消息:‘TCP 提供程序: 现有连接被远程主机强行关闭’”。 如果要通过大量客户端连接尝试来测试可伸缩性,则可能会出现此错误。若要解决此问题,请使用 regedit.exe 实用工具将名为 SynAttackProtect 的新 DWORD 值添加到注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\(值数据为 00000000)中。 安全说明: 设置此注册表项可能会使服务器受到 SYN Flood 拒绝服务攻击。测试完成时,请删除该注册表值。 注意: 如果注册表编辑不当,可能会导致严重问题并可能需要重新安装操作系统Microsoft 不保证可以解决因注册表编辑不当而导致的问题。在编辑注册表之前,请备份所有重要数据。有关如何备份、恢复和编辑注册表的信息,请参阅 Microsoft 知识库文章 256986。 [顶部] 5.2 安全的 Service Broker 对话需要数据库主密钥 SQL Server 2005 联机丛书错误地说明了当跨数据库使用对话安全设置进行会话时,SQL Server 会创建通过数据库主密钥加密的会话密钥。实际上,对于所有使用对话安全设置进行的会话而言,会话密钥均通过数据库主密钥进行加密。如果数据库主密钥不可用,则在创建数据库主密钥或会话超时之前,会话的消息将一直保留在 transmission_queue 中并出现错误。您可以使用 ENCRYPTION = OFF 参数创建未加密的对话,也可以使用以下命令创建数据库主密钥: CREATE MASTER KEY ENCRYPTION BY PASSWORD = '' [顶部] 5.3 公共语言运行时用户定义类型应只有一个序列化 每个字节顺序的用户定义类型 (UDT) 对象的实例只能有一种序列化表示形式。如果序列化或反序列化例程识别出某个特定对象具有多种表示形式,则可能会在下列情况下出现错误: 在验证通过 RPC 传递的字节顺序的 UDT 期间,UDT 验证执行 UDT 的反序列化/重新序列化,并要求生成的字节与原始字节完全相同。如果验证失败,则会出现错误:“System.Data.SqlClient.SqlException,传入的 TDS RPC 协议流不正确。参数 1 (""):提供的值不是数据类型 的有效实例。请检查源数据中的无效值。” 在 DBCC 期间,字节顺序的 UDT 列中存储的字节数必须等于计算的 UDT 值序列化。如果不相等,则 DBCC CHECKTABLE 例程将会报告一致性错误。 [顶部] 5.4 尚未通过设置启用网络连接 为了提高安全性,SQL Server Express 针对某些新安装禁用了网络连接。如果您使用的是 SQL Server Enterprise Edition、Standard Edition 或 Workgroup Edition,或计算机上已经安装有 SQL Server,则不会禁用使用 TCP/IP 协议的网络连接。除非计算机上已经安装有 SQL Server,否则 Named Pipes 连接仅适用于本地连接。对于所有安装,都会启用 Shared Memory 协议,以允许服务器的本地连接。根据具体的安装条件和安装选项,可能会停止 SQL Browser 服务。 [顶部] 5.5 包含用户定义类型的程序集注意事项 下列限制适用于包含用户定义类型的公共语言运行时 (CLR) 程序集。 公共语言运行时用户定义类型只能有一个序列化 字节顺序的用户定义类型对象的各个实例只能有一种序列化表示形式。如果序列化或反序列化例程检测到某个特定对象具有多种表示形式,则在以下情况下可能会显示错误: 在验证通过 RPC 传递的字节顺序的用户定义类型的过程中,用户定义类型验证过程会对该用户定义类型执行反序列化/重新序列化,并要求生成的字节与原始字节完全相同。如果验证失败,您将看到以下错误:“System.Data.SqlClient.SqlException,传入的 TDS RPC 协议流不正确。参数 1 (""): 提供的值不是数据类型 的有效实例。请检查源数据中的无效值。” 在 DBCC CHECKTABLE 过程中,在字节顺序的用户定义类型列中存储的字节必须与计算出的 UDT 值的序列化表示形式相同。如果不相同,则 DBCC CHECKTABLE 例程将报告一个一致性错误。 有关更新带有用户定义类型类的程序集的已更新的限制 可以按下列方式使用 ALTER ASSEMBLY 更新 CLR 用户定义类型: 修改用户定义类型类的公共方法,但不更改签名或属性。 添加新的公共方法。 以任何方式修改私有方法。 使用 ALTER ASSEMBLY 不能更改本机序列化的用户定义类型中包含的字段,包括数据成员和基类。不支持所有其他更改。 [顶部] 5.6 SQL Server 不保证更新程序集时的数据一致性 如未指定 WITH UNCHECKED DATA,则在新的程序集版本对表、索引或其他持久站点中的现有数据产生影响时,SQL Server 将会阻止执行 ALTER ASSEMBLY。更新公共语言运行时 (CLR) 程序集时,SQL Server 并不保证计算列、索引、索引视图或表达式与基础例程和类型保持一致。执行 ALTER ASSEMBLY 时需谨慎操作,以确保在表达式结果和基于存储在程序集中的该表达式的值之间没有不匹配。 [顶部] 5.7 卷影复制服务的快照自动恢复功能的注意事项 卷影复制服务 (VSS) 的快照自动恢复功能具有下列限制。 多个持续自动恢复的快照 在 Windows Server 2003 Service Pack 1 (SP1) 和更高版本中,您只能创建单个持续自动恢复的快照。若要创建其他快照,您必须首先应用知识库文章 891957 中所述的更新。 注意: 如果尚未应用此更新,则可以通过以下方式创建新的持续自动恢复的快照:首先删除现有的持续自动恢复的快照,然后创建一个新的持续自动恢复的快照。 自动恢复的快照和全文目录 快照自动恢复功能不支持全文目录。创建自动恢复的快照之后,在该快照中,数据库中的所有全文目录都将处于脱机状态。在从快照中附加数据库时,全文目录会永久保持脱机状态。但附加的数据库中的其他所有数据均可用。 在从自动恢复的快照中直接附加包含全文目录的数据库时,附加操作将返回以下错误消息: Server: Msg 7608, Level 17, State 1, Line 1 An unknown full-text failure (0xc000000d) occurred during "Mounting a full-text catalog". 如果不需要直接从快照中附加数据库,则可以通过如下方式来避免此问题:先将快照中的数据库文件和全文目录复制到基于驱动器号的常规卷中,然后从该位置附加数据库。只要附加命令指定了所复制的全文文件的正确位置,即可正常使用这些全文目录。 [顶部] 5.8 注册公共语言运行时程序集的限制 SQL Server 不允许使用相同的名称、区域性和公钥注册程序集的不同版本。如果计划保留九月份 CTP 版本之前的 SQL Server Express 版本中的数据库,则在安装该版本之前,必须删除具有多个注册的程序集的所有其他实例,只保留一个实例。 [顶部] 5.9 创建 EXTERNAL_ACCESS 和 UNSAFE 程序集 若要在 SQL Server 中创建 EXTERNAL_ACCESS 或 UNSAFE 程序集或者要加载程序集,必须满足下列两个条件之一: 程序集经过强名称签名或使用证书进行了 authenticode 签名。此强名称(或证书)在 SQL Server 中作为非对称密钥(或证书)创建,并具有相应的登录名,该登录名具有 EXTERNAL ACCESS ASSEMBLY 权限(对于 EXTERNAL ACCESS 程序集)或 UNSAFE ASSEMBLY 权限(对于 UNSAFE 程序集)。 数据库所有者 (DBO) 具有 EXTERNAL ACCESS ASSEMBLY(对于 EXTERNAL ACCESS 程序集)或 UNSAFE ASSEMBLY(对于 UNSAFE 程序集)权限,并且该数据库的 TRUSTWORTHY 属性设置为 ON。 除了要在服务器进程中运行公共语言运行时 (CLR) 代码之外,建议始终将数据库的 TRUSTWORTHY 属性设置为 ON。并且建议通过 master 数据库中的程序集文件创建非对称密钥。然后,必须创建映射到此非对称密钥的登录名,并且为该登录名授予 EXTERNAL ACCESS ASSEMBLY 或 UNSAFE ASSEMBLY 权限。 下面的 Transact-SQL 语句将执行完成下列操作所需的步骤:创建非对称密钥,将一个登录名映射到此密钥,然后为该登录名授予 EXTERNAL_ACCESS ASSEMBLY 权限。必须在执行 CREATE ASSEMBLY 语句之前执行下面的 Transact-SQL 语句: USE master GO CREATE ASYMMETRIC KEY HelloWorldKey FROM EXECUTABLE FILE = 'C:\HelloWorld.dll' CREATE LOGIN HelloWorldLogin FROM ASYMMETRIC KEY HelloWorldKey GRANT EXTERNAL ACCESS ASSEMBLY TO HelloWorldLogin GO [顶部] 5.10 应用程序角色与元数据可见性限制以及动态管理视图的兼容性 在某个应用程序角色下运行的程序的行为可能会发生更改,因为在默认情况下,SQL Server Express 将限制 master 数据库元数据对于应用程序角色的可见性。作为临时解决方法,您可以启用跟踪标志 #4616。有关详细信息,请参阅知识库文章 906549。 [顶部] 5.11 未实现 SUPPLEMENTAL_LOGGING 数据库选项 在此版本的 SQL Server 中未实现 SUPPLEMENTAL_LOGGING 数据库选项。此选项可以设置,但不起任何作用。 [顶部] 5.12 sys.dm_clr_loaded_assemblies 显示无法加载的程序集 由于任何原因未能加载到服务器地址空间中的程序集仍将显示在 sys.dm_clr_loaded_assemblies 动态管理视图中。 [顶部] 5.13 XQuery 更改 联机丛书中未说明 SQL Server Express XQuery 实现的以下几个方面: 没有将 CDATA 部分生成的字符视为空格字符。例如,select cast(''as xml).query(' <![CDATA[ ]]> {"abc"}') 返回 abc。 支持构造空元素和空属性。 命名空间前缀 xmlns 用于标识命名空间声明属性,不能在 XQuery 表达式中重新声明。这是 XQuery 规范要求的行为。 将“for”与源表达式 () 一起使用会生成一个静态的错误。 在使用 xml 数据类型的 query() 方法构造的 XML 文档中,CDATA 部分中的回车符变为换行符。为了进行文本 XML 分析,使用换行符代替之前的回车符实体引用 ( )。 包含 local-name() 和 namespace-uri() 的 Transact-SQL 用户定义函数为确定性函数。 [顶部] 5.14 xsd:dateTime 转换的限制比所述限制更少 不包含日期和时间分隔符 T 或时区的 xs:dateTime 值的字符串表示可以在 value() 方法中转换为 SQL datetime 类型,如以下示例所示: declare @aaa xml set @aaa = '' select @aaa.value('(//AAA)[1]/@MyDate', 'datetime') [顶部] 5.15 XML 架构支持 SQL Server 2005 联机丛书中未说明 SQL Server 2005 对 XML 架构以下几个方面的支持: 可以将 Reporting Services (RDL) 的 XML 架构加载到 XML 架构集合中。 如果 xs:dateTime 和 xs:time 类型的值包含具有三个以上小数位数的副值,则这些值不会返回错误,而是会被进行舍入。 当基类型具有 fixed="true" 时,如果在派生类型中重新定义 maxInclusive,便会拒绝使用 XML 架构。 限制 xs:dateTime、xs:data 和 xs:time 等数据类型的派生类型将忽略 minInclusive、minExclusive、maxInclusive 和 maxExclusive 部分的尾随空格。 [顶部] 5.16 不应使用 RC4 加密 请勿使用 RC4 加密保护 SQL Server 2005 中的数据,而改为使用分组密码,如 AES 256 或 Triple DES。 [顶部] 6.0 复制 本部分介绍了有关复制的最新信息。 [顶部] 默认情况下禁用复制功能 Microsoft SQL Server 2005 Express Edition 可以用作所有复制类型的订阅服务器,但是默认情况下不会为此版本安装复制功能。 若要安装复制组件,请执行下列操作: 在“功能选择”页中,展开“数据库服务”。 单击“复制”,再单击“整个功能将被安装在本地硬盘上”。 若要安装连接组件和复制管理对象 (RMO),请执行下列操作: 在“功能选择”页中,单击“客户端组件”,再单击“整个功能将被安装在本地硬盘上”。 [顶部] © 2005 Microsoft Corporation。保留所有权利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值