如何设置SQL Server/IIS 7.0以允许ASP.NET MVC网站访问数据库?

Ale*_*x P 6 asp.net-mvc database-connection sql-server-2008

我已经构建了一个ASP.NET MVC 2网站,我使用IIS 7.0托管Rackspace Cloud Server.

当我尝试在服务器上使用IIS 7.0在localhost下测试网站时,我得到一个错误页面.这来自SQL日志(我正在使用SQL Web Edition):

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>]
Run Code Online (Sandbox Code Playgroud)

我的网站在家用电脑上工作正常,因此问题与连接数据库有关.

研究了错误消息代码后,它表明我有一个有效的数据库登录但服务器访问失败了.我在各种论坛(包括stackoverflow/serverfault)上做了一堆阅读,这是我尝试过的,没有一个解决了这个问题:

  1. 使用SQL Server身份验证设置新登录.我在SQL中创建了一个新的登录名,并为我的DB提供了正确的访问权限.我在web配置中使用了以下连接字符串:

    数据源= myServer;初始目录= myDB;用户ID = myUsername;密码= myPassword;

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

    服务器= myServer上;数据库= MyDatabase的; Trusted_Connection = TRUE;

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

    服务器= myServer上;数据库= MyDatabase的; Trusted_Connection = TRUE;

当我在线阅读材料时,这些似乎是主要的选择.最后,这里还有一些其他可能有帮助的事情:

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

简而言之,我的网站无法启动,因为它无法从数据库中获取对象,因此会抛出错误.问题是未正确设置对服务器的访问权限.我无法弄清楚我需要的SQL登录/连接字符串/域访问权限的配置.

这让我烦恼了3个星期 - 你能不用5分钟来帮助我吗?

Mar*_* N. 8

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

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

您应该使用您的选项1,这意味着使用SQL Server身份验证设置新登录.

那么,步骤将是:

  1. 创建myUsernameSQL 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处的连接字符串.

如果您有任何其他问题,请发布错误消息.