我正在尝试编写一个包装器来帮助我们的客户恢复SQL Server数据库。默认情况下,SQL Server作为用户网络服务运行,其权限非常有限。我们的客户有时会感到困惑,他们不能只指向任何位置的备份文件并将其恢复。
我想将文件从他们选择的位置复制到SQL Server可以访问的临时位置,但我很难找到位置。我不能只调用Path.GetTempPath(),因为这给了我SQL Server无法访问的用户临时值。
我可以检索一个总是有效的文件夹吗?
答案 0 :(得分:30)
网络服务帐户的临时文件夹位于:
%WINDIR%\ ServiceProfiles \网络服务\应用程序数据\本地\温度
在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上的“本地设置”的本地化名称。
默认情况下,管理员可以写入网络服务配置文件。使用它的临时文件夹就可以了。
答案 1 :(得分:1)
在Windows Vista及更高版本
系统帐户(NT AUTHORITY\SYSTEM
)
C:\Windows\TEMP
网络服务(NT AUTHORITY\NETWORK SERVICE
)
C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
本地服务(NT AUTHORITY\LOCAL SERVICE
)
C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp
答案 2 :(得分:0)
为什么不将NETWORK_SERVICE权限授予特定文件夹并告诉用户将备份文件放在那里?
或者只是运行:
BACKUP DATABASE [master] TO DISK='master.bak'
GO
来自SSMS的并查看文件的写入位置。