เหตุใดจึงไม่แนะนำให้มีฐานข้อมูลและเว็บเซิร์ฟเวอร์ในเครื่องเดียวกัน


127

จากการฟังบทสัมภาษณ์ของ Scott Hanselman กับทีม Stack Overflow ( ตอนที่ 1และ2 ) เขายืนกรานว่าเซิร์ฟเวอร์ SQL และเซิร์ฟเวอร์แอปพลิเคชันควรอยู่ในเครื่องแยกกัน นี่เป็นเพียงเพื่อให้แน่ใจว่าหากเซิร์ฟเวอร์หนึ่งถูกบุกรุกระบบทั้งสองจะไม่สามารถเข้าถึงได้หรือไม่? ความกังวลด้านความปลอดภัยมีมากกว่าความซับซ้อนของเซิร์ฟเวอร์สองเครื่อง (ค่าใช้จ่ายเพิ่มเติมการเชื่อมต่อเครือข่ายเฉพาะระหว่างทั้งสองเครื่องการบำรุงรักษาที่มากขึ้น ฯลฯ ) โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันขนาดเล็กที่ไม่มีหน่วยความจำใดใช้ CPU หรือหน่วยความจำมากเกินไป แม้จะมีเซิร์ฟเวอร์สองเครื่อง แต่เซิร์ฟเวอร์หนึ่งเครื่องถูกบุกรุก แต่ผู้โจมตีก็ยังสามารถสร้างความเสียหายร้ายแรงได้ไม่ว่าจะโดยการลบฐานข้อมูลหรือยุ่งกับรหัสแอปพลิเคชัน

ทำไมเรื่องนี้ถึงเป็นเรื่องใหญ่ถ้าประสิทธิภาพไม่ใช่ปัญหา

คำตอบ:


159
  1. ความปลอดภัย เว็บเซิร์ฟเวอร์ของคุณอยู่ใน DMZ สามารถเข้าถึงอินเทอร์เน็ตสาธารณะและรับข้อมูลที่ไม่น่าเชื่อถือจากผู้ใช้ที่ไม่ระบุชื่อ หากเว็บเซิร์ฟเวอร์ของคุณถูกบุกรุกและคุณได้ปฏิบัติตามกฎสิทธิ์ขั้นต่ำในการเชื่อมต่อกับฐานข้อมูลการเปิดเผยสูงสุดคือสิ่งที่แอปของคุณทำได้ผ่าน API ฐานข้อมูล หากคุณมีระดับธุรกิจระหว่างกันคุณมีอีกขั้นตอนหนึ่งระหว่างผู้โจมตีและข้อมูลของคุณ ในทางกลับกันหากฐานข้อมูลของคุณอยู่บนเซิร์ฟเวอร์เดียวกันผู้โจมตีสามารถเข้าถึงข้อมูลและเซิร์ฟเวอร์ของคุณได้แล้ว
  2. scalability การทำให้เว็บเซิร์ฟเวอร์ของคุณไม่มีสถานะช่วยให้คุณสามารถปรับขนาดเว็บเซิร์ฟเวอร์ของคุณในแนวนอนได้อย่างง่ายดาย เป็นเรื่องยากมากที่จะปรับขนาดเซิร์ฟเวอร์ฐานข้อมูลในแนวนอน
  3. ประสิทธิภาพ. 2 กล่อง = 2 เท่าของ CPU, 2 เท่าของ RAM และ 2 เท่าของแกนหมุนสำหรับการเข้าถึงดิสก์

ทั้งหมดที่กล่าวมาฉันสามารถเห็นกรณีที่สมเหตุสมผลซึ่งไม่มีประเด็นใดที่สำคัญจริงๆ


27
แต่ด้วยเครื่อง 2 เครื่องคุณมีโอกาสเป็นสองเท่าของความล้มเหลวของฮาร์ดแวร์;)
TWith2Sugars

4
@ TWith2Sugars - ตรงข้ามกับอะไร?
Kev

3
อ้าง ประเด็นที่ 1. หาก Web Tier เป็นของคุณคุณต้องการหรือต้องการอะไรมากกว่าอินเทอร์เฟซ API ของแอป / ฐานข้อมูล แน่นอนว่าเกมจะจบลง ณ จุดนั้นหรือไม่? สิ่งที่น่าสนใจมากในแง่ของบริการที่จำเป็นเพื่อสนับสนุนโครงสร้างพื้นฐาน DMZ เช่น AD หรือบริการของ Microsoft ที่กำลังเล่นอยู่?
Noelie Dunne

4
@Noelie - ระดับเว็บของคุณจะไม่สามารถเข้าถึงได้สำรองฐานข้อมูลไปยังไฟล์และ ftp ไฟล์นั้นไปยัง ftp.hackers.com โดยใช้ xp_cmdshell หรือวางฐานข้อมูล หรือแก้ไขค่า config ฯลฯ
Mark Brackett

