使用网络服务帐户附加到sql server express db文件的问题

时间:2010-01-24 19:26:33

标签: .net asp.net linq-to-sql visual-studio-2010 sql-server-express

我正在使用VS2010 Beta 2来创建IIS托管的WCF服务。我添加了一个SQL Server数据库文件,用作一个简单的数据存储,然后生成一些Linq to SQL类来与之交互。

当Linq to SQL尝试连接到数据库时,我遇到了问题。我在下面收到以下错误:

数据库'master'中的CREATE DATABASE权限被拒绝。 尝试为文件c:\ Source \ SampleApp \ App_Data \ GameData.mdf附加自动命名的数据库失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者它位于UNC共享上。

要解决以前的问题,我已经将web.config更改为不使用用户实例:

<add name="GameDataConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\GameData.mdf;Integrated Security=True;User Instance=False"
  providerName="System.Data.SqlClient" />

我的第一反应是应用程序池的用户帐户(NETWORK SERVICE)无法打开文件,因此我已授予对数据库文件和日志文件的完全控制权,但这没有帮助。

有趣的是,如果我将应用程序池更改为在本地系统下运行,一切正常。还有什么我必须授予NETWORK SERVICE访问权限吗?

2 个答案:

答案 0 :(得分:2)

Yopu必须使用Sql Management Studio Express并添加网络服务帐户作为登录。然后在指定的数据库上为其分配DBO权限,或者只是为其指定sysadmin角色。请注意,在安装SQL Server 2005任何版本时,您都有初始选项来设置服务的登录帐户。如果您指定网络服务。默认情况下,网络服务帐户将被授予sysadmin角色。

希望这有帮助

答案 1 :(得分:1)

如果您未使用<identity impersonate="true"/>,则您的应用程序池用户无权访问您的数据库。

您还可以创建数据库用户(SQL身份验证)并将其凭据(用户名/密码)修复到连接字符串中。这就是我通常做的事情。