IIS 7.5 ApplicationPoolIdentity权限

时间:2015-07-20 21:21:42

标签: asp.net iis oracle11g permissions applicationpoolidentity

我在设置AppPoolIdentity的权限时遇到了一些困难。

失败的请求日志中显示的错误是:

ModuleName="IIS Web Core", Notification="BEGIN_REQUEST", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="The I/O operation has been aborted because of either a thread exit or an application request.
 (0x800703e3)", ConfigExceptionInfo=""

我认为这是一个权限问题,因为将AppPoolIdentity更改为应用程序池的 LocalSystem 会使网站中的所有内容都有效。当AppPoolIdentity设置为 ApplicationPoolIdentity 时,上面显示的错误就是我收到的错误。我使用以下语法命名了应用程序池标识:

IIS APPPOOL\<app_pool_name>

我已经确认:

  1. 我在设置权限时使用了正确的app_pool_name。 (在设置权限时使用检查名称有效,这意味着Windows正在查找用户。)
  2. wwwroot和oracle客户端目录具有允许应用程序池标识读取和执行文件的权限。
  3. 在IIS中启用了匿名身份验证,并设置为使用应用程序池标识。
  4. 是否需要授予权限我错过的其他目录?还是我完全错过了一些其他问题?

    对于一些额外的背景,我使用的是带有IIS 7.5的Windows Server 2008 R2。

    提前致谢!

    修改 我做了一些跟踪,感谢彼得给出的建议,发现我错过了一些权限。我失踪的权限是:

    • 完全控制HKLM \ SOFTWARE \ Microsoft \ SystemCertificates \
    • 完全控制到 HKU {GUID} \ Software \ Policies \ Microsoft \ SystemCertificates \
    • 完全控制HKLM \ SOFTWARE \ Microsoft \ EnterpriseCertificates \
    • 读取HKLM \ System \ CurrentControlSet \ services \ eventlog \ Security \
    • 完全控制到C:\ Windows \ SysWOW64 \ config \ systemprofile \ AppData \

    修改这些权限后,我的应用程序现在使用自定义应用程序错误登录到Windows事件日志。 (基本上,自定义应用程序错误告诉我它无法建立与数据库的连接。)。请记住,如果我作为LocalSystem运行而不是IIS中的AppPoolIdentity用户,一切正常。再次使用Process Monitor,我发现Oracle Client正在记录到sqlnet.log文件。在此文件中显示:

    Fatal NI connect error 12631, connecting to:
     (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=[DB IP ADDRESS])(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=[SERVICE NAME])(CID=(PROGRAM=C:\Windows\SysWOW64\inetsrv\w3wp.exe)(HOST=[WEB APPLICATION SERVER NAME])(USER=[APP POOL IDENTITY USER]))))
    
      VERSION INFORMATION:
        TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
        Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 11.2.0.1.0 - Production
      Time: 21-JUL-2015 16:28:00
      Tracing not turned on.
      Tns error struct:
        ns main err code: 12631
    
    TNS-12631: Username retrieval failed
        ns secondary err code: 0
        nt main err code: 0
        nt secondary err code: 0
        nt OS err code: 0
    

    有关为什么将AppPoolIdentity用作尝试连接的用户的任何想法?

1 个答案:

答案 0 :(得分:1)

我终于解决了这个问题。

在上面的编辑中,我添加了解决第一个问题的必要权限。

为了实现这一点,我修改了我的SQLNET.ora文件,如下所示:

# sqlnet.ora Network Configuration File: E:\Oracle_client\product\11.2.0.1\client_x32\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
#SQLNET.AUTHENTICATION_SERVICES= (NONE, NTS)
SQLNET.AUTHENTICATION_SERVICES= (NONE)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

请注意,原始SQLNET.AUTHENTICATION_SERVICES现在仅设置为NONE。

(我相信这个改变并没有立即生效,但是几分钟之后就完成了。重新启动机器可能有点过分,但足够了。)

我还将AppPoolIdentity切换到LocalService,然后再切换回AppPoolIdentity。在这样做之后它起作用了,但我不认为反复切换AppPoolIdentity对它的工作有任何影响。