6
@kirgy - เนื่องจากทั้งสองเครื่องขนานกันและแต่ละจุดล้มเหลวเพียงจุดเดียวความน่าเชื่อถือโดยรวมจึงน้อยลง มันไม่ได้เป็นสองเท่าในทางเทคนิค (จริงๆแล้วคือ 1 - (r1 * r2)) แต่ปิดเพียงพอสำหรับความน่าเชื่อถือขนาดใหญ่และโหนดขนาดเล็ก .... ในกรณี 0.01% มันจะเป็น 0.0199% แต่สำหรับ 100 โหนดนั้นจะเป็น 36.6% แทนที่จะเป็น 100% โดยนัยของคำสั่งที่เพิ่มขึ้นสองเท่า
Mark Brackett

45

มันไม่ได้จริงๆสำคัญ (คุณสามารถเรียกใช้เว็บไซต์ของคุณด้วยเว็บ / ฐานข้อมูลในเครื่องเดียวกันได้อย่างมีความสุข) มันเป็นเพียงขั้นตอนที่ง่ายที่สุดในการปรับขนาด ..

นั่นคือสิ่งที่ StackOverflow ทำ - เริ่มต้นด้วยเครื่องเดียวที่ใช้ IIS / SQL Server จากนั้นเมื่อเริ่มโหลดอย่างหนักเซิร์ฟเวอร์ที่สองก็ถูกซื้อและเซิร์ฟเวอร์ SQL ก็ถูกย้ายไปที่นั้น

หากประสิทธิภาพไม่ใช่ปัญหาอย่าเสียเงินซื้อ / ดูแลเซิร์ฟเวอร์สองเครื่อง


3
ฉันเห็นด้วยสามารถทำได้ในขณะที่โหลดต่ำ ... เมื่อโหลดเพิ่มขึ้นมันง่ายที่จะแยกพวกมันออกเป็น 2 เครื่องขึ้นไป
EJ Brennan

4
ฉันเข้ามาและกำลังจะแสดงความคิดเห็นในสิ่งเดียวกัน การสลับเซิร์ฟเวอร์ DB ของคุณนั้นง่ายพอ ๆ กับการเปลี่ยนสตริงการเชื่อมต่อของคุณ (ในกรณีส่วนใหญ่)
CitizenBane

ฉันชอบแบบนั้น มีใครบางคนกำลังคิดถึงบริบทก่อนที่จะแนะนำวิธีแก้ปัญหา!
demisx

22

ในทางกลับกันการอ้างถึงบล็อกอื่นของ Scott (Watermasyck จาก Telligent) พบว่าผู้ใช้ส่วนใหญ่สามารถเร่งความเร็วเว็บไซต์ได้ (โดยใช้ Community Server ของ Telligent) โดยวางฐานข้อมูลไว้ในเครื่องเดียวกับเว็บไซต์ อย่างไรก็ตามในกรณีของลูกค้าโดยปกติแล้ว db & web server จะเป็นแอปพลิเคชั่นเดียวในเครื่องนั้นและเว็บไซต์ไม่ได้รัดเครื่องมากขนาดนั้น จากนั้นประสิทธิภาพของการไม่ต้องส่งข้อมูลผ่านเครือข่ายมากขึ้นซึ่งทำให้เกิดความเครียดที่เพิ่มขึ้น


4
... จนกว่าการใช้งานพร้อมกันจะเพิ่มขึ้นและเซิร์ฟเวอร์ db ต้องการหน่วยความจำเพิ่มขึ้นเพื่อให้ใช้บัฟเฟอร์และแคชได้อย่างมีประสิทธิภาพ เมื่อเว็บ / แอปและเซิร์ฟเวอร์ db ต้องการหน่วยความจำมากกว่าที่จะแชร์บนกล่องเดียวการเพจและดิสก์ I / O จะเพิ่มขึ้นและถังประสิทธิภาพ
kermatt

@MattK - แต่ถ้าคุณมีหน่วยความจำจำนวนมากล่ะ? เรามีแอปที่ลูกค้าแต่ละรายมีฐานข้อมูลของตนเองดังนั้นทั้งฐานข้อมูลและเว็บเซิร์ฟเวอร์จึงสามารถปรับขนาดในแนวนอนได้อย่างง่ายดาย เนื่องจากเรามีหน่วยความจำมากกว่าดิสก์ที่ใช้งานอยู่ (64 GB เทียบกับ ~ 40GB) ประสิทธิภาพจะดีกว่าไหมหากเก็บทุกอย่างไว้ในเครื่องเดียวกัน
บี๊บบี๊บ

1
หากชุดการทำงานของคุณพอดีกับหน่วยความจำคุณอาจไม่เห็นปัญหาด้านประสิทธิภาพที่ฉันพูดถึง บ่อยครั้งที่เซิร์ฟเวอร์มีดิสก์มากกว่า RAM แต่ดูเหมือนว่าในกรณีของคุณคุณมีฐานข้อมูลที่พอดีกับ RAM ทั้งหมดตราบเท่าที่แอปพลิเคชันบนเซิร์ฟเวอร์ที่ใช้ร่วมกันไม่กินมากเกินไป
kermatt

