6 พื้นฐานการรักษาความปลอดภัยของ SQL Server ที่ผู้ดูแลระบบฐานข้อมูลทุกคนควรรู้
การละเมิดข้อมูลมากเกินไปเกิดจากเซิร์ฟเวอร์ฐานข้อมูลที่มีความปลอดภัยต่ำ Microsoft SQL Server เป็นโซลูชันระดับองค์กรที่ได้รับความนิยม แต่ก็มีความซับซ้อนในการทำความเข้าใจและกำหนดค่าเช่นกัน ต่อไปนี้เป็นคุณลักษณะด้านความปลอดภัย 6 ประการของ SQL Server ที่คุณควรทราบเพื่อปกป้องข้อมูลเซิร์ฟเวอร์ของคุณ
1. การรับรองความถูกต้องของเซิร์ฟเวอร์ SQL เทียบกับการรับรองความถูกต้องของ Windows
Microsoft SQL Server รองรับสองตัวเลือกการรับรองความถูกต้อง:
- การรับรองความถูกต้องของ Windows อาศัย Active Directory (AD) ในการตรวจสอบความถูกต้องของผู้ใช้ก่อนที่จะเชื่อมต่อกับ SQL เป็นโหมดการตรวจสอบความถูกต้องที่แนะนำ เนื่องจาก AD เป็นวิธีที่ดีที่สุดในการจัดการนโยบายรหัสผ่านและการเข้าถึงของผู้ใช้และกลุ่มไปยังแอปพลิเคชันในองค์กรของคุณ .
- การตรวจสอบสิทธิ์เซิร์ฟเวอร์ SQL ทำงานโดยการจัดเก็บชื่อผู้ใช้และรหัสผ่านบนเซิร์ฟเวอร์ฐานข้อมูล สามารถใช้ในสถานการณ์ที่ Active Directory ไม่พร้อมใช้งาน
คุณสามารถใช้ SQL Server และ Windows Authentication ในเวลาเดียวกันได้ (โหมดผสม) แต่เมื่อใดก็ตามที่เป็นไปได้ ให้ใช้ Windows Authentication โดยเฉพาะ
หากคุณต้องใช้การรับรองความถูกต้องของเซิร์ฟเวอร์ SQL ตรวจสอบให้แน่ใจว่าบัญชี sa เริ่มต้นถูกปิดใช้งานหรือมีรหัสผ่านที่รัดกุมซึ่งเปลี่ยนบ่อยครั้ง เนื่องจากบัญชีนี้มักตกเป็นเป้าหมายของแฮกเกอร์ บัญชี SQL Server รวมถึง sa (หากเปิดใช้งาน) สามารถจัดการได้โดยใช้บริการ SQL Server Management Studio หรือคำสั่ง ALTER LOGIN Transact-SQL (T-SQL)
2. การเข้าสู่ระบบเซิร์ฟเวอร์และบทบาท
ไม่ว่าคุณจะเลือกวิธีการรับรองความถูกต้องแบบใด มีการเข้าสู่ระบบสองประเภทที่คุณกำหนดค่าให้กับอินสแตนซ์ SQL: การเข้าสู่ระบบของผู้ใช้และการเข้าสู่ระบบเซิร์ฟเวอร์ ฉันจะพูดถึงการเข้าสู่ระบบของผู้ใช้ในส่วนถัดไป การเข้าสู่ระบบเซิร์ฟเวอร์ช่วยให้ผู้ใช้สร้างการเชื่อมต่อกับอินสแตนซ์ SQL Server การเข้าสู่ระบบเซิร์ฟเวอร์แต่ละครั้งจะได้รับการกำหนด บทบาทเซิร์ฟเวอร์ อย่างน้อยหนึ่งรายการ ซึ่งช่วยให้สามารถดำเนินการเฉพาะบนอินสแตนซ์ได้ ตามค่าเริ่มต้น การเข้าสู่ระบบเซิร์ฟเวอร์จะได้รับการกำหนดบทบาทเซิร์ฟเวอร์ สาธารณะ ซึ่งจะทำให้สามารถเข้าถึงอินสแตนซ์ขั้นพื้นฐานได้ บทบาทอื่นๆ ที่มีอยู่ ได้แก่ bulkadmin, sercurityadmin, dbcreator และ serveradmin
การเข้าสู่ระบบเซิร์ฟเวอร์สามารถสร้างได้โดยใช้ T-SQL หรือ SQL Server Management Studio เมื่อสร้างการเข้าสู่ระบบเซิร์ฟเวอร์ คุณต้องระบุฐานข้อมูลเริ่มต้น การเข้าสู่ระบบเซิร์ฟเวอร์เชื่อมโยงกับการเข้าสู่ระบบของผู้ใช้ในฐานข้อมูลเริ่มต้น เป็นที่น่าสังเกตว่าชื่อเข้าสู่ระบบเซิร์ฟเวอร์และชื่อเข้าสู่ระบบของผู้ใช้ที่เกี่ยวข้องนั้นไม่จำเป็นต้องตรงกัน หากไม่มีวัตถุผู้ใช้ที่เกี่ยวข้องในฐานข้อมูลเริ่มต้น การเข้าสู่ระบบเซิร์ฟเวอร์จะถูกปฏิเสธการเข้าถึง เว้นแต่บทบาทของเซิร์ฟเวอร์ที่กำหนดให้กับการเข้าสู่ระบบนั้นสามารถเข้าถึงฐานข้อมูลทั้งหมดได้ การเข้าสู่ระบบเซิร์ฟเวอร์สามารถแมปกับผู้ใช้ในฐานข้อมูลตั้งแต่หนึ่งฐานข้อมูลขึ้นไป และคุณสามารถสร้างผู้ใช้เมื่อตั้งค่าการเข้าสู่ระบบเซิร์ฟเวอร์
3. ผู้ใช้ฐานข้อมูล สคีมา และบทบาท
เมื่อสร้างการเข้าสู่ระบบของผู้ใช้ คุณจะต้องระบุฐานข้อมูลที่จะเชื่อมโยงด้วย ชื่อผู้ใช้ และสคีมาเริ่มต้นที่จะนำไปใช้กับออบเจ็กต์ทั้งหมดที่ผู้ใช้สร้างขึ้นหากไม่มีการระบุสคีมาอื่น สคีมาของ SQL Server คือคอลเลกชั่นของอ็อบเจ็กต์ เช่น ตารางและมุมมอง ซึ่งแยกทางตรรกะจากอ็อบเจ็กต์ฐานข้อมูลอื่นๆ ซึ่งช่วยให้จัดการการเข้าถึงได้ง่ายขึ้น และหมายความว่าไม่จำเป็นต้องใช้ชื่อสคีมาเมื่อรันคำสั่ง T-SQL กับฐานข้อมูล
สคีมาเริ่มต้นสำหรับวัตถุที่ผู้ใช้กำหนดคือ dbo สคีมาเริ่มต้นอื่นคือ sys; มันเป็นเจ้าของออบเจ็กต์ระบบทั้งหมด
ในลักษณะเดียวกับที่การล็อกอินของเซิร์ฟเวอร์ถูกกำหนดบทบาทของเซิร์ฟเวอร์ การล็อกอินของผู้ใช้จะถูกกำหนดบทบาทของฐานข้อมูล ซึ่งจะกำหนดสิทธิ์ในฐานข้อมูล บทบาทของฐานข้อมูลเซิร์ฟเวอร์ ได้แก่ สาธารณะ, db accessadmin, เจ้าของ db และ db securityadmin
4. ความปลอดภัยและการอนุญาต
เมื่อบทบาทของเซิร์ฟเวอร์หรือฐานข้อมูลจะทำให้ผู้ใช้มีสิทธิ์เข้าถึงมากเกินไปหรือน้อยเกินไป คุณสามารถกำหนดความปลอดภัยได้ตั้งแต่หนึ่งรายการขึ้นไปแทน Securables มีอยู่ที่ระดับเซิร์ฟเวอร์ สคีมา และฐานข้อมูล เป็นทรัพยากร SQL Server ที่สามารถเข้าถึงได้โดยเซิร์ฟเวอร์และการเข้าสู่ระบบของผู้ใช้ ตัวอย่างเช่น การใช้ความปลอดภัย คุณสามารถให้เซิร์ฟเวอร์เข้าถึงตารางหรือฟังก์ชันเฉพาะเท่านั้น ซึ่งเป็นระดับรายละเอียดที่ไม่สามารถทำได้ด้วยการกำหนดบทบาทให้กับการเข้าสู่ระบบ
สิทธิ์ถูกใช้เพื่อให้สิทธิ์การเข้าถึงความปลอดภัย SQL Server คุณอาจให้สิทธิ์ในการดูข้อมูลหรือเพียงแก้ไขข้อมูล คำสั่ง GRANT, DENY และ REVOKE T-SQL ใช้สำหรับการกำหนดค่าสิทธิ์
อย่างไรก็ตาม การอนุญาตอาจมีความซับซ้อน ตัวอย่างเช่น การตั้งค่าสิทธิ์ DENY บน Secureable จะป้องกันการสืบทอดสิทธิ์บนออบเจ็กต์ระดับล่าง แต่สิทธิ์ GRANT ระดับคอลัมน์จะแทนที่ DENY ในระดับออบเจ็กต์ ดังนั้นสิทธิ์ DENY ที่ตั้งค่าไว้ในตารางจึงถูกแทนที่โดยสิทธิ์ GRANT ในคอลัมน์ เนื่องจากการอนุญาตอาจซับซ้อน จึงควรตรวจสอบสิทธิ์ที่มีประสิทธิภาพโดยใช้ T-SQL เสมอ คำสั่งต่อไปนี้กำหนดสิทธิ์ของ JoeB ที่ได้รับบนอ็อบเจ็กต์ ในกรณีนี้คือตารางที่เรียกว่า "พนักงาน"
SELECT * FROM fn_my_permissions('joeb' พนักงาน);
ไป
5. การเข้ารหัสข้อมูล
SQL Server รองรับตัวเลือกการเข้ารหัสที่หลากหลาย:
- Secure Sockets Layer (SSL) เข้ารหัสการรับส่งข้อมูลขณะเดินทางระหว่างอินสแตนซ์เซิร์ฟเวอร์และแอปพลิเคชันไคลเอ็นต์ เหมือนกับการรับส่งข้อมูลทางอินเทอร์เน็ตที่ปลอดภัยระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ นอกจากนี้ ไคลเอนต์สามารถตรวจสอบข้อมูลประจำตัวของเซิร์ฟเวอร์โดยใช้ใบรับรองของเซิร์ฟเวอร์
- การเข้ารหัสข้อมูลแบบโปร่งใส (TDE) เข้ารหัสข้อมูลบนดิสก์ โดยเฉพาะอย่างยิ่งมันเข้ารหัสข้อมูลและไฟล์บันทึกทั้งหมด แอปพลิเคชันไคลเอ็นต์ไม่จำเป็นต้องเปลี่ยนแปลงเมื่อเปิดใช้งาน TDE
- การเข้ารหัสข้อมูลสำรอง คล้ายกับ TDE แต่จะเข้ารหัสข้อมูลสำรอง SQL แทนข้อมูลและไฟล์บันทึกที่ใช้งานอยู่
- การเข้ารหัสคอลัมน์/ระดับเซลล์ ทำให้แน่ใจว่าข้อมูลเฉพาะได้รับการเข้ารหัสในฐานข้อมูล และยังคงอยู่แม้ว่าจะเก็บไว้ในหน่วยความจำก็ตาม ข้อมูลถูกถอดรหัสโดยใช้ฟังก์ชันและจำเป็นต้องเปลี่ยนแปลงแอปพลิเคชันไคลเอนต์
- เข้ารหัสเสมอเป็นการปรับปรุงการเข้ารหัสคอลัมน์/ระดับเซลล์ โดยไม่จำเป็นต้องมีการเปลี่ยนแปลงใดๆ ในแอปพลิเคชันไคลเอนต์ ข้อมูลจะถูกเข้ารหัสผ่านเครือข่าย ในหน่วยความจำ และบนดิสก์ นอกจากนี้ยังปกป้องข้อมูลที่ละเอียดอ่อนจากการสอดรู้สอดเห็นของผู้ใช้ SQL Server ที่มีสิทธิ์ แต่คุณอาจประสบปัญหาบางอย่างกับตัวเลือกการเข้ารหัสนี้ — เนื่องจาก SQL Server ไม่สามารถอ่านข้อมูลได้ การทำดัชนีและฟังก์ชันบางอย่างจึงไม่ทำงาน
6. การรักษาความปลอดภัยระดับแถว
Row-Level Security (RLS) ช่วยให้องค์กรสามารถควบคุมผู้ที่สามารถดูแถวในฐานข้อมูลได้ ตัวอย่างเช่น คุณสามารถจำกัดให้ผู้ใช้ดูเฉพาะแถวที่มีข้อมูลเกี่ยวกับลูกค้าของตนได้
RLS ประกอบด้วยสามส่วนหลัก: ฟังก์ชันเพรดิเคต, เพรดิเคตความปลอดภัย และนโยบายความปลอดภัย ฟังก์ชันเพรดิเคตจะตรวจสอบว่าผู้ใช้ที่ดำเนินการค้นหาฐานข้อมูลสามารถเข้าถึงแถวตามตรรกะหรือไม่ ตัวอย่างเช่น คุณสามารถตรวจสอบว่าชื่อผู้ใช้ที่เรียกใช้การค้นหาตรงกับช่องในคอลัมน์ใดคอลัมน์หนึ่งของแถวหรือไม่ ฟังก์ชันเพรดิเคตและเพรดิเคตการรักษาความปลอดภัยถูกกำหนดไว้ด้วยกันในฟังก์ชันเพื่อกรองผลลัพธ์ของการสืบค้นโดยไม่ทำให้เกิดข้อผิดพลาดหรือบล็อกด้วยข้อผิดพลาดหากการเข้าถึงแถวถูกปฏิเสธ ในที่สุด นโยบายความปลอดภัยจะผูกฟังก์ชันเข้ากับตาราง