【问题标题】:Can I use a build-in account to access different network drivers in IIS7?我可以使用内置帐户访问 IIS7 中的不同网络驱动程序吗?
【发布时间】:2014-11-20 11:55:09
【问题描述】:

我必须使用一个奇怪的 IIS7 Web 应用程序,它需要访问三个网络驱动程序:第一个在 NAS 上,另外两个是不同 Windows 服务器上的共享文件夹。但是这个奇怪的 IIS web 应用程序需要使用同一个帐户来访问所有三个文件夹。到目前为止,我已经尝试过这些组合:

  1. 使用NAS账号访问NAS是IIS7:是的
  2. 在IIS7中使用pass through账号访问NAS:是的
  3. 在 IIS7 中使用 windows 帐户访问网络驱动程序:是
  4. 在 IIS7 中使用 pass through 帐户访问网络驱动程序:否

NAS 帐户有一个 Windows 不支持的 ip 前缀,这就是为什么我不能强制所有网络驱动器使用同一个帐户。

不知道为什么IIS7 不能使用pass through 帐号(LocalService、LocalSystem、NetworService 或ApplicationPoolIdentify)访问Windows 的net 共享文件夹,而IIS7 可以使用内置帐号访问NAS。这没有意义。

请帮忙!


当NAS和三台服务器都在同一个域时,这篇文章可以解决这个问题ApplicationPoolIdentity user cannot modify files in shared folder in Windows Server 2008。

转到共享文件夹->右键单击->属性->安全性->编辑->添加(到目前为止)->选择对象类型->检查计算机->现在输入应用程序所在的计算机名称正在工作,您发布了 IIS 应用程序。

但在我的情况下没有域。

【问题讨论】:

    标签: windows iis nas


    【解决方案1】:

    解决这个问题的方法有以下三种:

    1、在所有三个网络驱动服务器中添加相同的windows帐户/相同的密码。

    在 IIS7 中,将此 windows 帐户用作身份。

    但是 NAS 账户需要 ip 前缀,而 Windows 账户不允许 ip 前缀。所以我不能用这个。

    2、将服务器加入同一个域,允许IIS7服务器访问所有网络驱动服务器中的网络驱动。

    但是,最终用户不允许我这样做。

    3、最后我又写了一个IIS7 web app,帮助怪异的IIS7 web app登录所有的网络驱动。

    最终用户必须访问我的网络应用程序一次,然后才能使用奇怪的 IIS7 网络应用程序。

    在我的网络应用中,我经常使用这个 API:WNetAddConnection2。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Runtime.InteropServices;
    
    namespace IISReadDiskTest
    {
        public class NetworkDrive
        {
            public enum ResourceScope
            {
                RESOURCE_CONNECTED = 1,
                RESOURCE_GLOBALNET,
                RESOURCE_REMEMBERED,
                RESOURCE_RECENT,
                RESOURCE_CONTEXT
            }
    
            public enum ResourceType
            {
                RESOURCETYPE_ANY,
                RESOURCETYPE_DISK,
                RESOURCETYPE_PRINT,
                RESOURCETYPE_RESERVED
            }
    
            public enum ResourceUsage
            {
                RESOURCEUSAGE_CONNECTABLE = 0x00000001,
                RESOURCEUSAGE_CONTAINER = 0x00000002,
                RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
                RESOURCEUSAGE_SIBLING = 0x00000008,
                RESOURCEUSAGE_ATTACHED = 0x00000010,
                RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
            }
    
            public enum ResourceDisplayType
            {
                RESOURCEDISPLAYTYPE_GENERIC,
                RESOURCEDISPLAYTYPE_DOMAIN,
                RESOURCEDISPLAYTYPE_SERVER,
                RESOURCEDISPLAYTYPE_SHARE,
                RESOURCEDISPLAYTYPE_FILE,
                RESOURCEDISPLAYTYPE_GROUP,
                RESOURCEDISPLAYTYPE_NETWORK,
                RESOURCEDISPLAYTYPE_ROOT,
                RESOURCEDISPLAYTYPE_SHAREADMIN,
                RESOURCEDISPLAYTYPE_DIRECTORY,
                RESOURCEDISPLAYTYPE_TREE,
                RESOURCEDISPLAYTYPE_NDSCONTAINER
            }
    
            [StructLayout(LayoutKind.Sequential)]
            private class NETRESOURCE
            {
                public ResourceScope dwScope = 0;
                public ResourceType dwType = 0;
                public ResourceDisplayType dwDisplayType = 0;
                public ResourceUsage dwUsage = 0;
                public string lpLocalName = null;
                public string lpRemoteName = null;
                public string lpComment = null;
                public string lpProvider = null;
            }
    
            [DllImport("mpr.dll")]
            private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);
    
            public static int MapNetworkDrive(string remotePath, string localDrive, string userName, string passWord)
            {
                NETRESOURCE myNetResource = new NETRESOURCE();
                myNetResource.lpLocalName = localDrive;
                myNetResource.lpRemoteName = remotePath;
                myNetResource.lpProvider = null;
                int result = WNetAddConnection2(myNetResource, passWord, userName, 0);
                return result;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-28
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2022-01-21
      • 2020-04-23
      相关资源
      最近更新 更多