15

ฉันคิดว่าปัจจัยสำคัญคือประสิทธิภาพ ทั้งเว็บเซิร์ฟเวอร์ / รหัสแอปและ SQL Server จะแคชข้อมูลที่ร้องขอโดยทั่วไปในหน่วยความจำและคุณกำลังฆ่าประสิทธิภาพของแคชด้วยการเรียกใช้ในพื้นที่หน่วยความจำเดียวกัน


12
จะเกิดอะไรขึ้นถ้าคุณมีฐานข้อมูลขนาดเล็ก (ish) แต่มีหน่วยความจำมากมาย? ค่าใช้จ่ายในการข้ามเครือข่ายสำหรับการเรียกฐานข้อมูลแต่ละครั้งโดยเฉพาะอย่างยิ่งหากมีจำนวนมากจะมีมากกว่าประโยชน์หรือไม่
เสียงบี๊บ

1
@ Tom Ritter แม้ว่าประสิทธิภาพจะเป็นข้อกังวล (ตามคำตอบนี้และจุดที่ 3 ในคำตอบของ Mark Brackett) ฉันรู้ว่าบางคน (รวมฉันไว้ด้วย) น่าจะนำเงินที่ประหยัดได้โดยไม่ได้รับเซิร์ฟเวอร์ DB แยกต่างหากใน CPU / RAM เพิ่มเติม / เป็นต้น บนเซิร์ฟเวอร์หนึ่งเดียวที่เข้ามาแทนที่ ดังนั้นควรนำมาพิจารณาด้วย สำหรับหน่วยความจำที่แยกออกจากกัน IIS และ SQL สามารถกำหนดค่าเพื่อรองรับการแข่งขันเหนือทรัพยากร โดยส่วนตัวแล้ว "นักเตะ" สำหรับผมคือคะแนนอันดับ 1 ของ Mark ... ฉันชอบความคิดของการเข้าถึงที่ จำกัด เว็บเซิร์ฟเวอร์ที่ถูกบุกรุกจะต้องไปยังเซิร์ฟเวอร์ DB แยกต่างหาก
Dylan - INNO Software

@ ทอมคุณสามารถแบ่งพื้นที่หน่วยความจำออกเป็นสองหน่วยแยกกันได้เสมอ ครึ่งหนึ่งสำหรับเซิร์ฟเวอร์และอีกครึ่งหนึ่งสำหรับฐานข้อมูล
Pacerier

15

ทอมถูกต้องในเรื่องนี้ สาเหตุอื่น ๆ บางประการคือไม่คุ้มทุนและมีความเสี่ยงด้านความปลอดภัยเพิ่มเติม

เว็บเซิร์ฟเวอร์มีข้อกำหนดฮาร์ดแวร์ที่แตกต่างจากเซิร์ฟเวอร์ฐานข้อมูล เซิร์ฟเวอร์ฐานข้อมูลทำงานได้ดีขึ้นด้วยหน่วยความจำจำนวนมากและดิสก์อาร์เรย์ที่รวดเร็วมากในขณะที่เว็บเซิร์ฟเวอร์ต้องการหน่วยความจำเพียงพอในการแคชไฟล์และการร้องขอฐานข้อมูลบ่อยครั้ง (ขึ้นอยู่กับการตั้งค่าของคุณ) เกี่ยวกับประสิทธิภาพด้านต้นทุนเซิร์ฟเวอร์ทั้งสองไม่จำเป็นต้องมีราคาถูกกว่าอย่างไรก็ตามอัตราส่วนประสิทธิภาพ / ต้นทุนควรสูงกว่าเนื่องจากคุณไม่ต้องใช้แอปพลิเคชันที่แตกต่างกันเพื่อแย่งชิงทรัพยากร ด้วยเหตุนี้คุณอาจต้องใช้จ่ายมากขึ้นสำหรับเซิร์ฟเวอร์หนึ่งเครื่องที่ให้บริการทั้งสองอย่างและมีประสิทธิภาพเทียบเท่ากับเซิร์ฟเวอร์เฉพาะ 2 เครื่อง

ข้อกังวลด้านความปลอดภัยคือหากเครื่องเดียวถูกบุกรุกทั้งเว็บเซิร์ฟเวอร์และฐานข้อมูลจะมีช่องโหว่ ด้วยเซิร์ฟเวอร์สองเครื่องคุณจะมีห้องหายใจเนื่องจากเซิร์ฟเวอร์ที่ 2 จะยังคงปลอดภัย (อย่างน้อยก็สักพัก)

