查找用户 Network Service 的临时文件夹?

24
我正在尝试编写一个包装器来帮助我们的客户还原SQL Server数据库。默认情况下,SQL Server作为用户Network Service运行,该用户权限非常有限。我们的客户有时会感到困惑,因为他们无法只指向任何位置的备份文件并进行还原。
我想将文件从他们选择的位置复制到SQL Server可以访问的临时位置,但是我很难找到这样的位置。我不能只调用Path.GetTempPath(),因为它会给我用户的临时文件夹,而SQL Server无法访问。
是否有一个文件夹我可以检索,它将始终起作用?
3个回答

37

Network Service账户的临时文件夹位于以下位置:

%Windir%\ServiceProfiles\NetworkService\AppData\Local\Temp

在Windows XP/2003上,网络服务配置文件位于通用用户配置文件目录中。在德语计算机上,它在此处:

C:\Dokumente und Einstellungen\NetworkService\Lokale Einstellungen\Temp

在英语计算机上,它将在这里:

C:\Documents and Settings\NetworkService\Local Settings\Temp

您可以通过查询以下注册表值来找到所有Windows版本上配置文件的路径:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-20\ProfileImagePath

但这并不会给出XP/2003上“本地设置”文件夹的本地化名称。

默认情况下,管理员可以写入网络服务配置文件。将其临时文件夹用于您的目的应该是完全可以的。


看起来像我想要的。我会试试。 - Kevin Gale
更新了我的答案,也包括了XP。 - Helge Klein
对于“本地系统”帐户,在Windows 2008及更高版本中,可以在“%WINDIR%\Temp”中找到。 - Martin Costello

4

在Windows Vista及以上版本中

  1. 系统账户 (NT AUTHORITY\SYSTEM)
    C:\Windows\TEMP

  2. 网络服务 (NT AUTHORITY\NETWORK SERVICE) C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp

  3. 本地服务 (NT AUTHORITY\LOCAL SERVICE) C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp


注:以上为Windows Vista及以上版本中的默认临时文件夹路径和对应的账户。

1
系统账户实际上在以下文件夹中存储配置文件,临时文件夹也可能存在于此处。(这通常是.NET更新临时文件的存储位置。) C:\Windows\System32\config\systemprofile\ - Thomas

0

为什么不给 NETWORK_SERVICE 权限到一个特定的文件夹,然后告诉用户把备份文件放在那里呢?

或者只需运行:

BACKUP DATABASE [master] TO DISK='master.bak'
GO

从SSMS中查看文件写入的位置。


2
我不想通过更改权限来定制每个客户的系统。系统管理员不喜欢我们告诉他们添加文件夹权限,除非没有其他选择,否则我宁愿不这样做。 - Kevin Gale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接