【问题标题】:Troubleshooting IIS web package deployment with SQL database使用 SQL 数据库对 IIS Web 包部署进行故障排除
【发布时间】:2016-08-22 02:58:52
【问题描述】:

我有一个从 SQL 数据库获取数据的 .NET MVC 项目。

当我在本地机器上以调试模式运行项目时,它运行没有错误;但是,在我使用 Microsoft 的发布向导(创建一个 .zip,将该 .zip 移动到网站指向的 wwwRoot 文件夹)将项目部署到我的 IIS 服务器(我相信是版本 6)后,我遇到了一个问题:我访问网站的主页通过 URL 地址,但是当我输入登录 ID 时,它会产生一个内置的错误消息“无效的用户 ID”。

当输入有效 ID 时,唯一出现此错误的情况是无法访问数据库以检查登录凭据。因此,使用 SQL Profiler,我尝试查看是否对数据库进行了查询 - 答案似乎是“否”。

我已验证在 IIS 环境中正确配置了连接字符串,并且可以放心地假定没有与此问题相关的代码错误。

问题:还有哪些其他故障排除方法可用于 IIS 和 SQL 交互,以了解此错误的根源是什么,或者您可能需要哪些建议来尝试消除问题

【问题讨论】:

  • IIS 服务器上的应用程序事件。防火墙开了吗?他们在同一个域上吗? IIS 服务器真的可以“看到”sql 服务器吗?此外,您可能需要记录失败/成功的登录尝试。默认情况下,SQL Server 不会记录那些失败的尝试。
  • IIS 服务器(托管 SQL 服务器的同一台机器)上的事件日志给出错误消息“用户 'IIS APPPOOL\OPOC' 登录失败。原因:无法显式打开指定的数据库”。我确信它们在同一个域中,因为这个 IIS 服务器已经为这个项目运行了一段时间的测试环境。无论它是否可以看到 SQL 服务器,我不确定如何确认,但我已经假设了,因为在对一些视图进行一些更改后重新部署应用程序之前它正在工作
  • 将用户添加到数据库登录并授予该用户访问数据库的权限。代码中的连接字符串应该有它的凭据。它在您的机器上运行的原因可能是因为您是服务器上的系统管理员或其他人。查找在连接字符串的参数中输入凭据的方法。
  • 很高兴我能帮上忙。其背后的原因是需要访问数据库的服务需要被授予访问权限。嵌入在请求中,您想要使用(或拟人化)的实际凭据就在那里。就像... 为了能够敲门,您需要被授予访问权限。然后,要打开门并在那里做事,您需要访问权限。

标签: sql-server asp.net-mvc iis


【解决方案1】:

将用户添加到数据库登录并授予该用户访问数据库的权限。代码中的连接字符串应该有它的凭据。它在您的机器上运行的原因很可能是因为您是服务器上的系统管理员或其他人。查找在连接字符串的参数中输入凭据的方法。

https://www.youtube.com/watch?v=Sp6lR15iWMk

【讨论】:

  • 我在查看生产服务器后发现的另一件事 - 它的 AppPool 的标识设置为 NetworkService。我对测试环境做了这个,它也同样有效。我假设“NetworkService”身份向任何对该服务器具有有效网络访问权限的人授予权限?
  • 嗯.. 在域控制环境中远离NetworkService。强烈建议在域级别创建服务帐户。
  • 有趣,谢谢警告!由于它不是一个非常关键的应用程序,我假设我的前任最初创造了这一切,只是在做他似乎经常使用的“任何可以让它工作”的方法。将 Identity 设置为 LocalSystem 是否仍允许域中的所有计算机访问应用程序(只要根据域权限允许它们访问),还是它们需要在主机盒上具有特定的提升状态?仍然在我的脑海中解决这个问题,但你提供的信息比其他任何人都好,所以我想我会问的。
  • LocalSystem 不会授予您访问框外任何内容的权限。它非常适合沙盒环境(没有网络驱动器或任何东西)。如果您热衷于学习,我鼓励您查找SQL books online
猜你喜欢
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多