Làm cách nào tôi có thể kiểm tra cài đặt bảo mật của Điểm cuối máy chủ SQL?


10

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, SQL01chứ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 SQL03má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 LOGINnhân chứng thử nghiệm:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

GRANTnó có CONNECTquyề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_permissionscho đối tượng điểm cuối phản chiếu. Không major_idvà không minor_idkhớ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ỗ.

Câu trả lời:


7

Sau khi dành một phần thời gian trong ngày để xử lý việc di chuyển cơ sở dữ liệu được nhân đôi từ máy chủ sang máy chủ trong môi trường DEV của chúng tôi để chuẩn bị chuyển sang SQL Server 2012, tôi đã xem qua tài liệu MSDN này giải thích rằng bảo mật ENDPOINT chỉ được xác định dựa trên loại tài khoản Máy chủ SQL đang chạy. Nếu SQL Server đang sử dụng tài khoản miền, thì tài khoản đó sẽ tự động có quyền truy cập vào điểm cuối. Nếu SQL Server đang sử dụng tài khoản tích hợp, chẳng hạn như [Dịch vụ mạng] hoặc [Hệ thống cục bộ], thì điểm cuối phải được cấu hình bằng chứng chỉ bảo mật và chỉ chủ sở hữu chứng chỉ mới có thể truy cập điểm cuối.

Phần liên quan từ tài liệu:

Xác định loại xác thực cho điểm cuối phản ánh cơ sở dữ liệu

Điều quan trọng là phải hiểu rằng các tài khoản dịch vụ SQL Server của các phiên bản máy chủ của bạn xác định loại xác thực bạn có thể sử dụng cho các điểm cuối phản ánh cơ sở dữ liệu của mình, như sau:

Nếu mọi phiên bản máy chủ đang chạy trong tài khoản dịch vụ miền, bạn có thể sử dụng Xác thực Windows cho điểm cuối phản ánh cơ sở dữ liệu của mình. Nếu tất cả các phiên bản máy chủ chạy dưới cùng một tài khoản người dùng miền, thông tin đăng nhập chính xác của người dùng sẽ tự động tồn tại trong cả hai cơ sở dữ liệu chính. Điều này đơn giản hóa cấu hình bảo mật cho cơ sở dữ liệu sẵn có và được khuyến nghị.

Nếu bất kỳ phiên bản máy chủ nào đang lưu trữ các bản sao khả dụng cho một nhóm khả dụng chạy dưới dạng các tài khoản khác nhau, thì đăng nhập mỗi tài khoản phải được tạo chính trong phiên bản máy chủ khác. Sau đó, thông tin đăng nhập đó phải được cấp quyền CONNECT để kết nối với điểm cuối phản ánh cơ sở dữ liệu của phiên bản máy chủ đó.

Nếu phiên bản máy chủ của bạn sử dụng Xác thực Windows, bạn có thể tạo điểm cuối phản ánh cơ sở dữ liệu bằng cách sử dụng Transact-SQL, PowerShell hoặc Trình hướng dẫn nhóm khả dụng mới.

Ghi chú:

Nếu một phiên bản máy chủ lưu trữ bản sao khả dụng thiếu điểm cuối phản ánh cơ sở dữ liệu, Trình hướng dẫn nhóm khả dụng mới có thể tự động tạo điểm cuối phản ánh cơ sở dữ liệu sử dụng Xác thực Windows.

Nếu bất kỳ phiên bản máy chủ nào đang chạy trong tài khoản tích hợp, chẳng hạn như Hệ thống cục bộ, Dịch vụ cục bộ hoặc Dịch vụ mạng hoặc tài khoản không tên miền, bạn phải sử dụng chứng chỉ để xác thực điểm cuối. Nếu bạn đang sử dụng chứng chỉ cho điểm cuối phản ánh cơ sở dữ liệu của mình, quản trị viên hệ thống của bạn phải định cấu hình từng phiên bản máy chủ để sử dụng chứng chỉ trên cả kết nối ra và vào.

Không có phương pháp tự động để cấu hình bảo mật phản ánh cơ sở dữ liệu bằng chứng chỉ. Bạn sẽ cần sử dụng câu lệnh CREATE ENDPOINT Transact-SQL hoặc lệnh ghép ngắn New-SqlHadrEndpoint PowerShell. Để biết thêm thông tin, hãy xem TẠO ENDPOINT (Transact-SQL).

Remus Rusanu (trong câu trả lời của mình) đã xác định chính xác cách xác định bảo mật tại chỗ trên điểm cuối phản chiếu; như trong:

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
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.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

Tuy nhiên, trong trường hợp của tôi trên SQL Server 2005, các điểm cuối phản chiếu ban đầu không hiển thị trong kết quả của truy vấn này - Tôi cho rằng điều này là do bảo mật mặc định cho phép truy cập CONNECT vào tài khoản SQL Server đang chạy (như đã giải thích ở trên).

Vì vậy, câu trả lời chính thức cho câu hỏi, làm thế nào để bạn biết ai có quyền truy cập CONNECT vào ENDPOINT, là tổng của truy vấn ở trên và tài khoản SQL Server đang sử dụng, cùng với mọi chứng chỉ có thể bạn đã định cấu hình có quyền truy cập vào điểm cuối .


4

Tôi tình cờ đã thiết lập cơ sở dữ liệu này trong sản xuất và đang tự hỏi điều tương tự vì tôi cần so sánh cấu hình với phiên phản chiếu khác để đảm bảo tôi khớp chính xác.

sys.dm_db_mirroring_connectionssẽ cung cấp cho bạn với bạn muốn. Nó chứa cái principal_nameđó là:

Tên đăng nhập đã được xác thực cho quyền kết nối. Đối với Xác thực Windows, giá trị này là tên người dùng từ xa. Để xác thực chứng chỉ, giá trị này là chủ sở hữu chứng chỉ.

Nếu bạn đang làm việc với một phiên bị tạm dừng mặc dù tôi không chắc điều này vẫn sẽ trả về thông tin, hãy tin rằng nó chỉ có kết nối hoạt động.


Cảm ơn, Shaun. Điều đó chắc chắn cho thấy tên người dùng từ xa thực sự được kết nối với điểm cuối, tuy nhiên nó không thực sự trả lời cho câu hỏi cài đặt bảo mật nào cho phép người dùng đó kết nối trong sản xuất, nhưng không phải trong thử nghiệm. Tôi đánh giá cao sự giúp đỡ nào!
Max Vernon

3

Xem tài liệu Sách trực tuyến để biết sys.database_mirroring_endpoints

Đối với quyền đối tượng máy chủ, bạn nhìn vào vị trí thông thường , sys.server_permissions. Như mọi trường hợp khi bảo mật Windows có liên quan, mọi thứ phức tạp hơn do tư cách thành viên của các nhóm windows và bạn cũng phải xem xét phân cấp quyền .


Tôi đã xem xét điều đó tuy nhiên cái tôi cần là một danh sách các Đăng nhập có quyền truy cập CONNECT vào điểm cuối. sys.database_mirroring_endpoint không xuất hiện để cho thấy điều đó - trừ khi tôi thiếu thứ gì đó!
Max Vernon

1
Đối với quyền đối tượng máy chủ, bạn nhìn vào vị trí thông thường , sys.server_permissions. Như mọi trường hợp khi bảo mật Windows có liên quan, mọi thứ phức tạp hơn do tư cách thành viên của các nhóm windows và bạn cũng phải xem xét phân cấp quyền .
Remus Rusanu

3
Bất kỳ cơ hội nào bạn có thể giải thích một chút về câu trả lời đó?
jcolebrand
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.