我在我的开发机器上运行着一个实例的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 登录帐户下运行。
与此实例的通信通过命名管道进行(正如您所发现的)。
这里有一篇关于微软用户实例的资料文章:
虽然此功能在 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 访问它,那么您需要做一些事情:
为 SQL Express 启用 TCP/IP。默认安装仅启用命名管道。您可以使用 SQL Server 配置管理器执行此操作:
SQL Express 的默认安装使用该
NETWORK SERVICE
帐户作为服务帐户。您可能需要授予此帐户对包含您的.mdf
文件的文件夹的修改权限。.mdf
将文件夹中的文件附加App_Data
到.\SQLExpress
实例。将您的连接字符串更改为常规的连接字符串例如
<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"/>