บทนำ
ในบล็อกนี้ ผมได้อภิปรายขั้นตอนที่จำเป็นสำหรับการกู้คืนฐานข้อมูลและดึงข้อมูลที่เข้ารหัสเมื่อ CLE (Cell Level Encryption) ถูกนำไปใช้
ความปลอดภัยของข้อมูลเป็นหนึ่งในแง่มุมสำคัญในการจัดการฐานข้อมูล เมื่อเราเข้ารหัสข้อมูลที่ละเอียดอ่อน มีหลายวิธีในการบรรลุสิ่งนี้ใน MS SQL Server เช่น CLE, TDE, และ Always Encrypted เมื่อคุณเข้ารหัสข้อมูลภายใน cell โดยใช้ certificate หรือ keys เรื่องนี้เรียกว่า CLE (Cell Level Encryption)
ปัญหา:
- ERROR: - หนึ่งในปัญหาที่คุณอาจเห็นคือ application หรือบาง TSQL code ที่ decrypt ข้อมูล เริ่มให้ error ต่อไปนี้
- DecryptByKey function ไม่สามารถ decrypt ข้อมูลได้ จะไม่ให้ error ใดๆ แต่ functionality จะได้รับผลกระทบเนื่องจาก encryption keys หายไป
วิธีแก้
เนื่องจากเราไม่ได้เปิด database master key ดังนั้นการถอดรหัสข้อมูลจึงไม่เป็นไปได้ นอกจากนี้ DMK ไม่ได้ถูกเข้ารหัสโดย current instance service master key ดังนั้นคุณจึงเห็นปัญหานี้ เรามีหลายวิธีแก้ไข เรามาพูดถึงทีละอย่าง
Case 1 - เมื่อรู้ database master key encryption password
Step 1: - เปิด database master key โดยใช้ password และ decrypt ข้อมูล
Step 2: - คำถามหนึ่งที่คิดขึ้นคือ ความเป็นไปได้ของการเปิด key ด้วย password ในทุก session หรือคุณสามารถ hardcode ได้? คำตอบคือ ไม่ ในกรณีเช่นนี้ คุณจะ re-encrypt database master key ด้วย current instance service master key และรันคำสั่งต่อไปนี้ตามภาพถ่าย
Step 3: - ตรวจสอบว่าคุณสามารถ decrypt ข้อมูลโดยไม่ต้องเปิด key ด้วย password ได้หรือไม่ และคำตอบคือ ใช่ เพราะ key ตอนนี้ถูกเข้ารหัสโดย current service master key ด้วย
Step 4: - หากคุณต้องการเปลี่ยน database master key encryption password คุณต้องทำขั้นตอนต่อไปนี้
Case 2: เมื่อไม่รู้ database master key encryption password
ในกรณีที่คุณไม่รู้ password และ source เข้าถึงได้ ให้ใช้ step4 จาก case1 เพื่อเปลี่ยน password และปฏิบัติตาม procedure ใน step 1 มิฉะนั้น ให้ใช้ขั้นตอนต่อไปนี้เป็นทางเลือก
สิ่งนี้เป็นไปได้ก็ต่อเมื่อ instance ที่ฐานข้อมูลถูก restore ไป ไม่ได้ใช้ key อื่นใด เนื่องจากขั้นตอนที่เกี่ยวข้องคือ restoring instance service master key
ตัวอย่าง: - วิธีสำรอง instance service master key
– สำรอง service master key BACKUP SERVICE MASTER KEY TO FILE = 'C:\Shared\service_master_key.key' ENCRYPTION BY PASSWORD = 'key_P@ssw0rdGqw0956565’
Note: - ไฟล์สำรอง key เป็นข้อมูลที่ละเอียดอ่อนมากจากมุมมองความปลอดภัย จึงเพิ่ม SQL service account ใน security tab เพื่อให้ SQL server เข้าถึงไฟล์ได้ มิฉะนั้นคุณอาจได้ error ต่อไปนี้ระหว่างการ restore
Msg 15317, Level 16, State 2, Line 53
The master key file does not exist or has invalid format
Step 1: - Restore service master key ก่อน restore database
Step 2: - Restore database
Step 3: - ตรวจสอบว่าคุณสามารถ decrypt ข้อมูลโดยไม่ต้องเปิด key ด้วย password ได้หรือไม่ และคำตอบคือ ใช่ เพราะ key ใช้ service master key เดียวกัน เนื่องจากเรา restore ทั้ง instance service key และ database ที่ถูกเข้ารหัสโดยมัน
สรุป
ทุก object ใน MS SQL Server ที่ใช้สำหรับ encryption ปลอดภัยโดย Instance level Service master keys สำหรับการจัดการ encryption สำคัญที่ต้องเข้าใจว่า objects ที่เกี่ยวข้องกับ encryption ถูกเข้ารหัสเพิ่มเติมโดย passwords, Keys หรือ certificates
ทุกครั้งที่เราย้ายฐานข้อมูลพร้อม cell level data encryption เราต้อง either decrypt key และ re-encrypt พวกเขาด้วย destination instance service master key หรือ restore source instance master key
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม คุณยังสามารถเริ่มสนทนากับเราได้