Могу ли я использовать встроенную учетную запись для доступа к различным сетевым драйверам в IIS7?

Мне приходится использовать одно странное веб-приложение IIS7, которому требуется доступ к трем сетевым драйверам: первый находится на NAS, а два других — это общие папки на разных серверах Windows. Но это странное веб-приложение IIS должно использовать одну и ту же учетную запись для доступа ко всем трем папкам. До сих пор я пробовал эти комбинации:

  1. использовать учетную запись NAS для доступа к NAS IIS7: да
  2. использовать сквозную учетную запись для доступа к NAS в IIS7: да
  3. использовать учетную запись Windows для доступа к сетевому драйверу в IIS7: да
  4. использовать сквозную учетную запись для доступа к сетевому драйверу в IIS7: нет

Учетная запись NAS имеет префикс IP, который Windows не поддерживает, поэтому я не могу заставить все сетевые диски использовать одну и ту же учетную запись.

Я не знаю, почему IIS7 не может использовать сквозную учетную запись (LocalService, LocalSystem, NetworService или ApplicationPoolIdentify) для доступа к сетевой общей папке Windows, в то время как IIS7 может использовать встроенную учетную запись для доступа к NAS. Это не имеет смысла.

Пожалуйста помоги!


Когда NAS и все три сервера находятся в одном домене, эта статья может решить эту проблему Пользователь ApplicationPoolIdentity не может изменять файлы в общей папке в Windows Server 2008.

Перейдите в общую папку -> щелкните правой кнопкой мыши -> свойства -> безопасность -> изменить -> добавить (как обычно) -> выбрать типы объектов -> проверить компьютеры -> теперь введите имя компьютера, с которого работает ваше приложение. , где вы опубликовали свое приложение IIS.

Но домена в моем состоянии нет.


person neohope    schedule 20.11.2014    source источник


Ответы (1)


Есть три способа решить эту проблему:

1、Добавьте одну и ту же учетную запись Windows/один и тот же пароль на все три сервера сетевых драйверов.

В IIS7 используйте эту учетную запись Windows в качестве удостоверения.

Однако для учетной записи NAS требуется префикс IP, а для учетной записи Windows префикс IP не разрешен. Так что я не могу использовать этот.

2. Добавьте серверы в один и тот же домен, разрешите серверу IIS7 доступ к сетевым драйверам на всех серверах сетевых драйверов.

Однако конечный пользователь не позволяет мне это сделать.

3、Наконец-то я написал еще одно веб-приложение IIS7, которое помогает странному веб-приложению IIS7 регистрировать все сетевые драйверы.

Конечный пользователь должен получить доступ к моему веб-приложению один раз, прежде чем он сможет использовать странное веб-приложение 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;
        }
    }
}
person neohope    schedule 23.03.2015