Tôi đang trong quá trình tạo môi trường TEST cho nhân viên phát triển SQL Server của chúng tôi.
Trong sản xuất, chúng tôi có 3 Máy chủ SQL, SQL01
chứa một số cơ sở dữ liệu được nhân đôi SQL02
. SQL03
đóng vai trò là nhân chứng trong "an toàn cao với chuyển đổi dự phòng tự động" hoặc cấu hình đồng bộ.
Tôi đã sử dụng VMWare P2V để ảo hóa cả ba máy trên phần cứng riêng biệt, cấu hình lại SID của các máy và bôi đen địa chỉ IP của các máy chủ sản xuất của chúng tôi từ các máy mới này.
Ban đầu tôi đã quên lỗ đen máy làm chứng sản xuất, vì vậy cơ sở dữ liệu trên các máy TEST vẫn đang sử dụng SQL03
máy làm nhân chứng. Nhận thấy vấn đề này, tôi quyết định cấu hình lại cơ sở dữ liệu trên TEST để chỉ ra nhân chứng TEST mới được ảo hóa, gọi nó TEST03
.
Để cấu hình lại cơ sở dữ liệu để sử dụng nhân chứng mới, tôi đã nhập lệnh sau trên máy chủ Chính TEST01
:
ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';
Câu trả lời thật bất ngờ:
The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'. The database mirroring configuration was
not changed. Verify that the server is connected, and try again.
Tôi đã rất bối rối trước thông báo lỗi này vì cấu hình không hoạt động trên các máy sản xuất và chưa được sửa đổi theo bất kỳ cách nào trên các máy kiểm tra.
Để làm việc này, tôi cần tạo một LOGIN
nhân chứng thử nghiệm:
CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];
và GRANT
nó có CONNECT
quyền trên điểm cuối trong câu hỏi:
GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];
Sau đó tôi đã có thể trỏ thành công các cơ sở dữ liệu được nhân đôi trên môi trường TEST cho nhân chứng thử nghiệm mới.
Làm cách nào tôi có thể kiểm tra điểm cuối của nhân chứng sản xuất để xem bảo mật nào được liên kết với nó?
Tôi cho rằng phải có một số danh mục hệ thống mà tôi có thể kiểm tra, tuy nhiên Sách trực tuyến dường như không có gì cụ thể cho Điểm cuối, và Bing thì tốt, Bingless ...
Thông tin bổ sung:
SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name
FROM sys.server_permissions p
INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';
trả về:
endpoint_id class_desc permission_name endpoint_name principal_name
2 ENDPOINT CONNECT TSQL Local Machine public
3 ENDPOINT CONNECT TSQL Named Pipes public
4 ENDPOINT CONNECT TSQL Default TCP public
5 ENDPOINT CONNECT TSQL Default VIA public
Và:
SELECT name, endpoint_id, protocol_desc, type_desc, role_desc
FROM sys.database_mirroring_endpoints;
Trả về:
name endpoint_id protocol_desc type_desc role_desc
Mirroring 65536 TCP DATABASE_MIRRORING WITNESS
Dường như không có mục nào sys.server_permissions
cho đối tượng điểm cuối phản chiếu. Không major_id
và không minor_id
khớp với 65536. Ngoài ra, không có cơ sở dữ liệu hệ thống nào chứa bất kỳ tham chiếu nào đến điểm cuối.
Tôi thua lỗ.