【问题标题】:Error with Connection String in MVCMVC 中的连接字符串错误
【发布时间】:2016-02-10 20:42:45
【问题描述】:

我正在尝试从我的 MVC 应用程序中的 SQL Server 数据库表中检索数据。我有以下连接字符串:

<add name="EmployeeContext" connectionString="Data Source=localhost;Initial Catalog=SampleHR;Integrated Security=True" 
     providerName="System.Data.SqlClient"/>

但这给了我以下错误:

无法打开登录请求的数据库“SampleHR”。登录失败。 用户 'IIS APPPOOL\DefaultAppPool' 登录失败。

在我的 ActionResult 代码的这一行:

Employee empPersonal = epcontext.Employees.Single(emp => emp.EmployeeID == eid);

我尝试了以下两个连接字符串:

<!-- <add name="Employee_PersonalContext" connectionString ="server=MANASI-HP\MSSQLSERVER; database=SampleHR; integrated security=SSPI;"
     providerName="System.Data.SqlClient"/> -->



<!-- <add name="Employee_PersonalContext" connectionString ="server=MANASI-HP\MSSQLSERVER; database=SampleHR; username=dbo; password=;"
     providerName="System.Data.SqlClient"/> -->

但这两个给了我错误:“底层提供程序无法打开。”

我有带有 Windows 身份验证的 SQL Server 2012。我运行了查询“select CURRENT_USER”并获得了用户名“dbo”。我没有设置任何密码,我正在使用 Windows 身份验证。我也在 IIS 服务器上运行该应用程序。

可能是什么问题?如果我必须在此处添加任何代码,请告诉我。

编辑:我转到项目属性并将服务器更改为 SQL Server 而不是 IIS,它可以使用此连接字符串:

<add name="EmployeeContext" connectionString="Data Source=localhost;Initial Catalog=SampleHR;Integrated Security=True;User ID=IIS APPPOOL\DefaultAppPool;Password="
     providerName="System.Data.SqlClient"/>

但不是这个:

<add name="MvcDemoConnectionString" connectionString="Server=MANASI-HP;Database=SampleHR;Integrated Security=true" 
     providerName="System.Data.SqlClient"/>  

我很困惑.. :(

编辑 2(11 月 11 日):在开始使用 .NET 中的 MVC 应用程序之前,我没有对 IIS 管理器进行任何更改。只需按照教程中的说明进行操作。我找到了这个关于 IIS 的页面。

IIS Data Source Settings

在我开始在 IIS 上构建我的应用程序之前,我需要做这些事情吗?

2015 年 12 月 5 日: 我按照这两页上的说明进行操作: ASP.NET Web DeploymentDeploy Database with IIS

还是不行。

【问题讨论】:

  • 您是否对以下任何回复感到幸运?
  • 没有。我不知道我必须在哪里进行更改/设置:SQL Server、IIS 或 Visual Studio

标签: c# sql-server asp.net-mvc


【解决方案1】:

如果您在 IIS 中运行应用程序并且您的连接字符串使用集成安全性,则它将使用的用户是应用程序池运行时的身份。您可以更改运行应用程序池的用户,也可以提供要在连接字符串中使用的 Windows 身份验证用户的用户名和密码(类似于 Data Source=localhost;Initial Catalog=SampleHR;Integrated Security=True;User ID=username;Password=password

【讨论】:

  • 我从未见过这种方法被证明是有效的(在连接字符串中提供 windows 用户名),但我会对它确实有效的任何文档感兴趣。
【解决方案2】:

看起来您在 IIS 中托管了应用程序并允许匿名访问,并且您的连接字符串接受 Windows 身份验证用户。

无论何时进行此类设置,我都会建议在服务帐户而不是 AppPoolIdentity 下运行 IIS 应用程序池,并确保您的 SQL Server 允许服务帐户用户。

要进行测试,请转到应用程序池 -> 高级设置 -> 并使用您的网络/Windows 凭据更改“身份”。如果您的帐户可以访问 sql server,您的问题将暂时得到解决。

注意:我不建议继续在个人帐户下运行您的应用程序。因为一旦您更改了密码,您就必须再次更改应用程序池标识。

【讨论】:

  • 在应用程序池中,它显示了三个选项:.NETv4.5、.NETv4.5 Classic 和 DefaultAppPool。我点击了 DefaultAppPool -> 高级设置 -> 身份。这向我展示了一个带有两个选项的表单:1)内置帐户->在下拉框中有四个选项:LocalService、Local System、NetworkService 和 ApplicationPoolIdentity(已选中)2)自定义帐户:我单击了设置按钮,它给了我一个表单来设置凭据-> 用户名和密码。这是我必须做出改变的地方吗?
  • 我尝试使用我的帐户名和密码创建自定义帐户,但显示密码无效。它要求什么样的密码?
  • 首先您必须检查您的应用程序正在使用哪个应用程序池。您可以在 IIS 中检查应用程序的基本设置。要设置服务帐户,您必须使用“自定义帐户”
【解决方案3】:

如果您不进行更改,则每个应用程序池都有自己的身份。在您的情况下,只需使用 SQL Management Studio 将一个名为 IIS APPPOOL\MyAppPool 的新用户添加到您的数据库 SampleHR。您可以在数据库的“安全/用户”子节点中找到用户列表。

【讨论】:

  • 在创建新用户时,我指定了 UserName = IIS APPPOOL\MyAppPool, Login Name = ManasiHP-Manasi。默认架构应该是什么?我可以从列表中选择任何人吗?另外,用户名是否应该是“IIS APPPOOL\DefaultAppPool,因为它会引发错误?或者我是否也必须在 IIS 中创建一个具有相同名称的实体?
  • 创建用户失败,因为用户名包含无效字符...我尝试删除名称中的空格,但发生了同样的错误。我只尝试了用户名“MyAppPool”和“DefaultAppPool”。然后错误说,“登录已经有一个不同用户名下的帐户。”
【解决方案4】:

我只需要在 SSMS 中授予用户权限。我刚刚回到 ISS 中的默认设置,在 SSMS 中授予用户权限,仅此而已。 有人有其他解决方案吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多