นอกจากนี้ยังมีประโยชน์ด้านความสามารถในการปรับขนาดเนื่องจากคุณอาจต้องดูแลเซิร์ฟเวอร์ฐานข้อมูลเพียงไม่กี่ตัวที่ใช้โดยเว็บแอปพลิเคชันต่างๆ วิธีนี้ทำให้คุณมีงานน้อยลงในการใช้การอัปเกรดหรือแพตช์และทำการปรับแต่งประสิทธิภาพ ฉันเชื่อว่ามีเครื่องมือการจัดการเซิร์ฟเวอร์เพื่อให้งานเหล่านี้ง่ายขึ้น (ในกรณีเครื่องเดียว)


2
หากคุณกำลังเรียกใช้อะไรก็ตามยกเว้น SPs เว็บเซิร์ฟเวอร์ของคุณอาจเข้าถึงข้อมูลในฐานข้อมูลของคุณได้อย่างเต็มที่
George Mauer

ทำไมถึงไม่คุ้มทุน? โปรดระบุ
Robert Jeppesen

Robert I ขยายความในเรื่องนั้นและเพิ่มความคิดเห็นเกี่ยวกับความสามารถในการปรับขนาดและการบำรุงรักษา
Dana the Sane

9

ความปลอดภัยเป็นปัญหาหลัก ตามหลักการแล้วเซิร์ฟเวอร์ฐานข้อมูลของคุณควรนั่งอยู่หลังไฟร์วอลล์โดยมีเพียงพอร์ตที่จำเป็นในการเปิดการเข้าถึงข้อมูลเท่านั้น เว็บแอปพลิเคชันของคุณควรเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลด้วยบัญชี SQL ที่มีสิทธิ์เพียงพอที่แอปพลิเคชันจะทำงานได้และไม่มีอีกต่อไป ตัวอย่างเช่นคุณควรลบสิทธิ์ที่อนุญาตให้ทิ้งวัตถุและแน่นอนที่สุดว่าคุณไม่ควรเชื่อมต่อโดยใช้บัญชีเช่น 'sa'

ในกรณีที่คุณสูญเสียเว็บเซิร์ฟเวอร์ไปยังไฮแจ็ค (เช่นการเพิ่มสิทธิ์การใช้งานแบบเต็มเป็นสิทธิ์ของผู้ดูแลระบบ) สถานการณ์ที่เลวร้ายที่สุดคือฐานข้อมูลแอปพลิเคชันของคุณอาจถูกบุกรุก แต่ไม่ใช่เซิร์ฟเวอร์ฐานข้อมูลทั้งหมด (เช่นเดียวกับกรณีที่ เซิร์ฟเวอร์ฐานข้อมูลและเว็บเซิร์ฟเวอร์เป็นเครื่องเดียวกัน) หากคุณเข้ารหัสสตริงการเชื่อมต่อฐานข้อมูลของคุณและแฮ็กเกอร์ไม่เข้าใจเพียงพอที่จะถอดรหัสสิ่งเหล่านี้สิ่งที่คุณทำหายไปก็คือเว็บเซิร์ฟเวอร์


แต่คุณสำรองฐานข้อมูลใช่ไหม มิฉะนั้นคุณจะมีความเสี่ยงมากพอ ๆ กับการสูญเสียเนื่องจากความล้มเหลวของฮาร์ดแวร์หรือข้อผิดพลาดที่ไม่ค่อยตื่นเต้น การโจมตีที่ฆ่าเว็บเซิร์ฟเวอร์จะทำให้หยุดทำงานทั้งหมดด้วยตัวเอง สิทธิ์ที่เพียงพอในการเพิ่มระเบียนลงในตารางก็เพียงพอที่จะทำให้ไซต์ไร้ประโยชน์
Daniel Earwicker

แน่นอนว่าคุณสำรองฐานข้อมูลโดยปริยายซึ่งในโพสต์ของฉันฉันแนะนำเป็นอย่างอื่น
Kev

1
ใช่ แต่ข้อสรุปก็คือการโจมตีที่มีจุดมุ่งหมายเพื่อทำลายไซต์สามารถทำได้โดยการทำลายการกำหนดค่าเว็บเซิร์ฟเวอร์หรือฐานข้อมูลและวิธีแก้ปัญหาก็เหมือนกันสำหรับทั้งสองอย่างคือคืนค่าจากการสำรองข้อมูล การปกป้องฐานข้อมูลเป็นพิเศษนั้น (a) ไม่จำเป็นและ (b) เป็นไปไม่ได้อยู่ดี
Daniel Earwicker

@Earwicker - แล้วฐานข้อมูลอื่น ๆ ที่อยู่บนเซิร์ฟเวอร์ DB ล่ะ? สิ่งที่คุณเสียไปคือฐานข้อมูลเดียว
Kev

8
นอกจากดาเนียลแล้วคุณยังพลาดประเด็นสำคัญไปอีก ไม่เกี่ยวกับการสำรองฐานข้อมูล แต่เกี่ยวกับข้อมูลที่ถูกบุกรุก ลูกค้าของคุณจะโอเคไหมที่ "แฮกเกอร์ขโมยข้อมูลลูกค้าและการขายทั้งหมดของคุณ แต่ไม่ต้องกังวลฉันมีข้อมูลสำรอง" :)
Dylan - INNO Software

