【问题标题】:Sql Server Backup and move backup file: How to cope with file permissions?Sql Server 备份和移动备份文件:如何应对文件权限?
【发布时间】:2010-03-17 16:10:55
【问题描述】:

我们的产品为 sql server 数据库提供了一个简单的备份工具。此工具应该只是对任何文件夹进行完整备份和恢复。

当然,用户(通常是管理员)需要写入目标文件夹的权限。

为避免无法执行备份到网络驱动器的问题,我将备份写入 Sql Server 备份目录中的临时文件。然后我将它移动到目标文件夹。 这需要从 sql 服务器备份文件夹中删除临时文件的权限。恢复在另一个方向上也是一样的。

这似乎工作正常,直到有人在 vista 上对其进行了测试,默认情况下,用户没有对备份文件夹的写入权限

所以有很多解决方案可以解决这个问题,但似乎都不是很好。

一种解决方案是为临时文件找到另一个文件夹。 sql server 用户和执行备份的管理员都需要读写权限。有这样的目录吗?

还有其他想法吗?非常感谢。


编辑:解决方案必须适用于 Sql Server 2005 和 2008、C# 3.0 (Smo)、Windows XP 和 Vista。

【问题讨论】:

  • 为什么你不能手动为你用来保存备份文件的文件夹设置正确的权限?
  • 它由安装人员安装,必须开箱即用。

标签: sql-server sql-server-2005 backup windows-vista file-permissions


【解决方案1】:

执行备份操作的应用程序可以请求以备份模式打开文件。这意味着应用程序具有SeBackupPrivilege 权限,并且它打开设置了 FILE_FLAG_BACKUP_SEMANTICS 标志的文件:

SeBackupPrivilege——允许文件内容 检索,即使安全 文件上的描述符可能不会授予 这样的访问。来电者 启用 SeBackupPrivilege 可避免 需要任何基于 ACL 的安全检查。

虽然这听起来技术性和复杂性,但在实践中归结为使用 ROBOCOPY /B 复制文件

【讨论】:

  • 我怎样才能删除临时文件? (顺便说一句:它也必须在 XP 上工作)
  • 删除文件需要有权限。如果您没有权限,则必须将备份文件创建到您将从文件夹设置中继承权限的文件夹中。为此,在 BACKUP 语句上使用限定路径,以便 SQL 不使用默认文件夹。默认情况下没有这样的文件夹(SQL 服务帐户和用户都有这样的权限),必须创建这样的文件夹,并且必须在应用程序部署期间(在设置期间)设置正确的 ACL。
  • 例如:SQL 服务帐户是域\sqluser。该应用程序由域\用户安装。在安装过程中,.msi 在域\用户的配置文件中创建一个文件夹用于备份,c:\Users\domain.user\AppData\MyApp\Backups。它授予域\sqluser 文件夹中继承对象的创建和写入权限。当应用程序运行时,它会将完整路径 c:\Users\...\Backups\backupfile.bak 传递给 SQL。 SQL 有权创建文件,用户可以完全控制生成的备份文件(从文件夹继承)。
【解决方案2】:

好的,我找到了解决方案。如果你比我更了解Vista,其实很简单。

备份文件夹的配置方式与 XP 下相同,但在进程处于提升模式之前,管理员权限不可用。要到达那里,我只需要向需要管理员权限的可执行文件添加一个清单:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

现在我在调用应用程序时得到了一个 UAC,一切正常。

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多