Risiko Server Tertaut

10

Saya menerapkan fitur baru yang membutuhkan data dari database di beberapa server. Saya hanya perlu menyatukan data dari semua server ini dan mengurutkannya. Dua opsi yang muncul di pikiran adalah:

  1. Gunakan server tertaut dan tulis kueri sederhana untuk menyatukan dan mengurutkan data yang akan berjalan dari satu server dan mengumpulkan data dari yang lain.

  2. Gunakan aplikasi untuk mengumpulkan data dari semua server, dan mengirimkannya kembali ke SQL Server untuk mengurutkan (tidak ingin mengimplementasikan pengurutan dalam aplikasi).

Kami menjalankan server kami di cluster aktif / aktif di SQL Server 2008 r2. Semua database memiliki izin yang sama, jika Anda memiliki akses ke satu database / server, Anda memiliki izin untuk semuanya. Ini adalah aplikasi yang menghadap publik (yang membutuhkan login pengguna).

Apa risiko menggunakan server tertaut? Apakah ada kelemahan keamanan yang harus saya perhatikan? Apakah ada masalah menjalankan server terkait di cluster aktif / aktif? Apakah akan ada masalah kinerja yang signifikan dibandingkan dengan alternatifnya?

Tampaknya ada "buzz" negatif umum tentang server yang ditautkan, tetapi saya tidak dapat menemukan sesuatu yang konkret yang akan membuat saya percaya ada kekhawatiran nyata di sana.

aepheus
sumber
Referensi di masa mendatang yang terbaik adalah tidak mengirim pertanyaan beberapa kali. Anda sudah memiliki komentar di SO tentang pertanyaan Anda, Anda dapat menandai pertanyaan untuk perhatian moderator dan meminta mereka memindahkan pertanyaan ke DBA.SE. stackoverflow.com/questions/16045441/linked-server-risks

Jawaban:

13

Server yang terhubung dapat bekerja dengan baik selama Anda telah memikirkan implikasinya:

  1. Keamanan: pertimbangan utama adalah bahwa jika Anda memiliki server yang ditautkan, jika seseorang dikompromikan, mereka semua menghadapi risiko yang signifikan. Bahkan jika Anda memiliki kredensial yang berbeda untuk setiap pengguna, server yang berbeda (yang akan menghentikan penyerang mendapatkan sumber daya lain jika satu-satunya vektor serangan bocor / ditemukan / menebak kredensial) tautannya secara efektif dapat mem-bypass semua itu. Tautan ini juga akan mem-bypass perlindungan yang menyembunyikan basis data lain dari jaringan publik, seperti keadaan di mana satu atau lebih server tidak memasok data ke antarmuka publik sehingga biasanya tidak akan terlihat melalui firewall Anda dengan cara apa pun. Anda mungkin berpikir "baik, bukankah risiko yang sama merupakan masalah dengan replikasi?" yang jawabannya adalah ya, tapireplikasi adalah antara basis data aplikasi individual dan rute server yang ditautkan dapat memungkinkan kompromi basis data lainnya pada server yang sama karena tautan tersebut berada pada tingkat server bukan tingkat DB (tentu saja Anda mungkin dapat mengurangi risiko ini dengan kontrol akses pengguna yang dilakukan secara hati-hati). hak, tetapi Anda setidaknya perlu menyadarinya dalam perencanaan Anda). Sebagai catatan tambahan tentang keamanan: jika server tidak berada di situs yang sama, pastikan Anda menggunakan beberapa bentuk VPN untuk menautkannya, daripada membuat SQL Server tersedia di antarmuka publik.

  2. Bandwidth: Jika semua server berada di DC yang sama dengan konektivitas yang bagus, cepat, tidak terukur di antara mereka, Anda mungkin tidak perlu khawatir tentang yang satu ini, tetapi lebih berhati-hati dengan koneksi yang lebih jauh terutama jika pengguna Anda dapat menjalankan iklan. hoc pertanyaan dari beberapa variasi. Kompresi pada level tautan VPN akan sangat membantu di sini untuk sebagian besar set data, tetapi perlu diketahui bahwa ini akan mengorbankan latensi yang lebih besar yang dapat memperburuk masalah efisiensi (lihat di bawah).

  3. Efisiensi: Jika Anda hanya menarik potongan data, maka ini bukan masalah besar (tapi pertimbangkan untuk mengunci: lihat poin saya berikutnya), tetapi segera setelah Anda melakukan sesuatu dengan cara bergabung dan sebagainya ada batasan untuk apa perencana permintaan dapat lakukan untuk mengoptimalkan permintaan Anda. Jika perlu membuat banyak pencarian indeks yang akan membuat permintaan berjalan sangat lambat jika server tidak lokal satu sama lain karena latensi jaringan (masalah yang sama pasti ada untuk server lokal juga, tetapi pada tingkat yang lebih rendah tentu saja), dan sebagai gantinya dapat menggunakan pemindaian indeks (menukar penggunaan bandwidth untuk mendapatkan manfaat latensi) memakan bandwidth dan jika itu menahan kunci (untuk menghindari masalah baca yang kotor dan sebagainya) ini akan mempengaruhi bagian lain dari aplikasi juga.

  4. Penguncian / Konkurensi: Going-server akan meningkatkan run-time kueri, yang akan memperburuk masalah penguncian yang mungkin belum Anda ketahui dan dengan demikian sangat mengurangi konkurensi dan skalabilitas aplikasi Anda. Anda harus sangat berhati-hati jika menggunakan kueri cross server yang teratur dan / atau berjalan lama bahwa Anda mengawasi masalah penguncian dan memberikan petunjuk perencana yang sesuai.

