ปกป้องข้อมูลด้วยการเข้ารหัส

เสร็จสมบูรณ์เมื่อ

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

การทําความเข้าใจว่าเมื่อใดควรใช้แต่ละวิธีจะช่วยให้คุณสร้างสมดุลระหว่างการป้องกันกับประสิทธิภาพ มาสํารวจเทคโนโลยีการเข้ารหัสลับที่มีอยู่ในฐานข้อมูล SQL Server, Azure SQL และ SQL ใน Microsoft Fabric กัน

ทําความเข้าใจเลเยอร์การเข้ารหัส

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

ไดอะแกรมเปรียบเทียบเลเยอร์การเข้ารหัสสามชั้น: 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 จะเปิดใช้งานตามค่าเริ่มต้นและจัดการโดยอัตโนมัติ มุ่งเน้นการตัดสินใจออกแบบการเข้ารหัสของคุณไปที่การป้องกันระดับคอลัมน์โดยใช้การเข้ารหัสเสมอหรือการเข้ารหัสคีย์แบบสมมาตรตามความต้องการของแอปพลิเคชัน