Я написал службу Windows, которая порождает отдельный процесс. Этот процесс создает COM-объект. Если служба работает под учетной записью "Локальная система", все работает нормально, но если служба работает под учетной записью "Сетевая служба", внешний процесс запускается, но не создается COM-объект. Ошибка, возвращаемая из создания COM-объекта, не является стандартной ошибкой COM (я думаю, что она специфична для создаваемого COM-объекта).
Итак, как мне определить, как отличаются две учетные записи, "Локальная система" и "Сетевая служба"? Эти встроенные учетные записи кажутся очень загадочными, и о них никто не знает.
Поскольку существует так много путаницы в функциональности стандартных учетных записей службы, я постараюсь быстро выполнить работу.
Сначала фактические учетные записи:
Аккаунт LocalService (желательно)
Ограниченная учетная запись службы, которая очень похожа на Network Service и предназначена для запуска стандартных служб с наименьшими привилегиями. Однако, в отличие от Network Service, он не имеет доступа к сети, поскольку машина обращается к сети как анонимный пользователь.
NT AUTHORITY\LocalService
HKEY_USERS\S-1-5-19
)
Ограниченная учетная запись службы, предназначенная для запуска стандартных привилегированных сервисов. Эта учетная запись гораздо более ограничена, чем локальная система (или даже администратор), но по-прежнему имеет право доступа к сети в качестве машины (см. Выше).
NT AUTHORITY\NetworkService
MANGO$
) для удаленных серверов.HKEY_USERS\S-1-5-20
)NETWORK SERVICE
в диалоговом окне "Выбор пользователя или группы"
Локальная система учетная запись (опасно, не используйте!)
Полностью доверенная учетная запись, а не учетная запись администратора. В одном окне, который эта учетная запись не может сделать, ничего нет, и она имеет право на доступ к сети как машине (для этого требуется Active Directory и предоставление разрешения учетной записи компьютера).
.\LocalSystem
(также можно использовать LocalSystem
или ComputerName\LocalSystem
)HKCU
представляет пользователя по умолчанию)MANGO$
) для удаленных серверов.
Выше, когда речь идет о доступе к сети, это относится только к SPNEGO (Negotiate), NTLM и Kerberos, а не к какой-либо другой аутентификации механизм. Например, обработка, выполняемая как LocalService
, может по-прежнему работать в Интернете.
Общая проблема с запуском как стандартной учетной записи из окна заключается в том, что если вы изменяете какие-либо разрешения по умолчанию, вы расширяете множество вещей, все, что работает, поскольку эта учетная запись может делать. Поэтому, если вы предоставите DBO базе данных, ваша служба, работающая как локальная служба или сетевая служба, будет работать только в этой базе данных, но все остальное работает как эти учетные записи. Если каждый разработчик делает это, компьютер будет иметь учетную запись службы, которая имеет права делать практически все (более конкретно, надмножество всех дополнительных дополнительных привилегий, предоставленных этой учетной записи).
Всегда лучше с точки зрения безопасности работать как ваша собственная учетная запись службы, которая имеет точно разрешения, необходимые для выполнения вашей услуги, и ничего больше. Однако стоимость этого подхода заключается в настройке учетной записи службы и управлении паролем. Это балансирующий акт, которым нужно управлять каждым приложением.
В вашем конкретном случае проблема, которую вы, вероятно, видите, заключается в том, что активация DCOM или COM + ограничена определенным набором учетных записей. В Windows XP с пакетом обновления 2 (SP2) Windows Server 2003 и выше разрешение активации было значительно ограничено. Вы должны использовать Snapin службы MMC компонентов, чтобы изучить ваш конкретный объект COM и просмотреть разрешения активации. Если вы не получаете доступа к чему-либо в сети в качестве учетной записи компьютера, вам следует серьезно подумать об использовании Локальной службы(а не локальная система, которая в основном является операционной системой).
В Windows Server 2003 не может выполнить запланированную задачу как
NT_AUTHORITY\LocalService
(например, учетная запись локальной службы) илиNT AUTHORITY\NetworkService
(так называемая учетная запись сетевой службы).Эта возможность была добавлена только с Task Scheduler 2.0, который существует только в Windows Vista/Windows Server 2008 и новее.
Служба, работающая как NetworkService
, представляет учетные данные компьютера в сети. Это означает, что если ваш компьютер был вызван mango
, он будет отображаться как учетная запись машины MANGO$
: