Rủi ro máy chủ liên kết


10

Tôi đang triển khai một tính năng mới yêu cầu dữ liệu từ cơ sở dữ liệu trên nhiều máy chủ. Tôi chỉ cần liên kết dữ liệu từ tất cả các máy chủ và sắp xếp nó. Hai tùy chọn xuất hiện trong tâm trí là:

  1. Sử dụng các máy chủ được liên kết và viết một truy vấn đơn giản để hợp nhất và sắp xếp dữ liệu sẽ chạy từ một máy chủ và thu thập dữ liệu từ các máy chủ khác.

  2. Sử dụng ứng dụng để thu thập dữ liệu từ tất cả các máy chủ và gửi lại cho SQL Server để sắp xếp (không muốn triển khai sắp xếp trong ứng dụng).

Chúng tôi chạy các máy chủ của chúng tôi trong các cụm hoạt động / hoạt động trong SQL Server 2008 r2. Tất cả các cơ sở dữ liệu đều có cùng quyền, nếu bạn có quyền truy cập vào một cơ sở dữ liệu / máy chủ, bạn có quyền đối với tất cả các cơ sở dữ liệu. Đây là một ứng dụng công khai (yêu cầu đăng nhập người dùng).

Những rủi ro của việc sử dụng các máy chủ được liên kết là gì? Có bất kỳ lỗi bảo mật nào tôi nên quan tâm? Có bất kỳ vấn đề nào khi chạy các máy chủ được liên kết trong các cụm hoạt động / hoạt động không? Sẽ có bất kỳ vấn đề hiệu suất đáng kể so với thay thế?

Dường như có một "tiếng vang" tiêu cực chung về các máy chủ được liên kết, nhưng tôi không thể tìm thấy bất cứ điều gì cụ thể sẽ khiến tôi tin rằng có bất kỳ mối quan tâm thực sự nào ở đó.


Tham khảo trong tương lai tốt nhất là không đăng câu hỏi nhiều lần. Bạn đã có ý kiến ​​về SO liên quan đến câu hỏi của bạn, bạn chỉ cần gắn cờ câu hỏi cho người điều hành chú ý và yêu cầu họ chuyển câu hỏi sang DBA.SE. stackoverflow.com/questions/16045441/linked-server-risks

Câu trả lời:


13

