我在一台机器上运行SQL Express 2008。
对于某些开发,我使用了AttachDB连接string。 我真的不记得确切的原因,但这些都不是正常的方式。 我觉得我想生活编辑一些数据,过了一段时间,我发现如何从pipe理工作室连接…我用\\.\pipe\A2108B22-19AA-41\tsql\query
但是,我想学习MS SQLpipe理更深一层,想知道,这是如何在技术上的工作,以及如何从主要实例(可连接通过.\SQLExpress
)分离?
另外,我记得在某处读过,但我可能错了,这是SQL Express的一个特性,而不是SQL Server的主要产品。 这是正确的还是我错了?
问题的最后一部分的原因是,我想知道这是否是SQL托pipe中的“后门”,或者是否可以禁用它。 我为人们托pipe了几个网站,并向用户发放了大小限制的用户/密码和数据库。 在我花费数小时进行testing/琢磨之前,我只是想知道有没有人对此有所了解?
如果您使用的连接string如下所示:
AttachDBFilename=|DataDirectory|MyDB.mdf;User Instance=true`
那么你正在使用被称为“用户实例化”的SQL Expressfunction。
SQL Server Express 2005中引入了此function,使开发人员能够在自己的(非pipe理员)login下运行SQL Server实例。
还有一个.\SQLExpress
命名实例正在运行,即在安装时创build的实例。 但是,如果使用AttachDBFilename
用户实例function连接到数据库,则会启动一个新的 SQL Express实例来处理对AttachDBFilename
数据库的访问,此“用户实例”将在您的Windowslogin帐户下运行。
与这个实例的通信发生在一个命名pipe道上(正如你发现的那样)。
这里有一篇关于用户实例的信息文章:
非pipe理员用户实例(MSDN)
虽然此function在SQL Server 2008 R2 Express上仍然可用,但看起来不久的将来它将被弃用或被删除,build议您不要使用它:
此function将在未来版本的Microsoft SQL Server中删除。 避免在新的开发工作中使用此function,并计划修改当前使用此function的应用程序。
用户实例化也与在IIS7和IIS7.5上的ApplicationPoolIdentity
帐户下运行的网站不兼容。 有关更多信息,请参阅此MS知识库文章:
SQL Server Express用户实例和ASP.net Web应用程序项目的问题
使用Visual Studio 2005,Visual Studio 2008或Visual Studio 2010构build的Web应用程序依赖于SQL Server Express 2005或SQL Server Express 2008的用户实例,但不适用于新的应用程序池标识。 这些产品是针对使用旧NETWORK SERVICE帐户运行的应用程序池开发和testing的。
如果您只想将数据库托pipe在正常的.\SQLExpress
实例中,并且可以像常规的SQL Server那样通过TCP / IP访问数据库,那么您需要做一些事情:
为SQL Express启用TCP / IP。 默认安装只启用命名pipe道。 您可以使用SQL Serverconfigurationpipe理器来执行此操作:
SQL Express的默认安装使用NETWORK SERVICE
帐户作为服务帐户。 您可能需要为包含您的.mdf
文件的文件夹上的此帐户授予修改权限。
将您的App_Data
文件夹中的.mdf
文件附加到.\SQLExpress
实例。
将连接string更改为常规连接string,例如
<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"/>