Ограничение пользователей для копирования только резервных копий

13

Я ищу развертывание доставки журналов в моей производственной среде. Это будет означать, что мне придется управлять цепочками резервного копирования, которые могут нарушить люди, делающие резервные копии для обновления сред разработки. Если у меня возникнет ошибка и я хочу использовать резервные копии журналов для восстановления на определенный момент времени, мне также понадобится резервная копия, созданная разработчиком.

Этого не произошло бы, если бы разработчики использовали только резервные копии ТОЛЬКО КОПИЯ. Итак, мой вопрос: есть ли способ ограничить пользователей, чтобы иметь возможность только выполнять резервное копирование только КОПИЯ?

Джеймс Андерсон
источник

Ответы:

12

Вам не нужно их использовать COPY_ONLY. Только промежуточный LOG BACKUPSсломает LSN. То, что вы можете сделать, это явная DENY BACKUP LOG to [user|group]привилегия для разработчиков или группы разработчиков. В качестве альтернативы, просто создайте РОЛЬ и запретите резервное копирование этой роли. Таким образом, все пользователи в этой роли будут наследовать разрешения.

например

USE test_kin
GO
CREATE ROLE [deny_log_backups]
GO
USE [test_kin]
GO
CREATE USER [Kin] FOR LOGIN [Kin]
GO
ALTER USER [Kin] WITH DEFAULT_SCHEMA=[dbo]
GO
use test_kin
GO
DENY BACKUP LOG TO [deny_log_backups]
GO
USE test_kin
GO
EXEC sp_addrolemember N'deny_log_backups', N'kin'
GO

Теперь проверьте это:

backup database [test_kin]
to disk = 'C:\crap_test\kin_test_full.bak'
with compression, stats =10, init

---- ### success for FULL BACKUP 

backup log [test_kin]
to disk = 'C:\crap_test\kin_test_log.log'

 --- $$$ ERROR MESSAGE 

Msg 262, Level 14, State 1, Line 3
BACKUP LOG permission denied in database 'test_kin'.
Msg 3013, Level 16, State 1, Line 3
BACKUP LOG is terminating abnormally.
Кин Шах
источник
2

Хороший вопрос, на который я не могу найти хороший ответ, но вот один. Что если вы удалили всех с ролью резервного копирования, а затем создали задачу, которая использовала команду execute as для определенного пользователя, которая удаляет файл резервной копии copy_only в определенное место?

ACDBA
источник
-1

Что вы могли бы сделать, это 1) запретить резервное копирование (журнал и / или полное) таким пользователям, но все же 2) позволить им запустить задание, которое выполняет резервное копирование определенной базы данных (работает под учетной записью, которая предоставляется резервное разрешение). У меня есть такое решение для автоматизации автоматического восстановления баз данных PROD-PRE-PROD для целей расследования; определенные пользователи имеют доступ к заданию (в PRE-PROD), которое выполняет резервное копирование в PROD, перемещает файл из PROD в PRE-PROD и затем восстанавливает перемещенную резервную копию на сервере PRE-PROD. Таким образом, убедившись, что такие пользователи не могут нарушить логику резервного копирования в PROD.

(При расследовании проблем у разработчиков может возникнуть соблазн сделать полную резервную копию, чтобы восстановить ее на тестовом сервере, фактически переместив файл с исходного на тестовый сервер, не зная, что они нарушают логику резервного копирования ... поэтому я согласен, что принудительное получение копии важно только резервное копирование.)

Бенджамин РАЙБО
источник
Почему вы беспокоитесь о ПОЛНОМ резервном копировании с copy_only, так как OP касается только взлома LSN?
Кин Шах
Ну, если взять полную резервную копию, а затем переместить файл, это нарушит логику, верно? Если разработчик сделает это, переместит файл на сервер разработчика, то у следующей резервной копии LOG будет значение FirstLSN, совпадающее с CheckPointLSN отсутствующей полной резервной копии. Как вам потом восстановить без отсутствующего файла?
Бенджамин RAIBAUD
Полная резервная копия не сбрасывает LSN. Только резервная копия журнала сделает это. Я предполагаю, что вы путаете вещи.
Кин Шах
1
Ах да, ты прав. это было бы важно, если бы вместо резервных копий журнала вы делали резервные копии различий. Тогда отодвигаться полностью рискованно. Я все перепутал, спасибо.
Бенджамин RAIBAUD