9

ปัจจัยหนึ่งที่ยังไม่ได้กล่าวถึงคือการจัดสรรภาระงาน หากคุณเริ่มคิดว่าเว็บเซิร์ฟเวอร์และฐานข้อมูลเป็นเครื่องแยกกันคุณจะปรับให้เหมาะสมสำหรับการเดินทางรอบเครือข่ายน้อยลงและเพิ่มเว็บเซิร์ฟเวอร์ตัวที่สองหรือเอ็นจิ้นฐานข้อมูลที่สองได้ง่ายขึ้นเมื่อความต้องการเพิ่มขึ้น


6

ฉันสามารถพูดได้จากประสบการณ์โดยตรงว่าเป็นความคิดที่ดีที่จะวางเว็บเซิร์ฟเวอร์และฐานข้อมูลบนเครื่องต่างๆ หากคุณมีแอปพลิเคชันที่ใช้ทรัพยากรมากอาจทำให้รอบการทำงานของ CPU บนเครื่องถึงจุดสูงสุดได้โดยพื้นฐานแล้วจะทำให้เครื่องหยุดทำงาน อย่างไรก็ตามหากแอปพลิเคชันของคุณมีการใช้งานฐานข้อมูลอย่าง จำกัด ก็คงไม่ใช่เรื่องใหญ่ที่จะให้พวกเขาแชร์เซิร์ฟเวอร์


6

ว้าวไม่มีใครเสนอความจริงที่ว่าถ้าคุณซื้อเซิร์ฟเวอร์ SQL ในราคา 5k เหรียญคุณอาจต้องการใช้มากกว่าเว็บแอปพลิเคชันของคุณ หากคุณใช้ Express บางทีคุณอาจไม่สนใจ ฉันเห็นเซิร์ฟเวอร์ SQL เรียกใช้ฐานข้อมูลสำหรับแอปพลิเคชัน 20 ถึง 30 ครั้งดังนั้นการวางไว้บนเว็บเซิร์ฟเวอร์จะไม่ฉลาด

ประการที่สองขึ้นอยู่กับว่าเซิร์ฟเวอร์สำหรับใคร ฉันทำงานให้กับ บริษัท การเงินและรัฐบาล ดังนั้นเราจึงใช้ความเจ็บปวดอย่างบ้าคลั่งในการใช้เฉพาะ sprocs และ จำกัด พอร์ตจากเว็บเซิร์ฟเวอร์ไปยัง SQL ดังนั้นหากเว็บแอปถูกแฮ็ก สิ่งเดียวที่แฮ็กเกอร์สามารถทำได้คือเรียก sprocs เนื่องจากบัญชีผู้ใช้บนเว็บเซิร์ฟเวอร์ถูกล็อกไม่ให้เห็น / เรียก sprocs บนฐานข้อมูลเท่านั้น ตอนนี้แฮ็กเกอร์ต้องหาวิธีเข้าสู่ฐานข้อมูล ถ้ามันอยู่บนเว็บเซิร์ฟเวอร์ก็ง่ายต่อการเข้าถึง


5

ฉันเห็นด้วยกับ Daniel Earwicker - คำถามเพื่อความปลอดภัยค่อนข้างมีข้อบกพร่อง

หากคุณมีการตั้งค่ากล่องเดียวที่มีเว็บเซิร์ฟเวอร์และมีเพียงฐานข้อมูลสำหรับเว็บเซิร์ฟเวอร์นั้นหากเว็บเซิร์ฟเวอร์นั้นถูกบุกรุกคุณจะสูญเสียทั้งเว็บเซิร์ฟเวอร์และมีเพียงฐานข้อมูลสำหรับแอปพลิเคชันนั้น ๆ

สิ่งนี้เหมือนกับสิ่งที่เกิดขึ้นหากคุณสูญเสียเว็บเซิร์ฟเวอร์ในการตั้งค่า 2 เซิร์ฟเวอร์ คุณสูญเสียเว็บเซิร์ฟเวอร์และมีเพียงฐานข้อมูลสำหรับแอปพลิเคชันเฉพาะนั้น

อาร์กิวเมนต์ที่ว่า 'ส่วนที่เหลือของความสมบูรณ์ของเซิร์ฟเวอร์ DB จะยังคงอยู่' โดยที่คุณมีการตั้งค่า 2 เซิร์ฟเวอร์นั้นไม่เกี่ยวข้องเนื่องจากในสถานการณ์แรกเซิร์ฟเวอร์ฐานข้อมูลอื่น ๆ ทั้งหมดที่เกี่ยวข้องกับแอปพลิเคชันอื่น ๆ ทั้งหมด (ถ้ามี) จะไม่ได้รับผลกระทบเช่นกัน - เป็นเจ้าภาพในที่อื่น

