关于c#:. NET SqlClient从ASP.NET WebForms应用程序中的后台线程登录失败

.NET SqlClient login failure from background thread in ASP.NET WebForms application

  • ASP.NET WebForms,vs2013 4.51,

我在做一些后台处理使用quartz.net where I make a我连接到我的SQL服务器。这所有的作品在我的开发机器局部表达对IIS部署它,但当我向我的一个分期运行IIS的服务器的运行问题。

的代码连接到数据库不能简单:

1
myConnection = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=MyDB;User ID=sa;Password=myPass");

然而,在这种类型的例外:

System.Data.SqlClient.SqlException: Login failed for user 'IIS
APPPOOL\somehost.somedomain.com'.

我有一个100 %正确的连接字符串中使用正常的页面。当它只是罚款。那么是什么吗,我是apppool参考到IIS。

逆境是人使用SqlConnection连接字符串传递什么信息?做一些奇怪的形式,当用户连接impersonation制造是我们的吗?

把另一个方式。我如何使在SqlConnection(工作线程)在的时候,我知道是正确的连接字符串?


尝试应用程序池-->高级设置

网络服务

enter image description here


似乎无法打开与SQL Server的连接。

您需要为IIS APPPOOL\ASP.NET v4.0向SQL Server添加一个登录名,并向数据库授予权限。

在SSMS中,在服务器下展开安全性,然后右键单击登录并选择"新建登录…"。

在"新建登录"对话框中,输入应用程序池作为登录名,然后单击"确定"。

然后,您可以右键单击应用程序池的登录名,选择属性并选择"用户映射"。检查适当的数据库和适当的角色。我认为您可以选择db_datareaderdb_datawriter,但如果您通过ef执行存储过程,我认为您仍然需要授予执行存储过程的权限。您可以在此处查看角色的详细信息

折射:杰夫·奥加塔


尝试将连接字符串中的集成安全性设置为false。这将阻止它尝试使用Windows身份验证。

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionString(v=vs.110).aspx


由于您提供了用户ID和密码,因此需要将"integrated security=false"设置为连接字符串。这样,它就不会使用应用程序池用户连接到数据库。例如:

1
myConnection = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=MyDB;Integrated Security=False;User ID=sa;Password=myPass");