Mendengarkan wawancara Scott Hanselman dengan tim Stack Overflow ( bagian 1 dan 2 ), ia bersikeras bahwa server SQL dan server aplikasi harus berada di mesin yang terpisah. Apakah ini hanya untuk memastikan bahwa jika satu server dikompromikan, kedua sistem tidak dapat diakses? Apakah masalah keamanan lebih penting daripada kompleksitas dua server (biaya tambahan, koneksi jaringan khusus antara keduanya, lebih banyak pemeliharaan, dll.), Terutama untuk aplikasi kecil, di mana tidak ada yang menggunakan terlalu banyak CPU atau memori? Bahkan dengan dua server, dengan satu server dikompromikan, penyerang masih bisa melakukan kerusakan serius, baik dengan menghapus database, atau mengacaukan kode aplikasi.
Mengapa ini menjadi masalah besar jika kinerja tidak menjadi masalah?
Ini tidak benar-benar peduli (Anda dapat cukup bahagia menjalankan situs Anda dengan web / database pada mesin yang sama), itu hanya langkah termudah di skala ..
Persis seperti yang dilakukan oleh StackOverflow - dimulai dengan mesin tunggal yang menjalankan IIS / SQL Server, kemudian ketika mulai mendapatkan banyak muatan, server kedua dibeli dan server SQL dipindahkan ke sana.
Jika kinerja tidak menjadi masalah, jangan buang uang untuk membeli / memelihara dua server.
sumber
Di sisi lain, merujuk pada blogging yang berbeda Scott (Watermasyck, dari Telligent) - mereka menemukan bahwa sebagian besar pengguna dapat mempercepat situs web (menggunakan Server Komunitas Telligent), dengan meletakkan basis data pada mesin yang sama dengan situs web. Namun, dalam kasus pelanggan mereka, biasanya db & server web adalah satu-satunya aplikasi pada mesin itu, dan situs web tidak terlalu melelahkan mesin. Kemudian, efisiensi tidak harus mengirim data di jaringan lebih banyak yang dibuat untuk meningkatkan ketegangan.
sumber
Saya akan berpikir faktor besar adalah kinerja. Server web / kode aplikasi dan SQL Server akan melakukan cache data yang biasanya diminta dalam memori dan Anda membunuh kinerja cache Anda dengan menjalankannya di ruang memori yang sama.
sumber
Tom benar dalam hal ini. Beberapa alasan lain adalah karena tidak efektif biaya dan ada risiko keamanan tambahan.
Webservers memiliki persyaratan perangkat keras yang berbeda dari server database. Server database berjalan lebih baik dengan banyak memori dan array disk yang sangat cepat sementara server web hanya membutuhkan cukup memori untuk menyimpan file cache dan permintaan DB yang sering (tergantung pada pengaturan Anda). Mengenai efektivitas biaya, kedua server tidak harus lebih murah, namun rasio kinerja / biaya harus lebih tinggi karena Anda tidak perlu aplikasi yang berbeda bersaing untuk sumber daya. Untuk alasan ini, Anda mungkin harus menghabiskan lebih banyak untuk satu server yang melayani keduanya dan menawarkan kinerja setara dengan 2 yang khusus.
Kekhawatiran keamanan adalah bahwa jika mesin tunggal dikompromikan, baik server web dan basis data rentan. Dengan dua server, Anda memiliki ruang bernapas karena server ke-2 akan tetap aman (setidaknya untuk sementara waktu).
Juga, ada beberapa manfaat skalabilitas karena Anda mungkin hanya perlu memelihara beberapa server basis data yang digunakan oleh banyak aplikasi web yang berbeda. Dengan cara ini Anda memiliki lebih sedikit pekerjaan untuk melakukan peningkatan atau perbaikan dan melakukan penyesuaian kinerja. Saya percaya bahwa ada alat manajemen server untuk membuat tugas-tugas ini lebih mudah (dalam kasus mesin tunggal).
sumber
Keamanan adalah masalah utama. Idealnya server basis data Anda harus duduk di belakang firewall dengan hanya port yang diperlukan untuk melakukan akses data yang dibuka. Aplikasi web Anda harus terhubung ke server database dengan akun SQL yang hanya memiliki cukup hak untuk aplikasi berfungsi dan tidak lebih. Misalnya Anda harus menghapus hak yang mengizinkan dijatuhkannya objek dan tentunya Anda tidak boleh terhubung menggunakan akun seperti 'sa'.
Jika Anda kehilangan server web karena dibajak (yaitu eskalasi hak istimewa yang ditiup penuh ke hak administrator), skenario terburuk adalah bahwa database aplikasi Anda mungkin dikompromikan tetapi tidak seluruh server database (seperti halnya jika server database dan server web adalah mesin yang sama). Jika Anda telah mengenkripsi string koneksi database Anda dan peretas tidak cukup cerdas untuk mendekripsi mereka, maka yang hilang adalah server web.
sumber
Salah satu faktor yang belum disebutkan adalah load balancing. Jika Anda mulai memikirkan server web dan database sebagai mesin yang terpisah, Anda mengoptimalkan untuk round trip jaringan yang lebih sedikit dan juga semakin mudah untuk menambahkan server web kedua atau mesin database kedua seiring meningkatnya kebutuhan.
sumber
Saya dapat berbicara dari pengalaman langsung bahwa sering kali ide yang baik untuk menempatkan server web dan database pada mesin yang berbeda. Jika Anda memiliki aplikasi yang membutuhkan banyak sumber daya, ia dapat dengan mudah menyebabkan siklus CPU pada mesin memuncak, yang pada dasarnya membuat mesin berhenti. Namun, jika aplikasi Anda memiliki keterbatasan penggunaan database, mungkin bukan masalah besar jika mereka berbagi server.
sumber
Wow, Tidak ada yang mengemukakan fakta bahwa jika Anda benar-benar membeli SQL server seharga $ 5k, Anda mungkin ingin menggunakannya lebih dari aplikasi web Anda. Jika Anda menggunakan express, mungkin Anda tidak peduli. Saya melihat server SQL menjalankan Database selama 20 hingga 30 aplikasi, jadi menaruhnya di server web tidak akan menjadi pintar.
Kedua, tergantung pada siapa server itu digunakan. Saya bekerja untuk perusahaan keuangan dan pemerintah. Jadi kita menggunakan rasa sakit yang gila dalam pendekatan pantat menggunakan hanya sprocs dan membatasi port dari server ke SQL. Jadi jika aplikasi web diretas. Satu-satunya hal yang dapat dilakukan peretas adalah memanggil sprocs karena akun pengguna pada server web dikunci untuk hanya melihat / memanggil sprocs pada DB. Jadi sekarang peretas harus mencari cara untuk masuk ke DB. Jika itu di server web juga jenisnya mudah dijangkau.
sumber
Saya setuju dengan Daniel Earwicker - pertanyaan keamanannya cukup banyak cacatnya.
Jika Anda memiliki satu pengaturan kotak dengan server web dan hanya database untuk server web itu, jika server web itu dikompromikan Anda kehilangan server web dan hanya database untuk aplikasi spesifik itu.
Ini persis sama dengan apa yang terjadi jika Anda kehilangan server web pada pengaturan 2-server. Anda kehilangan server web, dan hanya database untuk aplikasi spesifik itu.
Argumen bahwa 'sisa integritas server DB dipertahankan' di mana Anda memiliki pengaturan 2-server tidak relevan, karena dalam skenario pertama, setiap server database lain yang terkait dengan setiap aplikasi lain (jika ada) tetap tidak terpengaruh juga - menjadi, sebagaimana adanya, diselenggarakan di tempat lain.
Demikian pula, untuk pertanyaan yang diajukan oleh Kev 'bagaimana dengan semua database lain yang berada di server DB? Yang hilang hanyalah satu basis data. '
Sebaliknya, dalam pengaturan 2 server, di mana penyerang memiliki akses ke Web Server, dan dengan proxy, hak terbatas (dalam skenario kasus terbaik) ke server database, mereka dapat menempatkan database setiap aplikasi lain dalam bahaya dengan membawa lambat, permintaan intensif memori atau memaksimalkan ruang penyimpanan yang tersedia di server database. Dengan memisahkan aplikasi menjadi keprihatinan mereka sendiri, seperti virtualisasi, Anda juga mengisolasi mereka untuk tujuan keamanan dengan cara yang positif.
sumber
Itu tergantung pada aplikasi dan tujuannya. Ketika ketersediaan tinggi dan kinerja tidak kritis, tidak buruk untuk tidak memisahkan DB dan server web. Terutama mengingat keuntungan kinerja - jika aplikasi membuat sejumlah besar permintaan basis data, sejumlah besar beban jaringan dapat dihilangkan dengan menyimpan semuanya pada sistem yang sama, menjaga waktu respons tetap rendah.
sumber
Saya pikir ini karena dua mesin biasanya perlu dioptimalkan dengan cara yang berbeda. Selain itu saya tidak tahu, kami menjalankan semua aplikasi kami dengan server-database pada mesin yang sama - asalkan kami tidak menghadapi publik - tapi kami tidak punya masalah.
Saya tidak bisa membayangkan bahwa terlalu banyak orang peduli tentang satu mesin yang dikompromikan karena keduanya aplikasi web biasanya akan memiliki akses yang hampir tidak terbatas untuk setidaknya data jika bukan skema di dalam database.
Tertarik dengan apa yang orang lain katakan.
sumber
Saya mendengarkan podcast itu, dan itu lucu, tetapi argumen keamanan tidak masuk akal bagi saya. Jika Anda telah mengompromikan server A, dan server itu dapat mengakses data di server B, maka Anda langsung memiliki akses ke data di server B.
sumber
Lisensi database tidak ciak dan sering dibebankan per CPU, oleh karena itu dengan memisahkan server web Anda, Anda dapat mengurangi biaya lisensi database Anda.
Misalnya, jika Anda memiliki 1 server yang melakukan web dan database yang berisi 8 CPU Anda harus membayar untuk lisensi 8 cpu. Namun jika Anda memiliki dua server masing-masing dengan 4 CPU dan menjalankan database pada satu server, Anda hanya perlu membayar untuk lisensi 4 cpu
sumber
Kekhawatiran tambahan adalah bahwa basis data ingin mengambil semua memori yang tersedia dan menyimpannya sebagai cadangan ketika ingin menggunakannya. Anda dapat memaksanya untuk membatasi memori tetapi ini dapat memperlambat akses data.
sumber
Argumen bahwa ada keuntungan kinerja nyata yang bisa didapat dengan menjalankan server database pada server web adalah argumen yang cacat.
Karena server Database mengambil string kueri dan mengembalikan set hasil, data yang sebenarnya mengalir dari server data ke server web relatif kecil, tetapi tenaga kuda yang diperlukan untuk memproses kueri dan menghasilkan set hasil relatif besar. Mengoptimalkan kinerja di sekitar waktu transfer data karenanya mengoptimalkan hal yang salah.
Mengenai keamanan, ada keuntungan memiliki server data pada kotak yang berbeda dari server web. Memiliki pengaturan seperti itu bukanlah segalanya dan mengakhiri semua keamanan, tetapi merupakan langkah ke arah yang benar.
Mengenai skalabilitas, mudah dan relatif murah untuk menambahkan server web dan memasukkannya ke dalam cluster untuk menangani peningkatan lalu lintas. Tidak mudah dan murah untuk menambahkan server data dan mengelompokkannya. Juga, server web dan server data memiliki kebutuhan perangkat keras yang berbeda, sehingga beberapa kotak membantu dengan skalabilitas.
Jika Anda memulai dari yang kecil dan hanya memiliki satu kotak, maka cara yang baik adalah menggunakan mesin virtual. Menjalankan server web dan server data dalam berbagai VM pada satu host memberi Anda semua keuntungan dari kotak yang terpisah dengan biaya satu harga kotak besar.
sumber
Sistem operasi adalah pertimbangan lain. Meskipun database Anda mungkin memerlukan ruang memori yang lebih besar dan karenanya UNIX, server web Anda - atau lebih khusus server aplikasi Anda karena Anda hanya menyebutkan dua tingkatan - mungkin berbasis .Net, dan karenanya memerlukan Windows.
sumber
Baik! Inilah masalahnya, lebih aman untuk menginstal DB Server Anda di Mesin lain dan Aplikasi Anda di Web Server. Anda kemudian menghubungkan aplikasi Anda ke DB dengan Tautan Web. Terima kasih itu
sumber