ในทำนองเดียวกันกับคำถามที่เกิดจาก Kev 'แล้วฐานข้อมูลอื่น ๆ ทั้งหมดที่อยู่บนเซิร์ฟเวอร์ DB ล่ะ? สิ่งที่คุณเสียไปคือฐานข้อมูลเดียว '

  • หากคุณโฮสต์แอปพลิเคชันและฐานข้อมูลบนเซิร์ฟเวอร์เดียวคุณจะโฮสต์ฐานข้อมูลบนเซิร์ฟเวอร์ที่เกี่ยวข้องกับแอปพลิเคชันนั้นเท่านั้น ดังนั้นคุณจะไม่สูญเสียฐานข้อมูลเพิ่มเติมในการตั้งค่าเซิร์ฟเวอร์เดียวเมื่อเทียบกับการตั้งค่าเซิร์ฟเวอร์หลายเครื่อง

ในทางตรงกันข้ามในการตั้งค่าเซิร์ฟเวอร์ 2 เครื่องซึ่งผู้โจมตีสามารถเข้าถึงเว็บเซิร์ฟเวอร์และโดยพร็อกซีสิทธิ์ที่ จำกัด (ในกรณีที่ดีที่สุด) ไปยังเซิร์ฟเวอร์ฐานข้อมูลพวกเขาสามารถทำให้ฐานข้อมูลของแอปพลิเคชันอื่น ๆ ทั้งหมดตกอยู่ในความเสี่ยงโดยการพกพา ออกแบบสอบถามที่ช้าและใช้หน่วยความจำมากหรือเพิ่มพื้นที่เก็บข้อมูลที่มีอยู่ให้สูงสุดบนเซิร์ฟเวอร์ฐานข้อมูล การแยกแอปพลิเคชันออกเป็นข้อกังวลของตนเองเช่นเดียวกับการจำลองเสมือนคุณยังแยกแอปพลิเคชันเหล่านี้ออกเพื่อวัตถุประสงค์ด้านความปลอดภัยในทางบวก


4

ขึ้นอยู่กับการใช้งานและวัตถุประสงค์ เมื่อความพร้อมใช้งานและประสิทธิภาพสูงไม่สำคัญก็ไม่เลวที่จะไม่แยกฐานข้อมูลและเว็บเซิร์ฟเวอร์ โดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงประสิทธิภาพที่เพิ่มขึ้น - หากแอปพลิเคชันทำการค้นหาฐานข้อมูลจำนวนมากสามารถลบโหลดเครือข่ายจำนวนมากได้โดยเก็บไว้ในระบบเดียวกันทำให้เวลาตอบสนองต่ำ


2

ฉันคิดว่ามันเป็นเพราะเครื่องทั้งสองมักจะต้องได้รับการปรับให้เหมาะสมในรูปแบบที่แตกต่างกัน นอกเหนือจากนั้นฉันไม่รู้เราเรียกใช้แอปพลิเคชันทั้งหมดของเราด้วยฐานข้อมูลเซิร์ฟเวอร์บนเครื่องเดียวกัน - เนื่องจากเราไม่ได้เปิดเผยต่อสาธารณะ - แต่เราไม่มีปัญหา

ฉันนึกไม่ออกว่ามีคนจำนวนมากเกินไปที่สนใจว่าเครื่องหนึ่งเครื่องถูกบุกรุกทั้งสองเครื่องเนื่องจากโดยปกติเว็บแอปพลิเคชันจะมีการเข้าถึงข้อมูลที่ไม่ จำกัด อย่างน้อยที่สุดหากไม่ใช่สคีมาภายในฐานข้อมูล

สนใจในสิ่งที่คนอื่นอาจพูด


1
จอร์จฉันคิดว่าคุณควรอ้างถึงคำตอบของ Mark Brackett ความปลอดภัยที่เว็บเซิร์ฟเวอร์ของคุณมีต่อฐานข้อมูลจะไม่เหมือนกับที่ควรจะเป็นหากเซิร์ฟเวอร์แยกจากกัน โดยเฉพาะ "ดิสก์ภายใน" จะไม่สามารถเข้าถึงได้ นอกจากนี้หากมีเพียงเว็บไซต์เดียว (จากหลายเว็บไซต์) ที่ถูกแฮ็กพวกเขาอาจมีโอกาสเข้าถึงฐานข้อมูลของ THAT SITE เท่านั้น (เว้นแต่คุณจะใช้ผู้ใช้ที่มีประสิทธิภาพมากเกินไปสำหรับสตริงการเชื่อมต่อนั้น) มีสถานการณ์อื่น ๆ อีกมากมายฉันไม่คิดว่าความคิดเห็นที่นี่เป็นที่สำหรับพวกเขา
Dylan - INNO Software

2

