Restringindo os usuários a COPY ONLY backups

13

Estou procurando implantar o envio de logs no meu ambiente de produção. Isso significa que terei que gerenciar cadeias de backup que podem ser interrompidas por pessoas que fazem backups para atualizar os ambientes de desenvolvimento. Se houver uma falha e desejar usar os backups de log para restaurar em um determinado momento, também precisarei do backup realizado pelo desenvolvedor.

Isso não aconteceria se os desenvolvedores usassem apenas backups de COPY ONLY. Portanto, minha pergunta é: existe uma maneira de restringir os usuários a serem capazes de executar apenas backups de COPY ONLY?

James Anderson
fonte

Respostas:

12

Você não precisa que eles usem COPY_ONLY. Apenas um intermediário LOG BACKUPSirá quebrar o LSN. O que você pode fazer é um DENY BACKUP LOG to [user|group]privilégio explícito para desenvolvedores ou grupo de desenvolvedores. Como alternativa, basta criar um ROLE e negar o log de backup para essa função. Portanto, todos os usuários nessa função herdarão as permissões.

por exemplo

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

Agora teste:

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
fonte
2

Boa pergunta para a qual não consigo encontrar uma boa resposta, mas aqui está uma. E se você removesse todo mundo de ter a função de backup e depois criasse uma tarefa que usasse o comando execute como para um usuário específico que solte o arquivo de backup copy_only em um local específico?

ACDBA
fonte
-1

O que você pode fazer é 1) negar backups (log e / ou completo) para esses usuários, mas ainda 2) permitir que eles iniciem um trabalho que executa backup apenas de cópia de um banco de dados específico (executando em uma conta que é concedida permissão de backup). Eu tenho essa solução para automatizar restaurações automáticas de bancos de dados PROD para PRE-PROD para fins de investigação; usuários específicos têm acesso a um trabalho (no PRE-PROD) que faz um backup somente de cópia no PROD, move o arquivo do PROD para o PRE-PROD e, em seguida, restaura o backup movido no servidor PRE-PROD. Assim, garantindo que esses usuários não tenham como quebrar a lógica de backup no PROD.

(Ao investigar problemas, os desenvolvedores podem ficar tentados a fazer um backup completo para restaurá-lo em um servidor de teste, movendo o arquivo da origem para o servidor de teste sem saber que eles estão violando a lógica do backup ... por isso, concordo que forçar a cópia somente backups é importante.)

Benjamin RAIBAUD
fonte
Por que você está preocupado com o backup COMPLETO com copy_only, pois o OP está preocupado apenas em quebrar os LSNs?
Kin Shah
Bem, fazer um backup completo e depois afastar o arquivo quebraria a lógica, certo? Se um desenvolvedor fizer isso, mover o arquivo para um servidor de desenvolvimento, o próximo backup do LOG terá seu valor FirstLSN correspondente ao CheckPointLSN do backup COMPLETO ausente. Como você restaura sem o arquivo ausente?
Benjamin RAIBAUD
Um backup completo não redefine o LSN. Somente um backup de log fará isso. Eu acho que você está misturando coisas.
Kin Shah
1
Oh sim, você está certo. isso importaria se, em vez de fazer backups de log, você fizer backups diferenciais. Então, mover-se para longe é arriscado. Estou misturando as coisas, obrigado.
Benjamin RAIBAUD