【问题标题】:How to set-up SQL Server / IIS 7.0 to allow ASP.NET MVC website to access to database?如何设置 SQL Server / IIS 7.0 以允许 ASP.NET MVC 网站访问数据库?
【发布时间】:2012-06-25 21:54:44
【问题描述】:

我已经构建了一个 ASP.NET MVC 2 网站,我使用 IIS 7.0 使用 Rackspace 云服务器托管该网站。

当我尝试在服务器上使用 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>]

我的网站在我的家用 PC 上运行良好,因此问题与连接数据库有关。

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

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

    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 分钟来帮助我吗?

【问题讨论】:

  • 你能发布你当前的连接字符串吗?我假设您正在使用集成安全性进行连接,因此 AppPoolIdentity 用于连接到 SQL Server。另外,请说明您的 Web 和 sql 服务器是否在 Active Directory 设置中运行。
  • 使用:Source=SetsOfSix; Initial Catalog=SetsOfSix; Integrated Security=SSPI;。让我去检查有关活动目录设置的问题...
  • 在 IIS 上未安装 Active Directory Domain Services。如何检查 web 和 sql 服务器是否在 Active Directoty 设置中运行?
  • 最简单的方法是转到计算机属性并在“计算机名称、域和工作组设置”下查看是否列出了 DomainWorkgroup 名称。我之所以问,是因为根据这一点,可以应用两种不同的选项(使用域用户连接到 SQL,或者使用 SQL 身份验证)。
  • 我有:Computer Name = SETSOFSIX; Full Computer Name = SETSOFSIX; Workgroup = Workgroup;

标签: asp.net-mvc sql-server-2008 database-connection


【解决方案1】:

由于您的服务器(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 列表中,确保选中publicdb_datareaderdb_datawriter
  4. 现在授予您的用户执行存储过程的权限。作为sa,在 Management Studio 中执行:

    授予我的用户名执行权限;

  5. 你已经完成了。

至于安全性,您可以稍后将myUserName 的权限细化为不能,例如删除表或其他对象。

在您的应用程序中,您现在应该在第 1 点使用连接字符串。

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

【讨论】:

  • 谢谢。我缺少的一点是 (a) 设置 GRANT EXECUTE 和 (b) 在我的 LINQ-to-SQL 中我有一个不正确的连接字符串引用。修复两个已解决的问题。你的帮助让我找到了正确的地方。
猜你喜欢
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多