ฉันฟังพอดคาสต์นั้นแล้วมันก็น่าขบขัน แต่ข้อโต้แย้งด้านความปลอดภัยไม่สมเหตุสมผลกับฉัน หากคุณถูกบุกรุกเซิร์ฟเวอร์ A และเซิร์ฟเวอร์นั้นสามารถเข้าถึงข้อมูลบนเซิร์ฟเวอร์ B ได้คุณจะสามารถเข้าถึงข้อมูลบนเซิร์ฟเวอร์ B ได้ทันที


ไม่จริง. คุณสามารถเข้าถึงข้อมูลหรือสิทธิพิเศษใด ๆ ที่กล่อง A มีต่อกล่อง B ในการตั้งค่าที่ปลอดภัยนั่นหมายความว่าคุณมีการเข้าถึงฐานข้อมูลในระดับสูงสุดที่แอปในกล่อง A มี อย่างไรก็ตามคุณไม่มี sa priv บน DB หรือรูทบน OS ของ Box B
Mark Brackett

2
"คุณสามารถเข้าถึงข้อมูลหรือสิทธิพิเศษใด ๆ ที่กล่อง A มีต่อกล่อง B" นั่นคือสิ่งที่ฉันหมายถึง "คุณสามารถเข้าถึงข้อมูลบนเซิร์ฟเวอร์ B ได้ทันที" ถ้า RDBMS อยู่ในกล่อง A และไม่มีกล่อง B จะทำให้เกิดความแตกต่างอย่างไร? NB เราสมมติว่าคุณแฮ็กกล่อง A แล้วไม่ว่าจะด้วยวิธีใดก็ตาม
Daniel Earwicker

ในการกำหนดค่ากล่องสองกล่องหากคุณใช้หลักการของสิทธิพิเศษน้อยที่สุดหากกล่อง A (เว็บ) ถูกบุกรุกสิ่งที่เลวร้ายที่สุดที่ควรเกิดขึ้นคือคุณสูญเสียฐานข้อมูลในกล่อง B และไม่มีอีกต่อไป
Kev

1
และในการกำหนดค่ากล่องเดียวหากกล่องนั้นถูกบุกรุกคุณจะทำกล่องนั้นหายไปหนึ่งกล่องซึ่งรวมถึงฐานข้อมูลไว้ด้วย อะไรคือความแตกต่าง?
Daniel Earwicker

2
ความแตกต่างก็คือในการกำหนดค่าสองกล่องหากเว็บเซิร์ฟเวอร์ถูกบุกรุกสิ่งที่คุณสูญเสียไปคือเว็บเซิร์ฟเวอร์และที่แย่ที่สุดคือ DB ส่วนที่เหลือของความสมบูรณ์ของเซิร์ฟเวอร์ DB จะยังคงอยู่
Kev

2

สิทธิ์การใช้งานฐานข้อมูลไม่ได้ถูกต้องและมักจะถูกเรียกเก็บเงินต่อ CPU ดังนั้นการแยกเว็บเซิร์ฟเวอร์ของคุณออกคุณสามารถลดต้นทุนของใบอนุญาตฐานข้อมูลของคุณได้

เช่นถ้าคุณมีเซิร์ฟเวอร์ 1 เครื่องที่ทำทั้งเว็บและฐานข้อมูลที่มี CPU 8 ตัวคุณจะต้องจ่ายค่าลิขสิทธิ์ cpu 8 ตัว อย่างไรก็ตามหากคุณมีเซิร์ฟเวอร์สองเครื่องโดยแต่ละเซิร์ฟเวอร์มี 4 ซีพียูและรันฐานข้อมูลบนเซิร์ฟเวอร์เดียวคุณจะต้องจ่ายค่าลิขสิทธิ์ cpu 4 ตัวเท่านั้น


โปรดอธิบายว่าจำนวนเงินนี้เป็นเงินออมอย่างไร
John Saunders

1
จอห์น - เขาบอกว่าเพื่อให้ได้ประสิทธิภาพเทียบเท่ากับ 2 เครื่องคุณจะต้องเพิ่ม # คอร์เป็นสองเท่าซึ่งจะทำให้ต้นทุนการให้สิทธิ์การใช้งาน SQL Server เพิ่มขึ้นเป็นสองเท่า ทำไมต้องจ่ายเงินเพิ่มอีก $ 10-20k สำหรับ SQL Server ถ้าสิ่งที่คุณได้รับคือประสิทธิภาพเหมือนกับการใช้ 2 เครื่อง
เสียงบี๊บ

จะเป็นจริงก็ต่อเมื่อประสิทธิภาพ / การใช้ทรัพยากร (เช่น cpu) ถูกครอบงำโดยเซิร์ฟเวอร์แอปไม่ใช่โดยเซิร์ฟเวอร์ db ถ้า db ต้องการ 8 cpus มันจะไม่ทำงาน
Andreas Dietrich

1

