【发布时间】:2013-10-23 21:38:27
【问题描述】:
在我安装在 IIS 7 上的 Web 应用程序中,我需要连接到 SQL Server Express 数据库文件(仅用于测试目的。)我在 web.config 文件中使用以下连接字符串:
<configuration>
<connectionStrings>
<add name="MyDbConnection" connectionString="data source=.\SQLEXPRESS;Integrated Security=true;AttachDBFilename='C:\Users\UserName\CSharp\WebApp004_TestDB\App_Data\Database1.mdf';User Instance=true;Connection Timeout=15" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
我还为 C:\Users\UserName\CSharp\WebApp004_TestDB\App_Data 文件夹设置了 NTFS 权限,如下所示:
- IIS_IUSRS = 完全控制
- IUSR = 完全控制
- NT SERVICE\MSSQL$SQLEXPRESS = 完全控制
- IIS AppPool\[MyAppPoolName] = FullControl
这仍然没有帮助。当我尝试通过我的 C# 代码连接到该数据库时,出现异常:
尝试为文件附加自动命名的数据库 C:\Users\UserName\CSharp\WebApp004_TestDB\App_Data\Database1.mdf 失败的。存在同名数据库,或指定文件不能 被打开,或者它位于 UNC 共享上。
请注意,相同的代码可以在另一台安装了实际 SQL Server 的机器上运行(在我使用数据库用户名和密码的地方使用不同的连接字符串。)
知道我在这里缺少什么吗?
【问题讨论】:
-
猜测帐户 sql server 正在运行,因为在您的用户文件夹中看不到该文件。鉴于它很遥远,这很有可能。通常的解决方案是将文件移动到带有服务器的机器上,并放入帐户有权访问的文件夹中。
-
@TonyHopkinson:谢谢,好点子。实际上,如果我将 .mdf 文件移动到“C:\Folder1”并使其公开可用,它就可以工作。为什么它不喜欢我的用户文件夹?我认为应该设置这些 ACL 权限。
-
如果您在同一台机器上,您可以在可以看到您的用户文件夹的帐户下运行 sql server。不过可能需要设置一个。但是无法从共享中附加,因此不同的机器已经出局,从磁盘还原也有类似的问题。放弃,只是移动了文件,然后使用了那个路径,太脆弱了,管理员一直用活动目录等破坏它。
-
@TonyHopkinson:是的,我想我也会放弃,只使用公用文件夹。不过很奇怪,因为我似乎已经设置了所有必要的权限,我可以在用户子树中的原始文件夹中遇到这些权限......
-
在我们的例子中,它与 sql server 运行的内置帐户有关。我们采取了快速、简单、灵活和易于管理的方式。诚然,胆怯和不冒险,再次,它仍然有效。 :)
标签: asp.net sql-server permissions sql-server-express