อธิบายการเข้ารหัสเซิร์ฟเวอร์ SQL: TDE, การเข้ารหัสระดับคอลัมน์และอื่น ๆ
การปกป้องข้อมูลเป็นสิ่งสำคัญในการรับรองว่าองค์กรของคุณปฏิบัติตามมาตรฐานการปฏิบัติตามกฎระเบียบ เช่น GDPR และเพื่อตอบสนองความคาดหวังของลูกค้าและคู่ค้าทางธุรกิจของคุณ การละเมิดข้อมูลไม่เพียงแต่ส่งผลให้ต้องเสียค่าปรับจำนวนมากเท่านั้น แต่ความเสียหายต่อชื่อเสียงก็อาจส่งผลใหญ่เช่นกัน เพื่อช่วยเหลือ Microsoft SQL Server รองรับการเข้ารหัส 5 ประเภทที่แตกต่างกันเพื่อปกป้องข้อมูล บทความนี้จะอธิบายแต่ละส่วนและตำแหน่งที่ควรใช้
การเข้ารหัสการขนส่ง SSL
เช่นเดียวกับเว็บไซต์ที่รักษาความปลอดภัยการรับส่งข้อมูลระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ SQL Server สามารถกำหนดค่าให้ใช้ Secure Sockets Layer (SSL) เพื่อเข้ารหัสการรับส่งข้อมูลขณะเดินทางระหว่างอินสแตนซ์เซิร์ฟเวอร์และแอปพลิเคชันไคลเอนต์ นอกจากนี้ ไคลเอนต์สามารถตรวจสอบข้อมูลประจำตัวของเซิร์ฟเวอร์โดยใช้ใบรับรองของเซิร์ฟเวอร์ SSL ปกป้องข้อมูลในขณะที่มันเดินทางข้ามเครือข่ายเท่านั้น แต่ไม่เหมือนกับรูปแบบอื่นๆ ของการเข้ารหัส SQL Server ส่วนใหญ่ SSL มีให้ใช้งานใน SQL Server เวอร์ชันที่รองรับทั้งหมดและในทุกรุ่น
ก่อนที่จะเปิดใช้งาน SSL คุณจะต้องติดตั้งใบรับรองบน SQL Server วิธีที่ดีที่สุดในการทำเช่นนี้คือการขอใบรับรองจากหน่วยงานออกใบรับรององค์กร (CA) ของคุณเอง คุณสามารถกำหนดค่า Windows Server เป็น CA และคุณสามารถตั้งค่าไคลเอนต์เพื่อให้เชื่อถือใบรับรองที่ออกได้ หรือคุณสามารถใช้ใบรับรองที่ลงนามเองได้ แม้ว่าจะเหมาะที่สุดกับสภาพแวดล้อมการทดสอบก็ตาม
การเข้ารหัสข้อมูลแบบโปร่งใสของเซิร์ฟเวอร์ SQL (TDE)
Transparent Data Encryption (TDE) ใน SQL Server ปกป้องข้อมูลที่เหลือโดยการเข้ารหัสข้อมูลฐานข้อมูลและไฟล์บันทึกบนดิสก์ โดยทำงานอย่างโปร่งใสกับแอปพลิเคชันที่มีอยู่ของไคลเอ็นต์ ดังนั้นจึงไม่จำเป็นต้องเปลี่ยนแปลงเมื่อเปิดใช้งาน TDE TDE ใช้การเข้ารหัสแบบเรียลไทม์ในระดับเพจ หน้าจะถูกเข้ารหัสก่อนที่จะเขียนลงดิสก์ โดยไม่เพิ่มขนาดของข้อมูลและไฟล์บันทึกของคุณ และหน้าต่างๆ จะถูกถอดรหัสเมื่ออ่านลงในหน่วยความจำ TDE มีเฉพาะใน SQL Server รุ่น Enterprise เท่านั้น นอกจากนี้ยังใช้งานได้กับฐานข้อมูล Azure SQL, คลังข้อมูล Azure SQL และคลังข้อมูลแบบขนาน
การเข้ารหัส TDE มีโครงสร้างแบบลำดับชั้น โดยมี Windows Data Protection API (DPAPI) อยู่เหนือลำดับชั้นและใช้ในการเข้ารหัสคีย์หลักบริการ (SMK) คุณสามารถใช้ SMK เพื่อเข้ารหัสข้อมูลประจำตัว รหัสผ่านเซิร์ฟเวอร์ที่เชื่อมโยง และคีย์หลักฐานข้อมูล (DMK) ที่อยู่ในฐานข้อมูลที่แตกต่างกัน SQL DMK เป็นคีย์แบบสมมาตรที่ปกป้องคีย์ส่วนตัวของใบรับรองและคีย์แบบอสมมาตรที่จัดเก็บไว้ในฐานข้อมูล
SQL Server สามารถสร้างใบรับรองที่ลงนามด้วยตนเองเพื่อใช้กับ TDE หรือคุณสามารถขอใบรับรองจาก CA (ซึ่งเป็นแนวทางทั่วไป) หากคุณตัดสินใจเปิดใช้งาน TDE คุณต้องสำรองข้อมูลใบรับรองและคีย์ส่วนตัวที่เกี่ยวข้องกับใบรับรอง คุณจะต้องกู้คืนหรือแนบฐานข้อมูลบน SQL Server อื่น ถ้าคุณเปิดใช้งาน TDE บนฐานข้อมูล SQL Server อื่น ๆ ฐานข้อมูลระบบ tempdb จะถูกเข้ารหัสด้วย หากคุณปิดใช้งาน TDE คุณควรเก็บใบรับรองและคีย์ส่วนตัวไว้ เนื่องจากบางส่วนของบันทึกธุรกรรมอาจยังคงถูกเข้ารหัสจนกว่าคุณจะทำการสำรองข้อมูลทั้งหมด
TDE ยังต้องใช้คีย์การเข้ารหัสฐานข้อมูล (DEK) ซึ่งเป็นคีย์สมมาตรที่ได้รับการป้องกันโดยใช้ใบรับรองที่จัดเก็บไว้ในฐานข้อมูลหลัก หรือคีย์แบบไม่สมมาตรที่ได้รับการป้องกันโดยบริการที่ใช้ Extensible Key Management (EKM) เช่น Microsoft Azure คีย์ห้องนิรภัย ไฟล์สำรองของฐานข้อมูลที่เปิดใช้งาน TDE จะถูกเข้ารหัสโดยใช้ DEK ดังนั้นในระหว่างการดำเนินการกู้คืน ใบรับรองที่ปกป้อง DEK จะต้องพร้อมใช้งาน
คีย์สมมาตรใช้รหัสผ่านเดียวกันในการเข้ารหัสและถอดรหัสข้อมูล คีย์แบบอสมมาตรใช้รหัสผ่านเดียวเพื่อเข้ารหัสข้อมูล (คีย์สาธารณะ) และรหัสผ่านอื่นเพื่อถอดรหัสข้อมูล (คีย์ส่วนตัว) คุณสามารถใช้คำสั่ง CREATE CERTIFICATE เพื่อสร้างใบรับรอง และใช้คำสั่ง CREATE SYMMETRIC KEY และ CREATE ASYMMETRIC KEY Transact-SQL เพื่อสร้างคีย์การเข้ารหัสฐานข้อมูล
การเข้ารหัสสำรอง
การเข้ารหัสข้อมูลสำรองทำงานเหมือนกับ TDE แต่จะเข้ารหัสการสำรองข้อมูล SQL แทนข้อมูลและไฟล์บันทึกที่ใช้งานอยู่ การเข้ารหัสลับสำรองพร้อมใช้งานใน SQL Server 2014 และใหม่กว่า คุณสามารถระบุการเข้ารหัส AES 128, AES 192, AES 256 หรือ Triple DES และใช้ใบรับรองหรือคีย์แบบอสมมาตรที่จัดเก็บไว้ใน EKM นอกจากนี้ ยังสามารถเปิดใช้งาน TDE และการสำรองข้อมูลการเข้ารหัสพร้อมกันได้ แม้ว่าคุณจะควรใช้ใบรับรองหรือคีย์ที่แตกต่างกันก็ตาม
เช่นเดียวกับ TDE หากคุณเปิดใช้งานการเข้ารหัสลับการสำรองข้อมูล คุณต้องสำรองข้อมูลใบรับรองหรือคีย์ด้วย หากไม่มีคีย์หรือใบรับรอง คุณจะใช้ไฟล์สำรองเพื่อกู้คืนข้อมูลไม่ได้ การสำรองข้อมูลยังสามารถเข้ารหัสได้เมื่อใช้ SQL Server Managed Backup กับ Microsoft Azure
เป็นที่น่าสังเกตว่าหากคุณใช้ใบรับรองเพื่อเข้ารหัสการสำรองข้อมูล คุณจะต้องมีใบรับรองเดิมเมื่อกู้คืนข้อมูล นั่นหมายความว่าใบรับรองจะต้องมีรหัสประจำตัวเดียวกันกับเมื่อสร้างการสำรองข้อมูล การต่ออายุใบรับรองหรือการเปลี่ยนแปลงไม่ว่าด้วยวิธีใดอาจทำให้รหัสประจำตัวเปลี่ยนแปลงได้
การเข้ารหัสระดับคอลัมน์/เซลล์
มีอยู่ใน SQL Server ทุกรุ่น โดยสามารถเปิดใช้งานการเข้ารหัสระดับเซลล์ในคอลัมน์ที่มีข้อมูลที่ละเอียดอ่อนได้ ข้อมูลถูกเข้ารหัสบนดิสก์และยังคงเข้ารหัสไว้ในหน่วยความจำจนกว่าจะใช้ฟังก์ชัน DECRYPTBYKEY เพื่อถอดรหัส ดังนั้น แม้ว่าข้อมูล SQL จะถูกเข้ารหัส แต่ก็ไม่ปลอดภัยนอกจากการใช้ฟังก์ชันในบริบทของผู้ใช้เพื่อถอดรหัสเท่านั้น นอกจากนี้ เนื่องจากจำเป็นต้องมีฟังก์ชันในการถอดรหัสข้อมูล แอปพลิเคชันไคลเอนต์จึงต้องได้รับการแก้ไขให้ทำงานกับการเข้ารหัสระดับเซลล์ได้
การจัดการคีย์การเข้ารหัส
เช่นเดียวกับ TDE คุณต้องสร้างคีย์หลัก (DMK) ก่อนที่จะใช้การเข้ารหัสระดับเซลล์ มีสี่ตัวเลือกสำหรับการเข้ารหัสข้อมูลโดยใช้การเข้ารหัสระดับเซลล์:
- คุณสามารถใช้ข้อความรหัสผ่านเพื่อเข้ารหัสและถอดรหัสข้อมูลได้ แต่คุณต้องเข้ารหัสขั้นตอนและฟังก์ชันที่เก็บไว้ มิฉะนั้นจะสามารถเข้าถึงข้อความรหัสผ่านได้ในข้อมูลเมตา
- ปุ่มแบบอสมมาตรให้ความปลอดภัยสูง แต่อาจส่งผลต่อประสิทธิภาพได้
- คีย์แบบสมมาตรมักจะแข็งแกร่งเพียงพอและให้ความสมดุลที่ดีระหว่างความปลอดภัยและประสิทธิภาพ
- ใบรับรองยังให้ความสมดุลที่ดีระหว่างความปลอดภัยและประสิทธิภาพ และสามารถเชื่อมโยงกับผู้ใช้ฐานข้อมูลได้
เข้ารหัสอยู่เสมอ
Always Encrypted เข้ารหัสข้อมูลที่ละเอียดอ่อนในแอปพลิเคชันไคลเอนต์โดยไม่เปิดเผยคีย์การเข้ารหัสแก่กลไกฐานข้อมูล ทำให้มีการแบ่งแยกระหว่างเจ้าของข้อมูลและผู้จัดการข้อมูล ตัวอย่างเช่น เมื่อเปิดใช้งานการเข้ารหัสตลอดเวลา คุณจะมั่นใจได้ว่าผู้ดูแลระบบฐานข้อมูลของคุณจะไม่สามารถอ่านข้อมูลที่ละเอียดอ่อนได้ ตามชื่อที่แนะนำ ข้อมูลจะถูกเข้ารหัสเมื่อไม่ได้ใช้งานและหากใช้ในระบบของบุคคลที่สาม เช่น Azure
สามารถกำหนดค่าการเข้ารหัสลับเสมอสำหรับแต่ละคอลัมน์ฐานข้อมูลได้ มีการใช้คีย์สองประเภท: คีย์การเข้ารหัสคอลัมน์และคีย์หลักของคอลัมน์ คีย์การเข้ารหัสคอลัมน์ปกป้องข้อมูลในคอลัมน์และคีย์หลักของคอลัมน์คือ 'คีย์ป้องกันคีย์' ที่เข้ารหัสคีย์เข้ารหัสคอลัมน์ตั้งแต่หนึ่งคีย์ขึ้นไป คีย์หลักของคอลัมน์จะถูกจัดเก็บไว้ในที่เก็บคีย์ที่เชื่อถือได้ภายนอก เช่น Azure Key Vault
กระบวนการเข้ารหัสมีความโปร่งใสสำหรับแอปพลิเคชันไคลเอนต์ แต่ต้องใช้ไดรเวอร์พิเศษบนคอมพิวเตอร์ไคลเอนต์ เข้ารหัสลับเสมอพร้อมใช้งานใน SQL Server 2016 และใหม่กว่า แต่เฉพาะในรุ่น Enterprise เท่านั้น เนื่องจากข้อกำหนดฝั่งไคลเอ็นต์เพิ่มเติม Always Encrypted จึงเหมาะที่สุดกับสถานการณ์ที่การแยกเจ้าของข้อมูลและผู้จัดการเป็นข้อกำหนดหลัก