คุณมีคำถามที่แตกต่างกันในที่นี่ดังนั้นฉันจะเคาะออกที:
"ฉันได้อ่านแล้วว่าเป็นวิธีปฏิบัติที่ดีที่สุดที่จะไม่อนุญาตให้ผู้ใช้เข้าสู่ระบบ sa โดยตรงแทนที่จะใช้ Windows Authentication"
คุณกำลังผสมสองสิ่งที่นี่: แนวคิดของ SA และแนวคิดของการรับรองความถูกต้องของ SQL และการรับรองความถูกต้องของ Windows
การรับรองความถูกต้องของ SQL คือรายการชื่อผู้ใช้และรหัสผ่านที่เก็บไว้ในแต่ละเซิร์ฟเวอร์ SQL ข้อเท็จจริงที่ว่ามันถูกเก็บไว้ใน SQL เป็นปัญหาแรก หากคุณต้องการเปลี่ยนรหัสผ่านของการเข้าสู่ระบบคุณต้องเปลี่ยนรหัสผ่านในทุก ๆ เซิร์ฟเวอร์ (หรือรักษารหัสผ่านที่แตกต่างกันบนเซิร์ฟเวอร์ที่แตกต่างกัน) ด้วยการรับรองความถูกต้องของ Windows คุณสามารถปิดใช้งานการเข้าสู่ระบบจากส่วนกลางเปลี่ยนรหัสผ่านตั้งค่านโยบายและอื่น ๆ
หากคุณเลือกที่จะใช้การรับรองความถูกต้องของ SQL แล้ว SA เป็นเพียงการเข้าสู่ระบบการตรวจสอบความถูกต้องของ SQL เดียว เป็นชื่อผู้ใช้ผู้ดูแลระบบเริ่มต้นเช่นเดียวกับผู้ดูแลระบบในการตรวจสอบ Windows มันมีพลังอำนาจระดับท้องถิ่นในหนึ่งอินสแตนซ์นั้น แต่ไม่ใช่มหาอำนาจระดับโลกในทุกอินสแตนซ์
"... และอนุญาตให้ใช้สิทธิ์ดูแลระบบบัญชีเหล่านั้น (หรือกลุ่มบัญชี)"
ไม่ว่าคุณจะเลือกวิธีการรับรองความถูกต้องแบบใดคุณจะต้องปฏิบัติตามหลักการของสิทธิพิเศษอย่างน้อยที่สุด: ให้สิทธิ์ขั้นต่ำสุดแก่ผู้อื่นเพื่อให้งานของพวกเขาสำเร็จและไม่มีอีกต่อไป
อย่าคิดว่าพวกเขาเป็นเพียงการเข้าสู่ระบบ - พวกเขาเป็นคนที่จะทำให้คุณโดนไล่ออก หากพวกเขาวางฐานข้อมูลหรือปิดใช้งานงานสำรองของคุณโดยไม่ตั้งใจพวกเขาจะไม่ถูกไล่ออกเพราะโดยค่าเริ่มต้น SQL จะไม่ติดตามว่าใครทำอะไร คุณเป็นคนที่จะถูกไล่ออกเพราะมันจะเกิดขึ้นและคุณจะไม่สามารถพูดได้ว่าคนคนนั้นทำอะไร
"วิธีปฏิบัติที่ดีที่สุดเพิ่มความปลอดภัยของอินสแตนซ์ SQL Server ของฉันได้อย่างไร"
คุณต้องการทำสองสิ่ง:
- หยุดคนไม่ให้เซิร์ฟเวอร์แตก
- เมื่อพวกเขาทำลายเซิร์ฟเวอร์ให้สามารถระบุได้อย่างแม่นยำว่าใครเป็นคนทำ
คนแรกทำได้สำเร็จด้วยหลักการของสิทธิพิเศษอย่างน้อยที่สุด: มอบสิทธิ์ที่พวกเขาต้องการเท่านั้นและไม่มีอะไรเพิ่มเติม
คนที่สองสามารถทำได้โดยให้แต่ละคนเข้าสู่ระบบของตัวเองไม่อนุญาตให้เข้าสู่ระบบที่ใช้ร่วมกัน (เช่นให้ทุกคนใช้ชื่อผู้ใช้ / รหัสผ่านเดียวกัน) และนึกคิดการตรวจสอบการเข้าสู่ระบบ คุณอาจจะไม่ทำส่วนสุดท้ายทันทีเพราะมันเจ็บปวด แต่ลองใส่ชิ้นส่วนก่อนเพื่อให้คุณสามารถเพิ่มการตรวจสอบในภายหลังหลังจากที่มีคนวางฐานข้อมูลและหัวหน้าของคุณต้องการทราบสาเหตุ
ฉันรู้ว่าคุณคิดอย่างไร: "แต่เรากำลังเข้ารหัสแอพและแอพนี้ต้องการการเข้าสู่ระบบ" ใช่ให้การเข้าสู่ระบบของแอปพลิเคชันของตนเองและผู้พัฒนาจำเป็นต้องรู้รหัสผ่านนั้น แต่การเข้าสู่ระบบนั้นควรถูกตัดสิทธิ์ที่ไม่มีใครในใจที่ถูกต้องต้องการใช้งาน ตัวอย่างเช่นอาจต้องอยู่ในบทบาท db_datareader และ db_datawriter เพียงอย่างเดียวไม่มีอะไรอื่น ด้วยวิธีนี้สามารถแทรกอัปเดตลบและเลือกข้อมูล แต่ไม่จำเป็นต้องเปลี่ยนสกีมาเพิ่มดัชนีเปลี่ยนกระบวนการจัดเก็บ ฯลฯ
"สิ่งนี้ใช้ได้เฉพาะกับอินสแตนซ์ของการผลิตหรือกับอินสแตนซ์การพัฒนาภายในของเราด้วย"
ฉันคิดว่ามันใช้กับกรณีการพัฒนาได้มากเพราะฉันมักจะกังวลเกี่ยวกับคนที่ทำลายสิ่งต่าง ๆ ผู้คนรักที่จะทำลายเซิร์ฟเวอร์ในการพัฒนา และแน่นอนเมื่อถึงเวลาที่จะรวบรวมรายการการเปลี่ยนแปลงเพื่อโยกย้ายไปยังการผลิตฉันจำเป็นต้องรู้ว่าดัชนีใดมีความสำคัญต่อแอปจริง ๆ หรือไม่หรือว่าผู้มีกำลังใจบางคนเพิ่งรัน Database Tuning Advisor และบอกให้ใช้การเปลี่ยนแปลงทั้งหมด . การอนุญาตที่เหมาะสมจะช่วยลดความเจ็บปวดนั้น