我对 SQL Server Express 实例感到非常困惑/我实际上连接到什么?

我对 SQL Server Express 实例感到非常困惑/我实际上连接到什么?

我在我的开发机器上运行着一个实例的SQL Express 2008。

对于一些开发,我使用了 AttachDB 连接字符串。我真的不记得确切的原因,但这些不是以正常方式安装的。我想我想要实时编辑一些数据,经过很长时间,我发现了如何从管理工作室连接......我使用了 \\.\pipe\A2108B22-19AA-41\tsql\query

然而,我正在尝试更深入地学习 MS SQL 管理,并想知道,它在技术上是如何工作的,以及它是如何与主实例分开的(可通过连接.\SQLExpress)?

另外,我记得在某处读到过,但我可能错了,这是 SQL Express 的一个功能,而不是主要的 SQL Server 产品。这是正确的还是我错了?

提出这个问题的最后部分是因为我想知道这是否是 SQL 托管中的“后门”,或者是否可以禁用它。我为人们托管了一些网站,我向人们发布了用户/密码和具有大小限制的数据库。在我花几个小时进行测试/捣鼓之前,我只是想知道是否有人对此有所了解?

答案1

如果您使用如下连接字符串:

AttachDBFilename=|DataDirectory|MyDB.mdf;User Instance=true` 

那么您正在使用 SQL Express 的一项称为“用户实例”的功能。

此功能是在 SQL Server Express 2005 中引入的,它使开发人员能够以自己的(非管理员)登录身份运行 SQL Server 实例。

仍有一个.\SQLExpress命名实例在运行,即安装时创建的实例。但是,当您使用AttachDBFilename用户实例功能连接到数据库时,新的SQL Express 实例启动来处理对AttachDBFilename数据库的访问,这个“用户实例”在您的 Windows 登录帐户下运行。

与此实例的通信通过命名管道进行(正如您所发现的)。

这里有一篇关于微软用户实例的资料文章:

非管理员的用户实例 (MSDN)

虽然此功能在 SQL Server 2008 R2 Express 上仍然可用,但它看起来将在不久的将来被弃用或可能被删除,建议您不要使用它:

此功能将在 Microsoft SQL Server 的未来版本中删除。请避免在新的开发工作中使用此功能,并计划修改当前使用该功能的应用程序。

ApplicationPoolIdentity用户实例化也与在 IIS7 和 IIS7.5 上以该帐户运行的站点不兼容。有关更多信息,请参阅此 MS 知识库文章:

SQL Server Express 用户实例和 ASP.net Web 应用程序项目存在的问题

使用 Visual Studio 2005、Visual Studio 2008 或 Visual Studio 2010 构建的 Web 应用程序以及依赖于 SQL Server Express 2005 或 SQL Server Express 2008 用户实例的 Web 应用程序不适用于新的应用程序池标识。这些产品是针对使用旧 NETWORK SERVICE 帐户运行的应用程序池开发和测试的。

如果您只想在普通.\SQLExpress实例中托管数据库并像常规 SQL Server 一样通过 TCP/IP 访问它,那么您需要做一些事情:

  1. 为 SQL Express 启用 TCP/IP。默认安装仅启用命名管道。您可以使用 SQL Server 配置管理器执行此操作:

    在此处输入图片描述

  2. SQL Express 的默认安装使用该NETWORK SERVICE帐户作为服务帐户。您可能需要授予此帐户对包含您的.mdf文件的文件夹的修改权限。

  3. .mdf将文件夹中的文件附加App_Data.\SQLExpress实例。

  4. 将您的连接字符串更改为常规的连接字符串例如

    <add name="SupportSystem" 
         connectionString="Database=MyDatabaseName;Data Source=172.16.3.44\SQLEXPRESS;User ID=dbuser;Password=dbpassword;Initial Catalog=MyDatabaseName;" 
         providerName="System.Data.SqlClient"/>
    

相关内容