Sql Server Резервное копирование и перемещение файла резервной копии: как справиться с правами доступа к файлам? - PullRequest
0 голосов
/ 17 марта 2010

С нашим продуктом у нас есть простой инструмент резервного копирования для базы данных сервера SQL. Этот инструмент должен просто сделать полное резервное копирование и восстановление в любую папку и из нее.

Конечно, пользователю (обычно администратору) необходимо разрешение на запись в целевую папку.

Чтобы избежать проблемы невозможности резервного копирования на сетевой диск, Я записываю резервную копию во временный файл в каталоге резервного копирования Sql Server. Затем я перемещаю его в целевую папку. Для этого требуется разрешение на удаление временного файла из папки резервного копирования на серверах sql. Восстановление аналогично в другом направлении.

Это работало нормально, пока кто-то не проверил его на Vista, где у пользователя нет доступа на запись в резервную папку по умолчанию.

Так что есть много решений, чтобы решить эту проблему, но ни одно из них не казалось действительно хорошим.

Одним из решений было бы найти другую папку для временного файла. Как пользователю сервера sql, так и администратору, выполняющему резервное копирование, необходимы разрешения на чтение и запись. Есть ли такой каталог?

Есть еще идеи? Большое спасибо.


Редактировать: Решение должно работать с Sql Server 2005 и 2008, C # 3.0 (Smo), Windows XP и Vista.

Ответы [ 2 ]

0 голосов
/ 19 марта 2010

Хорошо, я нашел решение. На самом деле это довольно просто, если вы знаете немного больше о Vista, чем я.

Папка резервной копии настраивается так же, как в XP, но разрешения администратора недоступны, пока процесс не перейдет в режим повышенных прав. Чтобы попасть туда, мне просто нужно было добавить манифест к исполняемому файлу, который требует прав администратора:

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

Теперь я получаю UAC при вызове приложения, и все работает нормально.

0 голосов
/ 17 марта 2010

Приложения, выполняющие операции резервного копирования, могут запросить открытие файлов в режиме резервного копирования.Это означает, что приложение имеет привилегию SeBackupPrivilege и открывает файлы с установленным флагом FILE_FLAG_BACKUP_SEMANTICS:

SeBackupPrivilege - позволяет получать содержимое файла, дажеесли дескриптор безопасности в файле не может предоставить такой доступ.Вызывающая сторона с включенным SeBackupPrivilege устраняет необходимость в любой проверке безопасности на основе ACL.

Хотя это звучит технически и сложно, на практике все сводится к копированию файлов с использованием ROBOCOPY /B

...