2012-06-24 49 views
6

我已经构建了一个ASP.NET MVC 2网站,我使用IIS 7.0与Rackspace Cloud Server一起托管。如何设置SQL Server/IIS 7.0以允许ASP.NET MVC网站访问数据库?

当我尝试在服务器上使用IIS 7.0在localhost下测试网站时,我收到一个错误页面。这来自于SQL日志(我使用SQL网络版):

Error: 18456, Severity: 14, State: 11 
Login failed for user 'IIS APPPOOL\DefaultAppPool'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: <local machine>] 

我的网站作品在我的家用电脑精做的问题是事做与数据库的连接。

已经研究了错误消息代码,它表明我有一个有效的数据库登录但服务器访问失败。我做了解决此阅读各种论坛和这里栈是什么,我都试过了,没有一个已经解决了这个问题(包括计算器/ serverfault。):

  1. 使用SQL Server身份验证设置新的登录。我在SQL中创建了一个新的登录名并赋予我的数据库正确的访问权限。我在web配置中使用了以下连接字符串:

    Data Source = myServer; Initial Catalog = myDB; User Id = myUsername; Password = myPassword;

  2. 创建新登录为IIS APPPOOL\DefaultAppPool。我使用正确的访问权限在SQL中创建了新的登录并使用了Windows身份验证。连接字符串如下:

    Server = myServer; Database = myDataBase; Trusted_Connection = True;

  3. 使用现有网络登录NT AUTHORITY\NETWORK SERVICE。我用正确的访问权限将这个用户映射到我的数据库。连接字符串如下:

    Server = myServer; Database = myDataBase; Trusted_Connection = True;

这些问题是我在网上阅读材料时的主要选项。最后,这里的一些其他的东西,可能会有所帮助:

  • 设置SQL来以管理员身份运行没有解决不了的问题
  • 关闭UAC没有帮助
  • 我的应用程序池使用ApplicationPoolIdentity(最好出于安全原因)

总之,我的网站不会启动,因为它无法从数据库中获取对象,因此引发错误。问题在于对服务器的访问权限设置不正确。我无法弄清楚我需要什么配置的SQL登录/连接字符串/域访问权限。

这让我烦了3个星期 - 请问您可以腾出5分钟来帮助我吗?

+0

你能发布你当前的连接字符串吗?我假设你正在连接集成安全性,因此AppPoolIdentity用于连接到SQL Server。此外,请提及您的Web和SQL Server是否在Active Directory安装中运行。 –

+0

使用:'Source = SetsOfSix;初始目录= SetsOfSix;集成安全= SSPI;'。让我去检查活动目录设置的问题... –

+0

在IIS上没有安装“Active Directory域服务”。如何检查Web和sql服务器是否在Active Directoty安装中运行? –

回答

8

由于您的服务器(Web和SQL)不是域的一部分,因此无法使用Windows身份验证(集成安全性)连接到SQL Server。

在IIS中,当连接字符串中有Integrated Security=SSPI时,用于连接到SQL Server的实际用户是应用程序池标识。

您应该使用您的选项1,意思是使用SQL Server身份验证设置新的登录名。

因此,步骤是:

  1. 创建myUsername SQL Server用户。
  2. 在用户的属性对话框中,转至Securables部分并确保已选中Public
  3. 接下来,转到User mapping部分(在左侧)。在列表中查找您的数据库并检查它。在下面的Database role membership列表中,请确保您检查public,db_datareaderdb_datawriter
  4. 现在给你的用户执行存储过程的权利。由于sa在Management Studio中执行:

    GRANT EXECUTE T​​O myUserName;

  5. 你完成了。

至于安全性,您可以稍后再修正的myUserName的权利,不能够,例如删除表或其他对象。

在您的应用程序,你应该在你点1

如果您有任何其他的问题,现在在连接字符串中使用,那么请张贴的错误消息。

+0

谢谢。我缺少的是(a)设置'GRANT EXECUTE'和(b)在我的LINQ-to-SQL中,我有一个不正确的连接字符串引用。解决这两个问题。你的帮助让我看到了正确的地方。 –

相关问题