Kullanıcıları YALNIZCA KOPYALAMA yedeklemeleriyle kısıtlama


13

Günlük sevkiyatı üretim ortamımda dağıtmak istiyorum. Bu, geliştirme ortamlarını yenilemek için yedek alan insanlar tarafından bozulabilecek yedek zincirleri yönetmem gerektiği anlamına gelecektir. Eğer bir hata varsa ve zaman içinde bir noktaya geri yüklemek için günlük yedekleri kullanmak istiyorsanız, ben de geliştirici tarafından alınan yedek gerekir.

Geliştiriciler yalnızca YALNIZCA KOPYALA yedeklemeler kullansaydı bu gerçekleşmez. Yani sorum şu: Kullanıcıları yalnızca YALNIZCA KOPYALA yedekleme gerçekleştirebilecek şekilde kısıtlamanın bir yolu var mı?

Yanıtlar:


12

Onları kullanmanıza gerek yok COPY_ONLY. Sadece bir ara LOG BACKUPSkıracak LSN. Yapabileceğiniz şey, DENY BACKUP LOG to [user|group]geliştiricilere veya geliştirici grubuna açıkça ayrıcalıktır. Alternatif olarak, sadece bir ROL oluşturun ve bu role yedek günlüğünü reddedin. Böylece bu roldeki tüm kullanıcılar izinleri devralır.

Örneğin

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

Şimdi test edin:

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

İyi bir cevap bulamadığım iyi bir soru, ama işte bir tane. Herkesin yedekleme rolüne sahip olmasını kaldırdıktan sonra copy_only yedek dosyasını belirli bir konuma bırakan belirli bir kullanıcı için yürütme komutunu kullanan bir görev oluşturduysanız ne olur?


-1

Yapabileceğiniz şey, 1) bu tür kullanıcılara yedeklemeyi (günlük ve / veya tam) reddetmek, ancak yine de 2) belirli bir veritabanının yalnızca kopyasını yedekleyen bir işi başlatmalarına izin verir (verilen bir hesap altında çalışır) yedekleme izni). Araştırma amacıyla veritabanlarının PRE-PROD otomatik geri yüklemelerine bir PROD'yi otomatikleştirmek için böyle bir çözümüm var; belirli kullanıcılar PROD'de salt kopya yedekleme yapan, dosyayı PROD'dan PRE-PROD'a taşıyan ve taşınan yedeklemeyi PRE-PROD sunucusuna geri yükleyen bir işe (PRE-PROD'da) erişebilir. Bu nedenle, bu kullanıcıların PROD'deki yedekleme mantığını kırmanın hiçbir yolu olmadığından emin olun.

(Sorunları incelerken, geliştiriciler, yedekleme mantığını bozduklarını bilmeden dosyayı kaynaktan kaynaktan test sunucusuna taşıyarak bir test sunucusunda geri yüklemek için tam bir yedek almaya cazip gelebilir ... bu yüzden kopya çekmeye zorlamayı kabul ediyorum -Yalnızca yedeklemeler önemlidir.)


OP sadece LSN'leri kırmakla ilgili olduğundan neden copy_only ile FULL yedekleme ile ilgileniyorsunuz?
Kin Shah

Peki, bir TAM yedek almak ve sonra dosyayı uzaklaştırmak mantığı bozar, değil mi? Bir geliştirici bunu yaparsa, dosyayı bir dev sunucusuna taşırsa, bir sonraki LOG yedeklemesinin FirstLSN değeri eksik FULL yedeklemesinin CheckPointLSN'si ile eşleşir. Daha sonra eksik dosya olmadan nasıl geri yükleyebilirsiniz?
Benjamin RAIBAUD

Tam yedekleme LSN'yi sıfırlamaz. Bunu yalnızca bir günlük yedeklemesi yapar. Sanırım bir şeyler karıştırıyorsunuz.
Kin Shah

1
Ah evet, haklısın. günlük yedeklemeleri yerine farklı yedeklemeler yapmanız önemli olacaktır. Sonra bir tam uzaklaşmak risklidir. Bir şeyleri karıştırıyorum, teşekkürler.
Benjamin RAIBAUD
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.