.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(工作线程)在的时候,我知道是正确的连接字符串?
- 请检查您的数据库用户角色权限是否允许IIS APPPOL用户。
- 你能给我更多的信息吗?在哪里/如何检查?iis appol是什么意思?
- 请检查stackoverflow.com/questions/1933134/…和stackoverflow.com/questions/7698286/…
- 我签出了那个问题,如果你看最后一条评论,"…这只是为了通过Windows身份验证连接到SQL Server。"我没有使用Windows身份验证,我提供的是SQL Server凭据,因此这不适用于我?我还是试过了,但没用。;
- 是否已从SQL Server配置管理器启用SQL Server网络配置TCP/IP启用?
- 启用了TCP/IP和共享内存,但未启用命名管道。另外,如果我使用上述凭据并在SSMS中选择SQL Server身份验证,那么我就可以正常连接。还要注意,当我在常规ASPX文件的代码隐藏中时,这个连接会按预期工作。
- 您是否正在为不同的生成配置转换web.config文件?可能是为Yoru部署配置设置的连接字符串不同。
- 不。从目标计算机上的web.config获取连接字符串,并在我的调用中对其进行硬编码。只是为了确保不是那样的事情,我被绊倒了。
- 既然Quartz是一个后台进程,那么它是在设置连接字符串之前启动的吗?如果是这样,它可以使用默认连接。
- 不,我故意硬编码,这样在试图追踪这个的时候就没有机会了。
- 127.0.0.1是本地主机,您确定没有将硬编码留在其中吗?端口正确吗,15001或类似的东西。不使用默认端口?实际的例外情况是什么?有堆栈跟踪吗?
- 数据库与Web应用程序位于同一主机上,因此为127.0.0.1。这个确切的连接字符串适用于应用程序中的其他任何地方。所以没有不同的港口等。
- 可能很奇怪,但您可以尝试添加-persistensecurityinfo=true;
- 我不知道在连接字符串方面资本化是否重要,但尝试使用User Id,而不是User Id。
- 我不想使用127.0.0.1,但是URL名称(如www.XXXX.com,如果可能)或网络中计算机的实际IP号。另请查看您的SQL是否已启用接受外部连接。
- @davids数据库在Web服务器上的同一台计算机上。不允许通过外部IP地址连接到数据库。
- @约翰资本化并没有造成什么影响。
尝试应用程序池-->高级设置
网络服务

似乎无法打开与SQL Server的连接。
您需要为IIS APPPOOL\ASP.NET v4.0向SQL Server添加一个登录名,并向数据库授予权限。
在SSMS中,在服务器下展开安全性,然后右键单击登录并选择"新建登录…"。
在"新建登录"对话框中,输入应用程序池作为登录名,然后单击"确定"。
然后,您可以右键单击应用程序池的登录名,选择属性并选择"用户映射"。检查适当的数据库和适当的角色。我认为您可以选择db_datareader和db_datawriter,但如果您通过ef执行存储过程,我认为您仍然需要授予执行存储过程的权限。您可以在此处查看角色的详细信息
折射:杰夫·奥加塔
- 该解决方案用于Windows身份验证。我使用SQL Server身份验证登录,因此用户名使用sa。
- 您可以创建一个非Windows帐户的SQL Server帐户。确保在SSMS中的服务器上启用混合模式身份验证。您不想对应用程序帐户使用SA(系统管理员),因为这会给您的应用程序提供太多的权限,并可能带来一些严重的安全风险。我假设您的应用程序不需要创建和删除数据库、删除表等。
- 只需将integrated security=false设置为连接字符串。这应该可以完成这项工作(请参阅下面答案中的示例)
尝试将连接字符串中的集成安全性设置为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"); |