Пов'язані ризики сервера


10

Я реалізую нову функцію, яка вимагає даних з баз даних на декількох серверах. Мені просто потрібно об'єднати дані з усіх цих серверів і сортувати їх. Два варіанти, які спадають на думку:

  1. Використовуйте пов’язані сервери та запишіть простий запит для об'єднання та сортування даних, які будуть працювати з одного сервера та збирати дані з інших.

  2. Використовуйте додаток для збору даних з усіх серверів і відправте їх назад на SQL Server для сортування (не хочу впроваджувати сортування у програмі).

Ми запускаємо наші сервери в активних / активних кластерах у SQL Server 2008 r2. Усі бази даних мають однакові дозволи, якщо у вас є доступ до однієї бази даних / сервера, ви маєте дозвіл на них усіх. Це загальнодоступна програма (яка вимагає входу користувача).

Які ризики використання пов'язаних серверів? Чи є якісь недоліки в безпеці, з якими я повинен бути стурбований? Чи є проблеми із запуском пов'язаних серверів в активних / активних кластерах? Чи будуть якісь значні проблеми щодо ефективності порівняно з альтернативою?

Здається, є загальний негативний "шум" щодо пов'язаних серверів, але я не можу знайти нічого конкретного, що могло б змусити мене повірити, що там є якісь реальні проблеми.


Подальше посилання найкраще не ставити запитання кілька разів. Ви вже маєте коментарі, що стосуються Вашого запитання, ви можете просто позначити це питання для уваги модератора і попросити вони перенести це питання на DBA.SE. stackoverflow.com/questions/16045441/linked-server-risks

Відповіді:


13

Пов'язані сервери можуть працювати дуже добре, якщо ви продумали наслідки:

  1. Безпека. Ключовим питанням є те, що якщо у вас підключені сервери, якщо хтось отримує компрометацію, вони піддаються значному ризику. Навіть якщо у вас є різні облікові дані для кожного користувача різних серверів (що зупинило би зловмисника потрапляння на інші ресурси, якщо єдиний вектор атаки просочився / виявив / здогадався), посилання може ефективно обійти все це. Посилання також обійде захист, який приховує інші бази даних від загальнодоступної мережі, наприклад, обставина, коли один або декілька серверів не надають дані в загальнодоступний інтерфейс, тому зазвичай не було б видно через брандмауері будь-якими способами. Ви можете подумати, "ну хіба це не такий ризик, що проблема з тиражуванням?" на що відповідь - так, алереплікація знаходиться між окремими базами додатків і пов'язаним маршрутом сервера, можливо, можливе компрометування інших баз даних на тому ж сервері (серверах), оскільки посилання знаходиться на рівні сервера, а не на рівні БД (звичайно, ви зможете зменшити цей ризик, ретельно контролюючи доступ користувачів прав, але вам потрібно принаймні знати про це у своєму плануванні). Як додаткова примітка щодо безпеки: якщо сервери не на одному веб-сайті, переконайтеся, що ви використовуєте певну форму VPN для їх з'єднання, а не роблячи доступним SQL Server на публічному інтерфейсі.

  2. Пропускна здатність: Якщо всі сервери знаходяться в одному і тому самому постійному тоці з хорошим, швидким, немерегованим зв’язком між собою, то вам може не потрібно турбуватися про це, але будьте обережніші з віддаленими підключеннями, особливо якщо ваші користувачі зможуть запускати рекламу- конкретні запити певної різноманітності. Стиснення на рівні зв’язку VPN допоможе тут значною мірою для більшості наборів даних, але пам’ятайте, що це відбуватиметься за рахунок більшої затримки, яка може посилити питання ефективності (див. Нижче).

  3. Ефективність: Якщо ви просто перетягуєте шматки даних вниз, це не є масовим питанням (але врахуйте, що блокування: дивіться мою наступну точку), але як тільки ви щось зробите шляхом приєднання і так далі, є обмеження на те, що планувальник запитів може зробити для оптимізації ваших запитів. Якщо потрібно здійснити багато пошукових запитів індексів, які створюватимуть дуже повільні запити, якщо сервери не локальні один одному через затримку в мережі (така ж проблема, безумовно, є і для локальних серверів, але меншою мірою, звичайно), і замість цього він може використовувати індексне сканування (торгуючи поза пропускною здатністю, щоб отримати переваги затримки), їсти пропускну здатність, і якщо він тримає блокування (щоб уникнути брудних проблем з читанням тощо), це вплине і на інші частини програми.

  4. Блокування / одночасність: Відключення сервера збільшить час запуску запитів, що посилить проблеми з блокуванням, які ви, можливо, ще не знаєте, і тим самим значно зменшить паралельність та масштабованість програми. Ви повинні бути дуже обережними, якщо використовуєте регулярні та / або тривалі запити міжхресного сервера, щоб ви стежили за проблемою блокування та давали підказки планувальнику, як це доречно.

Поки у вас є достатні положення для управління питаннями безпеки та продуктивності, я б не бачив проблем із використанням пов'язаних серверів, хоча для досягнення того ж можуть бути кращі / безпечніші / надійніші / простіші у безпеці способи. результат.


1

Я відчував такий самий негативний "шум", але єдина проблема, з якою я стикався з пов'язаними серверами, - це легкість, з якою ви можете перетягувати велику кількість даних по мережі. З точки зору DBA, це страшно, якщо у вас є учасники, які не є членами DBA, які можуть це зробити, навіть якщо вони обіцяють не зловживати цим.

У вашому випадку, здається, немає ніякої користі для написання власної заявки, оскільки для цього потрібно буде перемістити дані. Здається, у вас дуже проста модель дозволів, тому, залежно від середовища, можливо, варто встановити деякі спеціальні дозволи, щоб посилання не використовувалося там, де воно не повинно бути.


0

Пов'язані сервери створюють для розробників майже «чарівний» стан. Але перетворити мережу можна за допомогою одного запиту, який може повернути сотні тисяч записів із 5 серверів за один запит, а також можна заблокувати записи на всіх 5 серверах. Я б не дозволяв нікому, окрім досвідчених DBA, писати запити, поки ви не навчите 1 або 2 топ-розробників щодо небезпеки блокування всіх баз даних одним запитом.

Пов'язані сервери - це як наркотик, після їх використання ви ніколи не повернетесь і не задумаєтесь, чому ви ніколи не використовували їх раніше. У мене ніколи не було проблем, але я завжди був обережним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.