Selama Anda memiliki ketentuan yang memadai untuk mengelola masalah keamanan dan kinerja, saya tidak akan melihat masalah dengan menggunakan server tertaut, meskipun mungkin ada cara yang lebih baik / lebih aman / lebih dapat diandalkan / lebih mudah untuk mengamankan untuk mencapai hal yang sama. hasil.

David Spillett
sumber
1

Saya telah mengalami "buzz" negatif yang sama, tetapi satu-satunya masalah yang saya hadapi dengan server tertaut adalah kemudahannya Anda dapat menarik sejumlah besar data di seluruh jaringan. Dari sudut pandang DBA, ini menakutkan jika Anda memiliki non-DBA yang bisa melakukan ini, bahkan jika mereka berjanji untuk tidak menyalahgunakannya.

Dalam kasus Anda, sepertinya tidak ada manfaatnya untuk menulis aplikasi Anda sendiri karena ini masih perlu memindahkan data. Sepertinya Anda memiliki model izin yang sangat sederhana, jadi tergantung pada lingkungannya, mungkin perlu menyiapkan beberapa izin khusus sehingga tautan tersebut tidak digunakan di tempat yang tidak perlu.

Mat
sumber
0

Server yang ditautkan membuat keadaan yang hampir "ajaib" untuk pengembang. Tetapi bisa menjadi sangat mudah untuk membanjiri jaringan dengan satu permintaan yang dapat mengembalikan ratusan ribu catatan dari 5 server dalam satu permintaan, dan Anda dapat mengunci catatan di semua 5 server juga. Saya tidak akan membiarkan siapa pun kecuali DBA yang berpengalaman menulis pertanyaan sampai Anda telah melatih 1 atau 2 pengembang teratas tentang bahaya mengunci semua basis data dengan satu permintaan.

Server yang ditautkan seperti obat, begitu Anda menggunakannya, Anda tidak akan pernah kembali dan bertanya-tanya mengapa Anda tidak pernah menggunakannya sebelumnya. Saya tidak pernah memiliki masalah tetapi saya selalu berhati-hati.

Clark Vera
sumber