我在 DMZ 网络中有三个没有任何 AD 的 Windows Server 2012 R2。两台服务器是使用 ASP.NET 的前端 Web 服务器,一台具有 SQL Server 和一个网络共享,两个前端服务器都使用该网络共享来共享数据。
我的问题是如何配置应用程序池标识和网络共享,以便 ASP.NET 应用程序可以读取和写入网络共享?
当您可以将域帐户用于应用程序池身份但此设置中没有可用的 AD 时,这很简单。
我在 DMZ 网络中有三个没有任何 AD 的 Windows Server 2012 R2。两台服务器是使用 ASP.NET 的前端 Web 服务器,一台具有 SQL Server 和一个网络共享,两个前端服务器都使用该网络共享来共享数据。
我的问题是如何配置应用程序池标识和网络共享,以便 ASP.NET 应用程序可以读取和写入网络共享?
当您可以将域帐户用于应用程序池身份但此设置中没有可用的 AD 时,这很简单。
自从我成功设置服务器以来,我将回答我自己的问题。这就是我所做的:
1)在所有三台服务器上创建一个具有相同用户名和密码的帐户。确保不会过期或必须更改。
2) 创建网络共享并赋予新帐户读/写权限。我还测试了我可以使用新帐户从前端服务器连接,以验证没有防火墙阻碍。
3) 将用户包含在 IIS_IUSRS 组中,间接赋予它作为批处理作业登录的权限。
4)运行以下命令授予用户权限
aspnet_regiis -ga <your_app_pool_user>
查看更多:如何:为 ASP.NET 2.0 应用程序创建服务帐户 (MSDN)
5) 重新启动 WAS 和 IIS 以确保在尝试使用帐户时对帐户组成员身份的更改生效。
C:> net stop was /y
C:> net start w3svc
6)创建一个应用程序池并设置身份。
这是我在尝试设置身份时遇到错误消息的部分。
从 IIS 管理器中,我收到以下错误对话框:“执行此操作时出错。详细信息:值不在预期范围内。”
尝试从命令行设置应用程序池标识时收到类似错误:
C:> appcmd set config /section:applicationPools
/[name='test-pool'].processModel.identityType:SpecificUser
/[name='test-pool'].processModel.userName:MyAccountName
/[name='test-pool'].processModel.password:P@ssw0rd
ERROR ( hresult:80070057, message:Failed to commit configuration changes.
The parameter is incorrect.
)
当我删除最后一个参数密码时,该命令将成功更改身份类型并设置用户名,但我不知道为什么我无法设置密码,所以我反驳说直接编辑我的applicationHost.config文件。不幸的是,密码以明文结尾。
<configuration>
...
<system.applicationHost>
<applicationPools>
...
<add name="test-pool" managedRuntimeVersion="v4.0">
<processModel identityType="SpecificUser"
userName="MyAccountName" password="P@ssw0rd" />
</add>
...
</applicationPools>
...
</system.applicationHost>
...
</configuration>
7) 最后,我将我的 Web 应用程序设置为使用该应用程序,它可以毫无问题地访问网络共享。
我有同样的问题,但不能让密码以明文形式显示,所以我进一步挖掘并找到了这篇文章: http ://social.technet.microsoft.com/wiki/contents/articles/30344.custom-iis- app-pool-identity-value-does-not-fall-within-the-expected-range.aspx
诊断的关键步骤是查看正确的事件:
为了弄清楚如何解决这个问题,我进入了事件查看器。应用程序日志中没有任何内容,因此我前往应用程序和服务日志 => Microsoft => Windows => IIS-Configuration。此处的日志默认是禁用的,因此必须启用它们。(为此,右键单击日志,然后选择启用日志。)启用后,重新尝试设置身份,并刷新视图(操作窗格或 F5),瞧!现在我们有了更多信息关于错误。结果中有两个错误(事件 ID 42 和 43)。
我遇到了与文章中相同的事件错误:
ID 42:无法在“\?\C:\windows\system32\inetsrv\config\applicationHost.config”中初始化“IISWASOnlyAesProvider”加密提供程序。请检查您的配置。
ID 43:无法加密属性“Microsoft.ApplicationHost.AesProtectedConfigurationProvider”。
然后我做了以下事情:
c:\windows\System32\inetsrv\config
)<configProtectedData><providers>
部分(在c:\windows\System32\inetsrv\config\applicationHost.config
)然后我可以再次为应用程序池设置自定义标识。
有类似的问题。重新安装 IIS 管理器并获得一个新的 applicationHost.config 当我对新旧文件执行 WinDiff 时,我注意到 SessionKey 不同。现在工作。AesProvider 和 IISWASOnlyAesProvider