【问题标题】:Find temp folder for user Network Service?查找用户网络服务的临时文件夹?
【发布时间】:2011-03-24 14:40:43
【问题描述】:

我正在尝试编写一个包装器来帮助我们的客户恢复 SQL Server 数据库。默认情况下,SQL Server 作为用户网络服务运行,其权限非常有限。我们的客户有时会感到困惑,他们不能只指向任何位置的备份文件并恢复它。

我想将文件从他们选择的位置复制到 SQL Server 可以访问的临时位置,但我很难找到位置。我不能只调用 Path.GetTempPath() 因为这给了我 SQL Server 无法访问的用户临时。

是否有一个我可以检索且始终有效的文件夹?

【问题讨论】:

    标签: .net sql-server windows


    【解决方案1】:

    网络服务帐户的临时文件夹位于此处:

    %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 上“本地设置”的本地化名称。

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

    【讨论】:

    • 这看起来像我所追求的。我会试试的。
    • 更新了我的答案以包括 XP。
    • 对于Local System 帐户,可以在Windows 2008 及更高版本的%WINDIR%\Temp 上找到它。
    【解决方案2】:

    在 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

    【讨论】:

    • 系统帐户实际上将配置文件存储在以下文件夹中,并且其中也可能存在临时文件夹。 (它通常是 .NET 更新临时文件的存储。) C:\Windows\System32\config\systemprofile\
    【解决方案3】:

    为什么不只授予特定文件夹的 NETWORK_SERVICE 权限并告诉用户将备份文件放在那里?

    或者直接运行:

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

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

    【讨论】:

    • 我不想通过更改权限来自定义每个客户系统。系统管理员不喜欢我们告诉他们为文件夹添加权限,除非我别无选择,否则我宁愿不这样做。
    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2012-04-06
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多