ข้อกังวลเพิ่มเติมคือฐานข้อมูลต้องการใช้หน่วยความจำที่มีอยู่ทั้งหมดและเก็บไว้สำรองเมื่อต้องการใช้งาน คุณสามารถบังคับให้ จำกัด หน่วยความจำได้ แต่อาจทำให้การเข้าถึงข้อมูลช้าลงอย่างมาก


-1

การโต้แย้งว่ามีการเพิ่มประสิทธิภาพที่แท้จริงโดยการเรียกใช้เซิร์ฟเวอร์ฐานข้อมูลบนเว็บเซิร์ฟเวอร์เป็นข้อโต้แย้งที่มีข้อบกพร่อง

เนื่องจากเซิร์ฟเวอร์ฐานข้อมูลใช้สตริงการสืบค้นและชุดผลลัพธ์ข้อมูลที่ไหลจากเซิร์ฟเวอร์ข้อมูลไปยังเว็บเซิร์ฟเวอร์จึงมีขนาดค่อนข้างเล็ก แต่แรงม้าที่ต้องใช้ในการประมวลผลแบบสอบถามและสร้างชุดผลลัพธ์นั้นค่อนข้างมาก การเพิ่มประสิทธิภาพในช่วงเวลาการถ่ายโอนข้อมูลจึงเป็นการเพิ่มประสิทธิภาพในสิ่งที่ไม่ถูกต้อง

เกี่ยวกับความปลอดภัยมีข้อดีคือการมีเซิร์ฟเวอร์ข้อมูลในกล่องที่แตกต่างจากเว็บเซิร์ฟเวอร์ การตั้งค่าดังกล่าวไม่ได้เป็นการรักษาความปลอดภัยทั้งหมด แต่เป็นขั้นตอนในทิศทางที่ถูกต้อง

เกี่ยวกับความสามารถในการปรับขยายการเพิ่มเว็บเซิร์ฟเวอร์นั้นง่ายและค่อนข้างถูกและรวมไว้ในคลัสเตอร์เพื่อรองรับปริมาณการใช้งานที่เพิ่มขึ้น การเพิ่มเซิร์ฟเวอร์ข้อมูลและจัดกลุ่มข้อมูลนั้นไม่ใช่เรื่องง่ายและราคาถูก นอกจากนี้เว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ข้อมูลยังมีความต้องการฮาร์ดแวร์ที่แตกต่างกันดังนั้นหลาย ๆ กล่องจึงช่วยในเรื่องการปรับขนาดได้

หากคุณเริ่มต้นขนาดเล็กและมีเพียงกล่องเดียววิธีที่ดีก็คือการใช้เครื่องเสมือน การเรียกใช้เว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ข้อมูลใน VM ที่แตกต่างกันบนโฮสต์เดียวทำให้คุณได้รับประโยชน์จากกล่องแยกต่างหากทั้งหมดในราคากล่องใหญ่หนึ่งกล่อง


1
คำถามเดิมถามเกี่ยวกับแอปพลิเคชันเซิร์ฟเวอร์ไม่จำเป็นต้องใช้อินเทอร์เน็ตสาธารณะที่ต้องเผชิญกับเว็บเซิร์ฟเวอร์
JoãoBragança

-2

ระบบปฏิบัติการเป็นอีกข้อพิจารณา ในขณะที่ฐานข้อมูลของคุณอาจต้องการพื้นที่หน่วยความจำที่ใหญ่ขึ้นดังนั้น UNIX เว็บเซิร์ฟเวอร์ของคุณ - หรือเซิร์ฟเวอร์แอปของคุณโดยเฉพาะเนื่องจากคุณพูดถึงเพียงสองระดับอาจเป็นแบบ. Net และจำเป็นต้องใช้ Windows


ฉันไม่ได้ลงคะแนนสิ่งนี้ แต่ "ในขณะที่ฐานข้อมูลของคุณอาจต้องการพื้นที่หน่วยความจำที่ใหญ่ขึ้นและด้วยเหตุนี้ UNIX" - หากคุณใช้ Windows 64 บิตและ 64 บิต SQL จะมีหน่วยความจำมากมายให้เล่น
Kev

ขออภัยหน่วยความจำหมายถึงเหตุผลตัวอย่างที่จำเป็นสำหรับการปรับใช้กับ OS แยก เหตุผลอื่น ๆ ได้แก่ ประสิทธิภาพความปลอดภัยมาตรฐานขององค์กร / การออกใบอนุญาตการสนับสนุนผู้จัดจำหน่าย ฯลฯ
Chris Noe

-6

ตกลง! นี่คือสิ่งที่ปลอดภัยกว่าที่จะติดตั้งเซิร์ฟเวอร์ DB ของคุณบนเครื่องอื่นและแอปพลิเคชันของคุณบนเว็บเซิร์ฟเวอร์ จากนั้นคุณเชื่อมต่อแอปพลิเคชันของคุณกับฐานข้อมูลด้วย Web Link ขอบคุณมาก


3
ทำไมถึงปลอดภัยกว่า?
Bryan Chen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.