Membatasi pengguna untuk hanya menyalin cadangan

13

Saya mencari untuk menyebarkan pengiriman log di lingkungan produksi saya. Ini berarti saya harus mengelola rantai cadangan yang dapat terganggu oleh orang yang mengambil cadangan untuk menyegarkan lingkungan pengembangan. Jika saya mengalami kegagalan dan ingin menggunakan cadangan log untuk memulihkan ke titik waktu saya juga akan memerlukan cadangan yang diambil oleh pengembang.

Ini tidak akan terjadi jika pengembang hanya menggunakan cadangan COPY ONLY. Jadi pertanyaan saya adalah: Apakah ada cara untuk membatasi pengguna hanya dapat melakukan backup COPY ONLY?

James Anderson
sumber

Jawaban:

12

Anda tidak perlu menggunakannya COPY_ONLY. Hanya perantara yang LOG BACKUPSakan memecahkan LSN. Apa yang dapat Anda lakukan adalah DENY BACKUP LOG to [user|group]hak istimewa secara eksplisit untuk pengembang atau grup pengembang. Atau, buat saja ROLE dan tolak log cadangan ke peran itu. Jadi semua pengguna dalam peran itu akan mewarisi izin.

misalnya

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

Sekarang ujilah:

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

Pertanyaan bagus yang tidak dapat saya temukan jawabannya, tetapi ini satu. Bagaimana jika Anda menghapus semua orang dari memiliki peran cadangan dan kemudian membuat tugas yang menggunakan eksekusi sebagai perintah untuk pengguna tertentu yang menjatuhkan file cadangan copy_only ke lokasi tertentu?

ACDBA
sumber
-1

Apa yang Anda mungkin dapat lakukan adalah 1) menolak cadangan (log dan / atau penuh) untuk pengguna tersebut tetapi masih 2) memungkinkan mereka untuk memulai pekerjaan yang melakukan cadangan hanya salinan dari database tertentu (berjalan di bawah akun yang diberikan izin cadangan). Saya memiliki solusi seperti itu untuk mengotomatiskan PROD to PRE-PROD mengembalikan database secara otomatis untuk keperluan penyelidikan; pengguna tertentu memiliki akses ke pekerjaan (dalam PRE-PROD) yang melakukan cadangan salinan saja dalam PROD, memindahkan file dari PROD ke PRE-PROD dan kemudian mengembalikan cadangan yang dipindahkan pada server PRE-PROD. Dengan demikian memastikan pengguna tersebut tidak memiliki cara untuk mematahkan logika cadangan pada PROD.

(Saat menyelidiki masalah, pengembang mungkin tergoda untuk mengambil cadangan penuh untuk mengembalikannya pada server uji dengan benar-benar memindahkan file dari sumber ke server pengujian tanpa mengetahui bahwa mereka melanggar logika cadangan ... jadi saya setuju bahwa memaksa mengambil salinan -hanya backup yang penting.)

Benjamin RAIBAUD
sumber
Mengapa Anda prihatin dengan cadangan LENGKAP dengan copy_only karena OP hanya peduli dengan melanggar LSN?
Kin Shah
Nah, mengambil cadangan LENGKAP dan kemudian memindahkan file itu akan mematahkan logika, kan? Jika pengembang melakukan itu, memindahkan file ke server dev, maka cadangan LOG berikutnya akan memiliki nilai FirstLSN yang cocok dengan CheckPointLSN dari cadangan FULL yang hilang. Lalu bagaimana cara mengembalikan tanpa file yang hilang?
Benjamin RAIBAUD
Cadangan penuh tidak mengatur ulang LSN. Hanya cadangan log yang akan melakukannya. Saya kira Anda mencampuradukkan hal-hal.
Kin Shah
1
Oh ya, kamu benar. itu akan menjadi masalah jika alih-alih pencadangan log Anda melakukan pencadangan berbeda. Maka pindah sepenuhnya jauh berisiko. Saya mencampuradukkan hal-hal, terima kasih.
Benjamin RAIBAUD