ปกป้องข้อมูลด้วยการเข้ารหัส
การเข้ารหัสข้อมูลเป็นรากฐานของการรักษาความปลอดภัยฐานข้อมูล แม้ว่าผู้โจมตีจะสามารถเข้าถึงที่เก็บข้อมูลพื้นฐานของคุณได้ แต่การเข้ารหัสจะทําให้ข้อมูลที่ละเอียดอ่อนของคุณไม่สามารถอ่านได้ แพลตฟอร์ม SQL ของ Microsoft มีตัวเลือกการเข้ารหัสที่หลากหลาย ตั้งแต่การปกป้องข้อมูลที่ไม่ได้ใช้งานไปจนถึงการรักษาความปลอดภัยข้อมูลในขณะที่กําลังประมวลผล
การทําความเข้าใจว่าเมื่อใดควรใช้แต่ละวิธีจะช่วยให้คุณสร้างสมดุลระหว่างการป้องกันกับประสิทธิภาพ มาสํารวจเทคโนโลยีการเข้ารหัสลับที่มีอยู่ในฐานข้อมูล SQL Server, Azure SQL และ SQL ใน Microsoft Fabric กัน
ทําความเข้าใจเลเยอร์การเข้ารหัส
การเข้ารหัสฐานข้อมูลทํางานในเลเยอร์ต่างๆ โดยแต่ละเลเยอร์จะแก้ปัญหาเฉพาะ การเข้ารหัสลับข้อมูลแบบโปร่งใส (TDE) จะเข้ารหัสลับข้อมูลที่ไม่ได้ใช้งาน โดยคิดว่าเป็นการปกป้องไฟล์ฐานข้อมูลของคุณบนดิสก์ การเข้ารหัสระดับคอลัมน์ กําหนดเป้าหมายคอลัมน์ที่ละเอียดอ่อนเฉพาะ ในขณะที่ การเข้ารหัสลับเสมอ จะก้าวไปไกลกว่านั้นด้วยการปกป้องข้อมูลตลอดวงจรชีวิต
เมื่อคุณเปิดใช้งาน TDE SQL Server จะเข้ารหัสลับแฟ้มฐานข้อมูล บันทึกธุรกรรม และการสํารองข้อมูลโดยอัตโนมัติ แอปพลิเคชันของคุณไม่จําเป็นต้องเปลี่ยนแปลงโค้ดใดๆ การเข้ารหัสจะเกิดขึ้นอย่างโปร่งใสเบื้องหลัง TDE ใช้คีย์การเข้ารหัสลับฐานข้อมูลที่ป้องกันโดยใบรับรองที่เก็บไว้ใน master ฐานข้อมูล
การเข้ารหัสลับระดับคอลัมน์ทํางานแตกต่างกัน คุณเข้ารหัสและถอดรหัสข้อมูลในโค้ด T-SQL หรือแอปพลิเคชันของคุณอย่างชัดเจน ซึ่งช่วยให้คุณควบคุมได้อย่างละเอียดว่าคอลัมน์ใดมีข้อมูลที่ละเอียดอ่อนและใครสามารถถอดรหัสได้
การเข้ารหัสเสมอใช้อีกแนวทางหนึ่งโดยเก็บคีย์การเข้ารหัสไว้นอกกลไกฐานข้อมูลทั้งหมด ฐานข้อมูลจะไม่เห็นข้อมูลข้อความธรรมดาของคุณ ซึ่งหมายความว่าแม้แต่ผู้ดูแลระบบฐานข้อมูลที่มีการเข้าถึงระดับสูงก็ไม่สามารถดูข้อมูลที่ได้รับการป้องกันได้
กําหนดค่า Always Encrypted
การเข้ารหัสเสมอช่วยให้มั่นใจได้ว่ากลไกฐานข้อมูลจะไม่ประมวลผลค่าข้อความธรรมดา แอปพลิเคชันไคลเอ็นต์ของคุณมีคีย์การเข้ารหัสและจัดการการเข้ารหัสและการถอดรหัสทั้งหมด การแยกนี้หมายความว่าแม้แต่ผู้ที่มีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบในฐานข้อมูลก็ไม่สามารถดูข้อมูลที่ได้รับการป้องกันได้
ในการเริ่มต้นใช้งานการเข้ารหัสเสมอ ก่อนอื่นคุณต้องสร้างคีย์หลักคอลัมน์ (CMK) ที่ปกป้องคีย์การเข้ารหัสคอลัมน์ของคุณ จัดเก็บ CMK ใน ที่เก็บคีย์ ที่ปลอดภัย เช่น Azure Key Vault, Windows Certificate Store หรือโมดูลความปลอดภัยของฮาร์ดแวร์
คําสั่ง T-SQL ต่อไปนี้จะสร้างรายการเมตาดาต้าที่ชี้ไปยังคีย์ของคุณใน Azure Key Vault เนื้อหาที่สําคัญจริงยังคงอยู่ในห้องนิรภัย โดยไม่เคยเก็บไว้ในฐานข้อมูล
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'AZURE_KEY_VAULT',
KEY_PATH = 'https://mykeyvault.vault.azure.net/keys/MyCMK/abc123'
);
จากนั้น ให้สร้างคีย์การเข้ารหัสลับคอลัมน์ (CEK) ที่ป้องกันโดยคีย์หลักของคอลัมน์:
CREATE COLUMN ENCRYPTION KEY MyCEK
WITH VALUES (
COLUMN_MASTER_KEY = MyCMK,
ALGORITHM = 'RSA_OAEP',
ENCRYPTED_VALUE = 0x01700000016C006F00...
);
โปรดสังเกตว่า CEK นั้นถูกเก็บไว้ในรูปแบบที่เข้ารหัส เมื่อแอปพลิเคชันของคุณจําเป็นต้องทํางานกับข้อมูลที่เข้ารหัส แอปพลิเคชันจะดึงค่านี้และใช้ CMK เพื่อถอดรหัสภายในเครื่อง
เมื่อสร้างหรือเปลี่ยนแปลงตาราง คุณระบุชนิดการเข้ารหัสลับสําหรับคอลัมน์ที่ละเอียดอ่อน:
CREATE TABLE Employees (
EmployeeID int PRIMARY KEY,
SSN char(11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = MyCEK
),
Salary money
ENCRYPTED WITH (
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
COLUMN_ENCRYPTION_KEY = MyCEK
)
);
คุณมีการเข้ารหัสสองประเภทให้เลือก ใช้การกําหนด เมื่อคุณ ต้องการทําการเปรียบเทียบความเท่าเทียมกัน รวม หรือกรองด้วย WHERE อนุประโยค ข้อความธรรมดาเดียวกันจะสร้างข้อความเข้ารหัสเดียวกันเสมอ ใช้ แบบสุ่ม เพื่อความปลอดภัยที่แข็งแกร่งขึ้นเมื่อคุณไม่ต้องการการดําเนินการคิวรีเหล่านั้น
ใช้การเข้ารหัสระดับคอลัมน์
การเข้ารหัสระดับคอลัมน์โดยใช้ฟังก์ชัน T-SQL ช่วยให้คุณมีทางเลือกเมื่อคุณต้องการควบคุมกระบวนการเข้ารหัสได้มากขึ้น หรือเมื่อการเข้ารหัสลับเสมอไม่เหมาะสม ด้วยวิธีนี้ คุณจะจัดการคีย์สมมาตรหรืออสมมาตรที่จัดเก็บไว้ในฐานข้อมูล
เริ่มต้นด้วยการสร้างคีย์หลักและใบรับรองฐานข้อมูล:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';
CREATE CERTIFICATE SensitiveDataCert
WITH SUBJECT = 'Certificate for sensitive data encryption';
สร้างคีย์สมมาตรที่ป้องกันโดยใบรับรอง:
CREATE SYMMETRIC KEY SensitiveDataKey
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE SensitiveDataCert;
หากต้องการเข้ารหัสข้อมูล ให้เปิดคีย์สมมาตรและใช้ฟังก์ชัน:ENCRYPTBYKEY
OPEN SYMMETRIC KEY SensitiveDataKey
DECRYPTION BY CERTIFICATE SensitiveDataCert;
INSERT INTO CustomerData (CustomerID, CreditCardNumber)
VALUES (1, ENCRYPTBYKEY(KEY_GUID('SensitiveDataKey'), '4111-1111-1111-1111'));
CLOSE SYMMETRIC KEY SensitiveDataKey;
การถอดรหัสเป็นไปตามรูปแบบที่คล้ายกันโดยใช้ DECRYPTBYKEY:
OPEN SYMMETRIC KEY SensitiveDataKey
DECRYPTION BY CERTIFICATE SensitiveDataCert;
SELECT CustomerID,
CONVERT(varchar(20), DECRYPTBYKEY(CreditCardNumber)) AS CardNumber
FROM CustomerData;
CLOSE SYMMETRIC KEY SensitiveDataKey;
ใช่ วิธีนี้ต้องทํางานมากขึ้น คุณกําลังจัดการคีย์อย่างชัดเจนในโค้ดของคุณ แต่ความซับซ้อนนั้นมาพร้อมกับความยืดหยุ่น คุณสามารถให้หรือปฏิเสธสิทธิ์สําหรับคีย์สมมาตร ซึ่งช่วยให้คุณควบคุมได้อย่างแม่นยําว่าใครสามารถถอดรหัสข้อมูลของคุณได้
เลือกแนวทางการเข้ารหัสที่เหมาะสม
คุณควรใช้วิธีการเข้ารหัสแบบใด ขึ้นอยู่กับข้อกําหนดด้านความปลอดภัยและข้อจํากัดของแอปพลิเคชัน
TDE เป็นตัวเลือกที่ดีที่สุดของคุณเมื่อคุณต้องการปกป้องข้อมูลที่ไม่ได้ใช้งานโดยไม่ต้องแตะโค้ดแอปพลิเคชันของคุณ เหมาะอย่างยิ่งสําหรับข้อกําหนดการปฏิบัติตามข้อกําหนดที่กําหนดให้มีการเข้ารหัสไฟล์ฐานข้อมูลและการสํารองข้อมูล อย่างไรก็ตาม โปรดทราบว่า TDE ไม่ได้ปกป้องข้อมูลจากผู้ใช้ที่สามารถเชื่อมต่อกับฐานข้อมูลด้วยสิทธิ์ที่ถูกต้อง
การเข้ารหัสลับเสมอ จะส่องสว่างเมื่อคุณต้องการปกป้องข้อมูลจากผู้ดูแลระบบฐานข้อมูล หรือเมื่อข้อมูลที่ละเอียดอ่อนต้องเข้ารหัสอยู่เสมอแม้ในระหว่างการประมวลผลการสืบค้น การแลกเปลี่ยน? คุณต้องการการสนับสนุนไดรเวอร์ไคลเอ็นต์ และคุณถูกจํากัดในการดําเนินการที่คุณสามารถทําได้บนคอลัมน์ที่เข้ารหัส
การเข้ารหัสระดับคอลัมน์ ทํางานได้ดีเมื่อคุณต้องการควบคุมการเข้ารหัสและการถอดรหัสอย่างละเอียด หรือเมื่อคุณต้องการเข้ารหัสคอลัมน์เฉพาะโดยไม่มีค่าใช้จ่ายโครงสร้างพื้นฐานของการเข้ารหัสเสมอ ต้องใช้ความพยายามในการพัฒนามากขึ้น แต่คุณจะได้รับความยืดหยุ่นสูงสุดในการจัดการคีย์
เคล็ดลับ
คุณสามารถรวมวิธีการเข้ารหัสได้ ตัวอย่างเช่น เปิดใช้งาน TDE สําหรับการปกป้องข้อมูลพื้นฐานที่ไม่ได้ใช้งาน จากนั้นเพิ่ม เข้ารหัสเสมอ สําหรับคอลัมน์ที่ละเอียดอ่อนที่สุดของคุณ
สําหรับฐานข้อมูล SQL ใน Microsoft Fabric TDE จะเปิดใช้งานตามค่าเริ่มต้นและจัดการโดยอัตโนมัติ มุ่งเน้นการตัดสินใจออกแบบการเข้ารหัสของคุณไปที่การป้องกันระดับคอลัมน์โดยใช้การเข้ารหัสเสมอหรือการเข้ารหัสคีย์แบบสมมาตรตามความต้องการของแอปพลิเคชัน