通过我们的产品,我们为sql server数据库提供了一个简单的备份工具。此工具只需进行完整备份并从任何文件夹恢复。
当然,用户(通常是管理员)需要获得写入目标文件夹的权限。
为避免无法执行网络驱动器备份的问题,我将备份写入Sql Server备份目录中的临时文件。然后我将其移动到目标文件夹。这需要从sql servers备份文件夹中删除临时文件的权限。另一方面恢复是一样的。
这似乎工作正常,直到有人在vista上测试它,默认情况下用户没有对备份文件夹的写入权限。
所以有很多解决方案可以解决这个问题,但它们似乎都不是很好。
一种解决方案是为临时文件找到另一个文件夹。 sql server用户以及执行备份的管理员都需要读写权限。有这样的目录吗?
还有其他想法吗?非常感谢。
编辑:解决方案必须适用于Sql Server 2005和2008,C#3.0(Smo),Windows XP和Vista。
答案 0 :(得分:0)
执行备份操作的应用程序可以请求以备份模式打开文件。这意味着应用程序具有SeBackupPrivilege权限,并且它打开了设置了FILE_FLAG_BACKUP_SEMANTICS标志的文件:
SeBackupPrivilege - 允许文件内容 检索,即使安全 文件上的描述符可能不会授予 这种访问。一个来电者 启用SeBackupPrivilege可以避免使用 需要任何基于ACL的安全检查。
虽然这听起来技术性和复杂性,但实际上归结为使用ROBOCOPY /B
复制文件
答案 1 :(得分:0)
好的,我找到了解决方案。如果你比我更了解Vista,那实际上非常简单。
备份文件夹的配置方式与XP相同,但在进程处于提升模式之前,管理员权限不可用。为此,我只需要向需要管理员权限的可执行文件添加清单:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
现在我在调用应用程序时得到一个UAC,一切正常。