Các máy chủ được liên kết có thể hoạt động rất tốt miễn là bạn đã nghĩ ra hàm ý:

  1. Bảo mật: một cân nhắc quan trọng là nếu bạn có các máy chủ được liên kết, nếu một máy chủ bị xâm phạm, tất cả đều có nguy cơ đáng kể. Ngay cả khi bạn có thông tin đăng nhập khác nhau cho mỗi người dùng máy chủ khác nhau (điều này sẽ ngăn kẻ tấn công lấy tài nguyên khác nếu vectơ tấn công duy nhất bị rò rỉ / phát hiện / đoán thông tin), liên kết có thể vượt qua tất cả điều đó một cách hiệu quả. Liên kết cũng sẽ bỏ qua các biện pháp bảo vệ đang ẩn các cơ sở dữ liệu khác khỏi mạng công cộng, chẳng hạn như trường hợp một hoặc nhiều máy chủ không cung cấp dữ liệu cho giao diện công cộng nên thường không thể nhìn thấy qua tường lửa của bạn. Bạn có thể nghĩ rằng "tốt, đó không phải là một vấn đề với việc nhân rộng?" câu trả lời là có, nhưngsao chép là giữa các cơ sở dữ liệu ứng dụng riêng lẻ và tuyến máy chủ được liên kết có thể thỏa hiệp các cơ sở dữ liệu khác trên cùng một máy chủ vì liên kết ở cấp máy chủ không phải cấp DB (tất nhiên bạn có thể giảm thiểu rủi ro này bằng cách kiểm soát cẩn thận quyền truy cập của người dùng quyền, nhưng ít nhất bạn cần phải nhận thức được nó trong kế hoạch của bạn). Lưu ý phụ về bảo mật: nếu các máy chủ không nằm trên cùng một trang, hãy đảm bảo rằng bạn sử dụng một số dạng VPN để liên kết chúng, thay vì cung cấp SQL Server trên giao diện công cộng.

  2. Băng thông: Nếu tất cả các máy chủ ở cùng một DC có kết nối tốt, nhanh, không có đối xứng giữa chúng thì bạn có thể không cần phải lo lắng về điều này, nhưng hãy cẩn thận hơn với các kết nối xa hơn, đặc biệt là nếu người dùng của bạn có thể chạy quảng cáo- truy vấn hoc của một số loại. Nén ở cấp độ liên kết VPN sẽ giúp ích rất nhiều cho hầu hết các tập dữ liệu, nhưng lưu ý rằng điều này sẽ phải trả giá bằng độ trễ lớn hơn có thể làm trầm trọng thêm vấn đề hiệu quả (xem bên dưới).

  3. Hiệu quả: Nếu bạn chỉ đơn giản là kéo các khối dữ liệu xuống thì đây không phải là vấn đề lớn (nhưng hãy xem xét việc khóa: xem điểm tiếp theo của tôi), nhưng ngay khi bạn làm bất cứ điều gì bằng cách tham gia và do đó, có giới hạn đối với những gì trình hoạch định truy vấn có thể làm để tối ưu hóa các yêu cầu của bạn. Nếu nó cần thực hiện nhiều tìm kiếm chỉ mục sẽ tạo ra các truy vấn chạy rất chậm nếu các máy chủ không cục bộ với nhau do độ trễ mạng (vấn đề tương tự chắc chắn cũng xảy ra với các máy chủ cục bộ, nhưng ở mức độ thấp hơn), và thay vào đó, nó có thể sử dụng quét chỉ mục (sử dụng giao dịch sử dụng băng thông để đạt được lợi ích về độ trễ) khi ăn băng thông và nếu nó bị khóa (để tránh các vấn đề đọc bẩn và v.v.) điều này cũng sẽ ảnh hưởng đến các phần khác của ứng dụng.

  4. Khóa / Đồng thời: Việc tắt máy chủ sẽ tăng thời gian truy vấn, điều này sẽ làm trầm trọng thêm các vấn đề về khóa mà bạn có thể chưa biết về mình và do đó làm giảm nghiêm trọng khả năng đồng thời và khả năng mở rộng của ứng dụng. Bạn cần phải rất cẩn thận nếu sử dụng các truy vấn máy chủ chéo thường xuyên và / hoặc chạy dài mà bạn để mắt đến vấn đề khóa và đưa ra gợi ý về kế hoạch khi thích hợp.

Miễn là bạn có đủ điều khoản để quản lý các vấn đề về bảo mật và hiệu suất, tôi sẽ không gặp vấn đề gì khi sử dụng các máy chủ được liên kết, mặc dù có thể có những cách tốt hơn / an toàn hơn / đáng tin cậy hơn / dễ bảo mật hơn để đạt được điều tương tự kết quả.


1

Tôi đã trải qua cùng một "tiếng vo vo" tiêu cực, nhưng vấn đề duy nhất tôi gặp phải với các máy chủ được liên kết là sự dễ dàng mà bạn có thể kéo một lượng lớn dữ liệu trên mạng. Từ quan điểm của DBA, điều này thật đáng sợ nếu bạn có những người không phải là DBA có thể làm điều này, ngay cả khi họ hứa sẽ không lạm dụng nó.

Trong trường hợp của bạn, dường như không có bất kỳ lợi ích nào khi viết ứng dụng của riêng bạn vì điều này vẫn sẽ cần phải di chuyển dữ liệu. Có vẻ như bạn có một mô hình quyền rất đơn giản, do đó tùy thuộc vào môi trường, có thể đáng để thiết lập một số quyền đặc biệt để liên kết không được sử dụng ở nơi không cần thiết.


0

Các máy chủ được liên kết tạo ra một trạng thái gần như "kỳ diệu" cho các nhà phát triển. Nhưng nó có thể trở nên rất dễ dàng để áp đảo mạng với một truy vấn có thể trả về hàng trăm nghìn bản ghi từ 5 máy chủ trong một yêu cầu và bạn cũng có thể khóa các bản ghi trên cả 5 máy chủ. Tôi sẽ không cho phép bất cứ ai trừ các DBA dày dạn viết các truy vấn cho đến khi bạn đã đào tạo được 1 hoặc 2 nhà phát triển hàng đầu về sự nguy hiểm của việc khóa tất cả các cơ sở dữ liệu bằng một truy vấn.

Các máy chủ được liên kết giống như một loại thuốc, một khi bạn sử dụng chúng, bạn sẽ không bao giờ quay lại và tự hỏi tại sao bạn không bao giờ sử dụng chúng trước đó. Tôi chưa bao giờ có vấn đề nhưng tôi luôn cẩn thận.

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.