Hạn chế người dùng sao lưu CHỈ sao lưu


13

Tôi đang tìm cách triển khai vận chuyển gỗ trong môi trường sản xuất của tôi. Điều này có nghĩa là tôi sẽ phải quản lý các chuỗi sao lưu có thể bị phá vỡ bởi những người dùng sao lưu để làm mới môi trường phát triển. Nếu tôi gặp lỗi và muốn sử dụng các bản sao lưu nhật ký để khôi phục đến một thời điểm, tôi cũng sẽ cần bản sao lưu được thực hiện bởi nhà phát triển.

Điều này sẽ không xảy ra nếu các nhà phát triển chỉ sử dụng các bản sao lưu CHỈ SAO. Vì vậy, câu hỏi của tôi là: Có cách nào để hạn chế người dùng chỉ có thể thực hiện sao lưu CHỈ SAO?

Câu trả lời:


12

Bạn không cần phải sử dụng chúng COPY_ONLY. Chỉ có một trung gian LOG BACKUPSsẽ phá vỡ LSN. Những gì bạn có thể làm là DENY BACKUP LOG to [user|group]đặc quyền rõ ràng cho các nhà phát triển hoặc nhóm nhà phát triển. Ngoài ra, chỉ cần tạo ROLE và từ chối nhật ký sao lưu với vai trò đó. Vì vậy, tất cả người dùng trong vai trò đó sẽ kế thừa các quyền.

ví dụ

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

Bây giờ hãy kiểm tra nó:

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

Câu hỏi hay mà tôi không thể tìm thấy câu trả lời hay, nhưng đây là một câu hỏi. Điều gì sẽ xảy ra nếu bạn loại bỏ tất cả mọi người khỏi vai trò sao lưu và sau đó tạo một tác vụ sử dụng lệnh thực thi như một lệnh cho một người dùng cụ thể loại bỏ tệp sao lưu copy_only ra một vị trí cụ thể?


-1

Những gì bạn có thể làm là 1) từ chối sao lưu (nhật ký và / hoặc đầy đủ) cho những người dùng đó nhưng vẫn 2) cho phép họ bắt đầu một công việc thực hiện sao lưu chỉ sao chép cơ sở dữ liệu cụ thể (chạy trong tài khoản được cấp cho phép sao lưu). Tôi có một giải pháp như vậy để tự động hóa một cơ sở dữ liệu tự động khôi phục cơ sở dữ liệu cho mục đích điều tra; người dùng cụ thể có quyền truy cập vào một công việc (trong PRE-PROD) thực hiện sao lưu chỉ sao chép trong SẢN PHẨM, chuyển tệp từ SẢN PHẨM sang PRE-PROD và sau đó khôi phục bản sao lưu đã di chuyển trên máy chủ PRE-PROD. Do đó, đảm bảo rằng những người dùng như vậy không có cách nào phá vỡ logic sao lưu trên PROD.

(Khi điều tra các vấn đề, các nhà phát triển có thể được yêu cầu sao lưu toàn bộ để khôi phục nó trên máy chủ thử nghiệm bằng cách thực sự di chuyển tệp từ nguồn sang máy chủ thử nghiệm mà không biết rằng họ đang phá vỡ logic sao lưu ... sao lưu chỉ là quan trọng.)


Tại sao bạn quan tâm đến sao lưu FULL với copy_only vì OP chỉ quan tâm đến việc phá vỡ LSN?
Kin Shah

Chà, lấy một bản sao lưu FULL và sau đó di chuyển tệp đi sẽ phá vỡ logic, phải không? Nếu nhà phát triển thực hiện điều đó, di chuyển tệp đến máy chủ dev, thì bản sao lưu LOG ​​tiếp theo sẽ có giá trị FirstLSN của nó khớp với CheckPointLSN của bản sao lưu FULL bị thiếu. Làm thế nào để bạn khôi phục mà không có các tập tin bị thiếu?
Benjamin RAIBAUD

Một bản sao lưu đầy đủ không thiết lập lại LSN. Chỉ có một bản sao lưu nhật ký sẽ làm điều đó. Tôi đoán bạn đang trộn lẫn mọi thứ.
Kin Shah

1
Ồ vâng, bạn đúng. đó sẽ là vấn đề nếu thay vì sao lưu nhật ký, bạn thực hiện sao lưu khác. Sau đó di chuyển đầy đủ là rủi ro. Tôi đang trộn mọi thứ lên, cảm ơn.
Benjamin RAIBAUD
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.