Ograniczanie użytkowników do TYLKO kopii zapasowych

13

Chcę wdrożyć wysyłanie dzienników w moim środowisku produkcyjnym. Oznacza to, że będę musiał zarządzać łańcuchami kopii zapasowych, które mogą zostać zakłócone przez osoby wykonujące kopie zapasowe w celu odświeżenia środowisk programistycznych. Jeśli mam awarię i chcę użyć kopii zapasowych dziennika do przywrócenia do punktu w czasie, będę również potrzebował kopii zapasowej wykonanej przez programistę.

Nie zdarzyłoby się to, gdyby programiści używali TYLKO kopii zapasowych. Moje pytanie brzmi zatem: czy istnieje sposób na ograniczenie użytkowników do możliwości wykonywania TYLKO kopii zapasowych?

James Anderson
źródło

Odpowiedzi:

12

Nie musisz ich używać COPY_ONLY. Tylko pośredni LOG BACKUPSprzełamie LSN. Możesz jednoznacznie DENY BACKUP LOG to [user|group]uprzywilejować programistów lub grupę programistów. Alternatywnie, po prostu utwórz ROLĘ i odrzuć dziennik kopii zapasowej do tej roli. Tak więc wszyscy użytkownicy w tej roli odziedziczą uprawnienia.

na przykład

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

Teraz przetestuj:

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.
Kin Shah
źródło
2

Dobre pytanie, na które nie mogę znaleźć dobrej odpowiedzi, ale oto jedno. Co się stanie, jeśli usuniesz wszystkich z roli kopii zapasowej, a następnie utworzysz zadanie, które wykorzystało polecenie wykonania jako polecenie dla określonego użytkownika, który upuszcza plik kopii zapasowej copy_only w określonej lokalizacji?

ACDBA
źródło
-1

To, co możesz zrobić, to 1) odmówić tworzenia kopii zapasowych (log i / lub pełny) takim użytkownikom, ale nadal 2) zezwalać im na rozpoczęcie zadania polegającego na wykonywaniu kopii zapasowej tylko bazy danych określonej bazy danych (działającej na koncie, które zostało przyznane pozwolenie na tworzenie kopii zapasowych). Mam takie rozwiązanie do zautomatyzowania automatycznego przywracania baz danych PROD do PRE-PROD do celów dochodzeniowych; konkretni użytkownicy mają dostęp do zadania (w PRE-PROD), które wykonuje kopię zapasową tylko w PROD, przenosi plik z PROD do PRE-PROD, a następnie przywraca przeniesioną kopię zapasową na serwerze PRE-PROD. W ten sposób upewniając się, że tacy użytkownicy nie mają możliwości złamania logiki tworzenia kopii zapasowych w PROD.

(Podczas badania problemów programiści mogą mieć pokusę, aby wykonać pełną kopię zapasową, aby przywrócić ją na serwerze testowym, przenosząc plik ze źródła na serwer testowy, nie wiedząc, że łamią logikę tworzenia kopii zapasowych ... więc zgadzam się z tym, że zmuszanie do kopiowania - ważne są tylko kopie zapasowe).

Benjamin RAIBAUD
źródło
Dlaczego obawiasz się o PEŁNĄ kopię zapasową z copy_only, ponieważ OP zajmuje się tylko zerwaniem sieci LSN?
Kin Shah
Cóż, zrobienie PEŁNEJ kopii zapasowej, a następnie przeniesienie pliku złamałoby logikę, prawda? Jeśli programista to zrobi, przeniesie plik na serwer deweloperów, to następna kopia zapasowa dziennika będzie miała wartość FirstLSN zgodną z CheckPointLSN brakującej pełnej kopii zapasowej. Jak następnie przywrócić bez brakującego pliku?
Benjamin RAIBAUD
Pełna kopia zapasowa nie resetuje LSN. Zrobi to tylko kopia zapasowa dziennika. Myślę, że mieszacie różne rzeczy.
Kin Shah
1
Och tak, masz rację. miałoby to znaczenie, jeśli zamiast kopii zapasowych dziennika wykonujesz kopie różnicowe. W takim razie przeprowadzka z dala jest ryzykowna. Mieszam różne rzeczy, dziękuję.
Benjamin RAIBAUD