הגנה על נתונים באמצעות הצפנה
הצפנת נתונים מהווה את הבסיס לאבטחת מסדי הנתונים. גם אם התוקפים מקבלים גישה לאחסון הבסיסי שלך, ההצפנה שומרת על המידע הרגיש שלך בלתי קריא. פלטפורמות ה-SQL של מיקרוסופט מציעות אפשרויות הצפנה מרובות, החל מהגנה על נתונים במנוחה ועד לאבטחת נתונים בזמן עיבודם.
הבנת מתי להשתמש בכל שיטה עוזרת לך לאזן בין הגנה לביצועים. בואו נחקור את טכנולוגיות ההצפנה הזמינות ב-SQL Server, Azure SQL ומסדי נתונים SQL ב-Microsoft Fabric.
הבנת שכבות הצפנה
הצפנת מסדי נתונים פועלת בשכבות שונות, שכל אחת מהן פותרת בעיה ספציפית. הצפנת נתונים שקופה (TDE) מצפינה נתונים במנוחה — תחשבו על זה כהגנה על קבצי מסד הנתונים שלכם על הדיסק. הצפנה ברמת עמודה מכוונת לעמודות רגישות ספציפיות, בעוד שתמיד מוצפן ממשיך בכך שהיא מגנה על נתונים לאורך כל מחזור החיים, אפילו במהלך עיבוד שאילתות.
כשאתה מפעיל את TDE, SQL Server מצפין אוטומטית קבצי מסדי נתונים, יומני עסקאות וגיבויים. היישומים שלך לא צריכים שינויים בקוד — ההצפנה מתבצעת בשקיפות מאחורי הקלעים. TDE משתמש במפתח הצפנה במסד נתונים המוגן על ידי תעודה המאוחסנת במסד master הנתונים.
הצפנה ברמת עמודה פועלת אחרת. אתה מצפין ומפענח נתונים במפורש בקוד או באפליקציית T-SQL שלך, מה שנותן לך שליטה מדויקת על אילו עמודות מכילות נתונים רגישים ומי יכול לפענח אותם.
Always Encrypted נוקט בגישה נוספת – שומר את מפתחות ההצפנה מחוץ למנוע מסד הנתונים לחלוטין. מסד הנתונים לעולם לא רואה את נתוני הטקסט המקורי שלך, מה שאומר שגם מנהלי מסדי נתונים עם גישה ברמה גבוהה לא יכולים לצפות במידע מוגן.
קביעת תצורה של 'מוצפן תמיד'
Always Encrypted מבטיח שמנוע מסד הנתונים לעולם לא יעבוד ערכי טקסט רגיל. אפליקציות הלקוח שלך מחזיקות את מפתחות ההצפנה ומטפלות בכל ההצפנה והפענוח. הפרדה זו משמעותה שגם מישהו עם גישה מנהלית למסד הנתונים אינו יכול לצפות בנתונים המוגנים.
כדי להתחיל עם 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 שוויון—אותו טקסט ברור תמיד מייצר את אותו טקסט מוצפן. השתמש ב-randomized לאבטחה חזקה יותר כשאתה לא צריך את פעולות השאילתות האלה.
מימוש הצפנה ברמת העמודה
הצפנה ברמת עמודה באמצעות פונקציות 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 לא מגן על נתונים ממשתמשים שיכולים להתחבר למסד הנתונים עם הרשאות נכונות.
Always Encrypted בולט כאשר צריך להגן על נתונים מפני מנהלי מסדי נתונים, או כאשר נתונים רגישים חייבים להישאר מוצפנים גם במהלך עיבוד השאילתות. הפשרה? אתה צריך תמיכה לדרייברים של הלקוח, ואתה מוגבל באילו פעולות תוכל לבצע על עמודות מוצפנות.
הצפנה ברמת עמודה עובדת טוב כשצריך שליטה מדויקת על הצפנה ופענוח, או כשאתה רוצה להצפין עמודות מסוימות בלי עומס התשתית של Always Encrypted. זה דורש יותר מאמץ פיתוח, אבל אתה מקבל גמישות מקסימלית בניהול מפתחות.
עצה
אפשר לשלב שיטות הצפנה. לדוגמה, הפעל TDE להגנה בסיסית על נתונים במנוחה, ואז הוסיף Always Encrypted עבור העמודות הרגישות ביותר שלך.
עבור מסדי נתונים SQL ב-Microsoft Fabric, TDE מופעל כברירת מחדל ומנוהל אוטומטית. התמקד בהחלטות עיצוב ההצפנה שלך בהגנה ברמת עמודה באמצעות הצפנת מפתח תמיד מוצפן או סימטרי בהתאם לדרישות היישום שלך.