我编写了一个Windows服务,它产生了一个单独的进程.此过程创建一个COM对象.如果服务在"本地系统"帐户下运行,一切正常,但如果服务在"网络服务"帐户下运行,则外部进程启动但无法创建COM对象.从COM对象创建返回的错误不是标准的COM错误(我认为它特定于正在创建的COM对象).
那么,我如何确定"本地系统"和"网络服务"这两个帐户的区别?这些内置帐户看起来非常神秘,似乎没有人知道它们.
由于标准服务帐户的功能存在很多混淆,我会尝试快速运行.
首先是实际账户:
LocalService帐户(首选)
有限的服务帐户,与网络服务非常相似,用于运行标准的最低权限服务.但是,与网络服务不同,它无法访问网络,因为计算机以匿名用户身份访问网络.
名称: NT AUTHORITY\LocalService
该帐户没有密码(您提供的任何密码信息都会被忽略)
HKCU代表LocalService用户帐户
在本地计算机上具有最小权限
在网络上显示匿名凭据
SID:S-1-5-19
在HKEY_USERS注册表项下有自己的配置文件(HKEY_USERS\S-1-5-19
)
NetworkService帐户
用于运行标准特权服务的有限服务帐户.此帐户比本地系统(甚至管理员)更受限制,但仍有权作为计算机访问网络(请参阅上面的警告).
NT AUTHORITY\NetworkService
该帐户没有密码(您提供的任何密码信息都会被忽略)
HKCU代表NetworkService用户帐户
在本地计算机上具有最小权限
将计算机的凭据(例如MANGO$
)提供给远程服务器
SID:S-1-5-20
在HKEY_USERS注册表项下有自己的配置文件(HKEY_USERS\S-1-5-20
)
如果尝试使用它安排任务,请进入NETWORK SERVICE
" 选择用户或组"对话框
LocalSystem帐户 (危险,请勿使用!)
完全信任的帐户,比管理员帐户更多.此帐户无法在单个框中执行任何操作,并且它有权作为计算机访问网络(这需要Active Directory并授予计算机帐户权限)
名称:( .\LocalSystem
也可以使用LocalSystem
或ComputerName\LocalSystem
)
该帐户没有密码(您提供的任何密码信息都会被忽略)
SID:S-1-5-18
没有自己的任何个人资料(HKCU
代表默认用户)
在本地计算机上拥有广泛的权限
将计算机的凭据(例如MANGO$
)提供给远程服务器
在谈到访问网络时,这仅涉及SPNEGO(协商),NTLM和Kerberos,而不涉及任何其他身份验证机制.例如,正在运行的处理LocalService
仍然可以访问互联网.
作为标准开箱即用帐户运行的一般问题是,如果您修改任何默认权限,那么您正在扩展所有以该帐户运行的所有内容.因此,如果您将DBO授予数据库,则作为本地服务或网络服务运行的服务不仅可以访问该数据库,还可以访问作为这些帐户运行的所有其他服务.如果每个开发人员都这样做,那么计算机将拥有一个服务帐户,该帐户具有执行任何操作的权限(更具体地说,是授予该帐户的所有不同附加权限的超集).
从安全角度来看,始终最好以您自己的服务帐户身份运行,该帐户具有您执行服务所需的权限,而不是其他任何权限.但是,此方法的成本是设置您的服务帐户和管理密码.这是每个应用程序需要管理的平衡行为.
在您的特定情况下,您可能看到的问题是DCOM或COM +激活仅限于给定的一组帐户.在Windows XP SP2,Windows Server 2003及更高版本中,激活权限受到严重限制.您应该使用组件服务MMC管理单元检查您的特定COM对象并查看激活权限.如果您不是作为计算机帐户访问网络上的任何内容,则应认真考虑使用本地服务(而非本地系统,基本上是操作系统).
在Windows Server 2003中,你无法运行计划任务为
NT_AUTHORITY\LocalService
(也称为本地服务帐户),或
NT AUTHORITY\NetworkService
(又名网络服务帐户).
该功能仅在Task Scheduler 2.0中添加,该程序仅存在于Windows Vista/Windows Server 2008及更高版本中.
运行的服务NetworkService
在网络上显示计算机凭据.这意味着如果您的计算机被调用mango
,它将显示为计算机帐户 MANGO$
: