IIS APPPOOL\MyAppPool 无法登录到我的 SQL Server 数据库
Posted
技术标签:
【中文标题】IIS APPPOOL\\MyAppPool 无法登录到我的 SQL Server 数据库【英文标题】:IIS APPPOOL\MyAppPool unable to log in to my SQL Server databaseIIS APPPOOL\MyAppPool 无法登录到我的 SQL Server 数据库 【发布时间】:2012-02-25 12:35:22 【问题描述】:我有一个本地 WCF Web 服务项目,我正在尝试访问我的数据库。这是我的设置:
SQLServer 2008 R2 Express IIS 7.5 使用IIS APPPOOL\MyAppPool
应用程序池
AppPool 设置为面向 .Net 4.0,其标识设置为 ApplicationPoolIdentity。 AppPool 用户被添加到数据库中,并被分配了 dataReader 和 dataWriter 权限。我尝试将用户作为 Security\Logins 下的“登录”和 MyDatabase\Security\Users 下的用户添加到数据库中。
由于我最终会切换到 sql server 身份验证,因此我还尝试使用我在数据库中分配了读取/写入权限的真实 Windows 用户。 然后我尝试将 ApplicationPool 的身份转换为 NetworkService 并将 NT AUTHORITY\NETWORK SERVICE 用户也添加到数据库中,但同样没有成功。
这是我当前正在使用的连接字符串(具有集成安全性):
Server=.\SQLEXPRESS;Database=MyDatabase;Integrated Security=true"
当我尝试在我的 Web 服务代码中与数据库交互时,我会收到以下错误:
System.Data.SqlClient.SqlException:无法打开登录请求的数据库“MyDatabase”。登录失败。登录失败 对于用户 'IIS APPPOOL\MyAppPool'。
当使用ApplicationPool
以外的其他用户时,将显示他们的用户名而不是 IIS APPPOOL 用户名。
有谁知道我可能错过了什么?
更新:
在 Oded 和 Tomek 的帮助下,我现在很确定它与 SQL Server 有关。使用 SQL Server 身份验证时出现此错误(在 Windows 事件日志中)
原因:尝试使用 SQL 身份验证登录失败。服务器配置为仅用于 Windows 身份验证。>
使用集成安全性(IIS APPPOOL\MyAppPool 用户)我在事件日志中收到此错误
原因:无法打开明确指定的数据库。
服务器配置为使用“SQL Server 和 Windows 身份验证模式”,但这让我感到困惑。似乎第二条消息只是意味着凭据错误,这也很奇怪,因为 AppPool 用户没有密码。使用 guptam 在帖子 6 中发布的脚本:http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=121202 不会显示我的 IISAPPPOOL 用户,也不会显示为 SQLServer 身份验证创建的用户。用户确实存在于 Login 和 Users 下,并且分配了正确的权限。
【问题讨论】:
【参考方案1】:连接字符串应该是:
"Server=.\SQLEXPRESS;Database=MyDatabase;Integrated Security=SSPI;"
Integrated Security
的值是 SSPI
,而不是 True
。
还有另一种语法:
"Server=.\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;"
这里的关键是Trusted_Connection
,而不是Integrated Security
。
我建议看看connectionstrings.com - 一个正确连接字符串的好资源。
【讨论】:
没有运气,同样的错误:(。你链接的那个页面非常好。 @HenrikSonesson - 你确定你有一个为用户IIS APPPOOL\MyAppPool
工作的Login
?您是否尝试以该用户身份登录?
我确定该用户存在于数据库中,但它不是一个完整的帐户,只是一个服务/虚拟用户。不幸的是,我无法找到有关如何测试该用户是否可以访问数据库的任何线索。 (除了从 Web 服务调用数据库之外,这就是我要解决的问题)
@HenrikSonesson - user 和 login 之间存在差异。即使你两者都有,它们也需要相互关联。至于测试——打开Management Studio,连接数据库只需要从信任连接更改设置并指定登录。
是的,我通过用户映射将它们相互映射。使用 SQL Server 身份验证而不是 Windows 身份验证连接到 SSMS 并使用 IISAPPPOOL\MyAppPool 会导致(win 事件日志):“服务器配置为仅用于 Windows 身份验证”。我已经检查并仔细检查了服务器确实处于接受 Windows 身份验证和 SQL Server 身份验证的模式。【参考方案2】:
转到您的 IIS 管理器 -> 应用程序池。右键单击您的网站 ApplicationPool 并选择高级设置。并将 Identity 更改为 LocalSystem。
Reference
【讨论】:
此版本的 IIS 以 AppPool Identity 作为帐户来建立登录权限。这是 IIS 中的安全改进。将其设置为再次使用本地系统允许此 IIS 增强旨在修复的安全漏洞。 谢谢阿里!它对我有用。有没有办法保持安全并访问它?【参考方案3】:你能试试这些步骤吗(你描述的一些步骤有点不清楚)。让我们尝试使用“sql server authentication”
-
创建登录安全->登录,标记“sql server authentication”,提供密码,取消勾选“user mast change password at next login”
选择“默认数据库”到您使用的那个
转到“用户映射”页面并选择您的数据库
将下面的连接字符串与您刚刚配置的用户一起使用
connectionString="Data Source=YourDbServerName;Initial Catalog=YourDbName;User ID=YourLogin;Password=YourPass"
【讨论】:
对不起,有点不清楚,我将编辑原始帖子以更好地描述。我确实尝试了这些步骤,但没有成功。我错过了“用户必须更改密码”的勾选,但不幸的是,这也没有帮助。 @HenrikSonesson:你有同样的例外吗?您可以使用连接字符串中的登录名从 SSMS 连接到该数据库吗? 是的,我得到了同样的例外。无论我是连接 vie webservice 还是 SSMS,尝试 SQL Server 身份验证登录都会呈现相同的“服务器仅配置为 win 身份验证”。问题是它不是......它设置为同时使用:(。我倾向于尽快重新安装 SSMS。【参考方案4】:我最终决定重新安装 SSMS 并从头开始重新创建我的数据库。它现在已按应有的方式启动并运行。在某些基本设置中,我一定有一些根本性的错误。为所有的困惑道歉,感谢所有的帮助!
【讨论】:
以上是关于IIS APPPOOL\MyAppPool 无法登录到我的 SQL Server 数据库的主要内容,如果未能解决你的问题,请参考以下文章
登录失败。用户 'IIS APPPOOL\ASP.NET v4.0' 登录失败
OpenSSL解决ArcGIS软件部署的证书问题(三)--ArcGIS绑定证书