แนะนําเมื่อต้องใช้ Azure SQL Database Always Encrypted
Always Encrypted เป็นคุณลักษณะที่ออกแบบมาเพื่อปกป้องข้อมูลที่ละเอียดอ่อน เช่น หมายเลขบัตรเครดิตหรือหมายเลขประจําตัวแห่งชาติ/ภูมิภาค (ตัวอย่างเช่น หมายเลขประกันสังคมของสหรัฐอเมริกา) จัดเก็บไว้ในฐานข้อมูล Azure SQL, อินสแตนซ์ที่จัดการโดย Azure SQL และฐานข้อมูล SQL Server Always Encrypted อนุญาตให้ไคลเอ็นต์เข้ารหัสข้อมูลที่ละเอียดอ่อนภายในแอปพลิเคชันไคลเอ็นต์ และไม่เคยแสดงคีย์การเข้ารหัสลับไปยังกลไกจัดการฐานข้อมูล การเข้ารหัสลับเสมอให้การแยกระหว่างผู้ที่เป็นเจ้าของข้อมูลและสามารถดูข้อมูลได้ และผู้ที่จัดการข้อมูล แต่ไม่ควรมีสิทธิ์เข้าถึง - ผู้ดูแลระบบฐานข้อมูลภายในองค์กร ผู้ดําเนินการฐานข้อมูลระบบคลาวด์ หรือผู้ใช้ที่ไม่ได้รับอนุญาตที่มีสิทธิ์สูงอื่นๆ ด้วยเหตุนี้ Always Encrypted จึงช่วยให้ลูกค้าสามารถจัดเก็บข้อมูลที่ละเอียดอ่อนของตนในระบบคลาวด์ได้อย่างมั่นใจและลดโอกาสการโจรกรรมข้อมูลโดยผู้ภายในที่เป็นอันตราย
Always Encrypted สามารถกําหนดค่าให้สนับสนุนคิวรีที่เป็นความลับแบบจํากัดในข้อมูลที่เข้ารหัสลับ คิวรีที่เกี่ยวข้องกับการเปรียบเทียบความเท่ากัน ตัวอย่างเช่น ชี้การค้นหาการค้นหาหรือการรวมความเท่ากัน การสืบค้นดังกล่าวใช้การเข้ารหัสแบบกําหนด
โน้ต
Secure Enclaves ขยายความสามารถในการประมวลผลที่เป็นความลับของ Always Encrypted ด้วยการจับคู่รูปแบบ ตัวดําเนินการเปรียบเทียบอื่นๆ และการเข้ารหัสแบบแทนที่
Always Encrypted ทําให้การเข้ารหัสโปร่งใสสําหรับแอปพลิเคชัน ไดรเวอร์ที่เปิดใช้งานการเข้ารหัสลับเสมอที่ติดตั้งบนคอมพิวเตอร์ไคลเอ็นต์จะเข้ารหัสและถอดรหัสข้อมูลที่ละเอียดอ่อนในแอปพลิเคชันไคลเอ็นต์โดยอัตโนมัติ โปรแกรมควบคุมจะเข้ารหัสข้อมูลในคอลัมน์ที่ละเอียดอ่อนก่อนที่จะส่งข้อมูลไปยังกลไกจัดการฐานข้อมูล จากนั้นไดรเวอร์จะเขียนแบบสอบถามใหม่โดยอัตโนมัติเพื่อให้ความหมายของโปรแกรมประยุกต์ถูกเก็บรักษาไว้ ในทํานองเดียวกัน โปรแกรมควบคุมจะถอดรหัสข้อมูลอย่างโปร่งใส ซึ่งจัดเก็บไว้ในคอลัมน์ฐานข้อมูลที่เข้ารหัสลับซึ่งอยู่ในผลลัพธ์คิวรี
กําหนดค่า Always Encrypted
เมื่อต้องการตั้งค่า Always Encrypted ในฐานข้อมูลของคุณ คุณจําเป็นต้อง:
ปรับใช้คีย์การเข้ารหัสเพื่อปกป้องข้อมูลของคุณ Always Encrypted ใช้คีย์สองชนิด:
- คีย์การเข้ารหัสลับคอลัมน์
- คีย์หลักของคอลัมน์
คีย์การเข้ารหัสลับคอลัมน์ถูกใช้เพื่อเข้ารหัสลับข้อมูลในคอลัมน์ที่เข้ารหัสลับ คีย์หลักของคอลัมน์คือคีย์ป้องกันคีย์ที่เข้ารหัสลับคีย์การเข้ารหัสลับของคอลัมน์อย่างน้อยหนึ่งรายการ คุณต้องเก็บคีย์หลักของคอลัมน์ไว้ในที่เก็บคีย์ที่เชื่อถือได้ภายนอกระบบฐานข้อมูล ตําแหน่งที่เก็บข้อมูลที่พบบ่อยที่สุดคือ Azure Key Vault, ที่เก็บใบรับรอง Windows หรือโมดูลความปลอดภัยของฮาร์ดแวร์ จากนั้น คุณต้องปรับใช้คีย์การเข้ารหัสลับคอลัมน์และเข้ารหัสแต่ละคีย์ด้วยคีย์หลักของคอลัมน์ สุดท้าย คุณจําเป็นต้องจัดเก็บเมตาดาต้าเกี่ยวกับคีย์ในฐานข้อมูลของคุณ
- เมตาดาต้าของคีย์หลักของคอลัมน์รวบรวมตําแหน่งที่ตั้งของคีย์หลักของคอลัมน์
- เมตาดาต้าของคีย์การเข้ารหัสลับคอลัมน์ประกอบด้วยค่าเข้ารหัสลับของคีย์การเข้ารหัสลับของคอลัมน์ Database Engine จะไม่จัดเก็บหรือใช้คีย์ชนิดใดชนิดหนึ่งในข้อความธรรมดา
กําหนดค่าการเข้ารหัสลับสําหรับคอลัมน์ฐานข้อมูลที่เลือกที่มีข้อมูลที่สําคัญที่ได้รับการป้องกัน คุณสามารถสร้างตารางใหม่ด้วยคอลัมน์ที่เข้ารหัสลับหรือเข้ารหัสลับคอลัมน์ฐานข้อมูลที่มีอยู่และข้อมูลที่มีอยู่ เมื่อตั้งค่าการเข้ารหัสลับสําหรับคอลัมน์ คุณระบุข้อมูลเกี่ยวกับอัลกอริทึมการเข้ารหัสลับ ของคีย์การเข้ารหัสลับของคอลัมน์เพื่อปกป้องข้อมูลในคอลัมน์ และชนิดการเข้ารหัสลับ Always Encrypted สนับสนุนการเข้ารหัสลับสองชนิด:
- การเข้ารหัสลับแบบเชิงกําหนดจะสร้างค่าที่เข้ารหัสลับเดียวกันสําหรับค่าข้อความธรรมดาที่กําหนดเสมอ การใช้การเข้ารหัสลับแบบเชิงกําหนดจะอนุญาตให้มีการค้นหาจุด การรวมความเท่ากัน การจัดกลุ่ม และการทําดัชนีบนคอลัมน์ที่เข้ารหัสลับ อย่างไรก็ตาม นอกจากนี้ยังสามารถอนุญาตให้ผู้ใช้ที่ไม่ได้รับอนุญาตคาดเดาข้อมูลเกี่ยวกับค่าที่เข้ารหัสได้โดยการตรวจสอบรูปแบบในคอลัมน์ที่เข้ารหัส โดยเฉพาะอย่างยิ่งหากมีชุดค่าที่เข้ารหัสที่เป็นไปได้เล็กน้อย เช่น จริง/เท็จ หรือภูมิภาคเหนือ/ใต้/ตะวันออก/ตะวันตก
- การเข้ารหัสแบบสุ่มใช้วิธีการที่เข้ารหัสลับข้อมูลในลักษณะที่คาดการณ์ได้น้อย การเข้ารหัสลับแบบสุ่มจะมีความปลอดภัยมากกว่า แต่ป้องกันการค้นหา การจัดกลุ่ม การจัดทําดัชนี และการเข้าร่วมบนคอลัมน์ที่เข้ารหัสลับ
ใช้การเข้ารหัสแบบกําหนดสําหรับคอลัมน์ที่ใช้เป็นพารามิเตอร์การค้นหาหรือการจัดกลุ่ม ตัวอย่างเช่น หมายเลข ID ของรัฐบาล ใช้การเข้ารหัสแบบสุ่มสําหรับข้อมูล เช่น ข้อคิดเห็นการตรวจสอบที่เป็นความลับ ซึ่งไม่มีการจัดกลุ่มกับระเบียนอื่น และไม่ใช้ในการรวมตาราง สําหรับรายละเอียดเกี่ยวกับอัลกอริทึมการเข้ารหัสลับ Always Encrypted ให้ดู Always Encrypted คุณสามารถดําเนินการขั้นตอนข้างต้นได้โดยใช้เครื่องมือ SQL:
- SQL Server Management Studio (SSMS)
- PowerShell ของเซิร์ฟเวอร์ SQL
- sqlpackage ซึ่งทําให้กระบวนการตั้งค่าเป็นอัตโนมัติ
เพื่อให้แน่ใจว่าคีย์ Always Encrypted และข้อมูลที่ละเอียดอ่อนที่ได้รับการป้องกันจะไม่เปิดเผยในข้อความธรรมดาไปยังสภาพแวดล้อมของฐานข้อมูล กลไกจัดการฐานข้อมูลไม่สามารถเกี่ยวข้องกับการเตรียมคีย์และการเข้ารหัสข้อมูล หรือการดําเนินการถอดรหัสได้ ดังนั้น Transact-SQL (T-SQL) ไม่รองรับการเตรียมใช้งานคีย์หรือการดําเนินการเข้ารหัสลับ ด้วยเหตุผลเดียวกันการเข้ารหัสข้อมูลที่มีอยู่หรือเข้ารหัสอีกครั้ง (ด้วยประเภทการเข้ารหัสลับที่แตกต่างกันหรือคีย์การเข้ารหัสลับของคอลัมน์) จะต้องดําเนินการภายนอกฐานข้อมูล (เครื่องมือ SQL สามารถทําให้เป็นอัตโนมัติได้)
วิธีการทํางานของคิวรีเทียบกับคอลัมน์ที่เข้ารหัสลับ
ต้องเป็นไปตามข้อกําหนดเบื้องต้นหากผู้ใช้จําเป็นต้องดําเนินการใดๆ ต่อไปนี้
- เรียกใช้แบบสอบถามบนคอลัมน์ฐานข้อมูลที่เข้ารหัสลับ
- แทรกข้อมูลลงในคอลัมน์ที่เข้ารหัส
- ดึงค่าข้อความธรรมดาจากคอลัมน์ที่เข้ารหัส
- ดําเนินการสนับสนุน (ตัวอย่างเช่น การค้นหาแบบจุด) บนคอลัมน์โดยใช้การเข้ารหัสแบบกําหนด
ผู้ใช้หรือแอปพลิเคชันที่ออกแบบสอบถามต้องมีคุณสมบัติตรงตามข้อกําหนดเบื้องต้นต่อไปนี้:
- มีสิทธิ์เข้าถึงคีย์หลักของคอลัมน์ที่ปกป้องข้อมูล การเข้าถึงคีย์เป็นสิ่งจําเป็นนอกเหนือจากการอนุญาตระดับฐานข้อมูล เช่น
SELECTบนตารางที่มีข้อมูล - เชื่อมต่อกับฐานข้อมูลที่เปิดใช้งาน Always Encrypted ในการเชื่อมต่อฐานข้อมูล เครื่องมือ SQL ส่วนใหญ่และโปรแกรมควบคุมไคลเอ็นต์ SQL ส่วนใหญ่สนับสนุนการเปิดใช้งาน Always Encrypted สําหรับการเชื่อมต่อฐานข้อมูล
โน้ต
หากผู้ใช้มีสิทธิ์ฐานข้อมูลที่จําเป็นในการอ่านข้อมูล แต่ไม่สามารถเข้าถึงคีย์ที่ป้องกันข้อมูลได้ ผู้ใช้สามารถดึงข้อมูลข้อความเข้ารหัส (เข้ารหัส) ได้โดยการเชื่อมต่อกับฐานข้อมูลโดยไม่ต้องเปิดใช้งานการเข้ารหัสเสมอในการเชื่อมต่อฐานข้อมูล
นี่คือวิธีการทํางานของคิวรีบนคอลัมน์ที่เข้ารหัสลับ:
- เมื่อแอปพลิเคชันออกคิวรีที่มีการกําหนดพารามิเตอร์ ไดรเวอร์ไคลเอ็นต์ SQL ภายในแอปพลิเคชันจะติดต่อกลไกจัดการฐานข้อมูลอย่างโปร่งใส (โดยการเรียก sp_describe_parameter_encryption (Transact-SQL) เพื่อกําหนดพารามิเตอร์ที่เข้ารหัสลับคอลัมน์ที่เข้ารหัสลับและควรเข้ารหัสลับ สําหรับแต่ละพารามิเตอร์ที่จําเป็นต้องเข้ารหัสลับ โปรแกรมควบคุมจะได้รับอัลกอริทึมการเข้ารหัสลับ ชนิดการเข้ารหัสลับ และเมตาดาต้าหลัก รวมถึงคีย์การเข้ารหัสลับคอลัมน์ที่เข้ารหัสลับและตําแหน่งที่ตั้งของคีย์หลักของคอลัมน์ที่สอดคล้องกัน
- โปรแกรมควบคุมจะเรียกใช้คีย์สโตร์ที่มีคีย์หลักของคอลัมน์เพื่อถอดรหัสค่าคีย์การเข้ารหัสลับของคอลัมน์ที่เข้ารหัสลับ คีย์การเข้ารหัสคอลัมน์ plaintext ผลลัพธ์จะถูกแคชเพื่อลดจํานวนการเดินทางไปกลับไปยังที่เก็บคีย์ในการใช้งานในภายหลังของคีย์การเข้ารหัสลับของคอลัมน์เดียวกัน
- โปรแกรมควบคุมใช้คีย์การเข้ารหัสลับคอลัมน์ plaintext ที่ได้รับเพื่อเข้ารหัสลับพารามิเตอร์แบบสอบถามที่สอดคล้องกับคอลัมน์ที่เข้ารหัสลับ
- โปรแกรมควบคุมแทนที่ค่าข้อความธรรมดาของพารามิเตอร์ที่กําหนดเป้าหมายคอลัมน์ที่เข้ารหัสลับด้วยค่าที่เข้ารหัสลับ และจะส่งคิวรีไปยังกลไกจัดการฐานข้อมูลสําหรับการประมวลผล
- กลไกจัดการฐานข้อมูลจะดําเนินการสืบค้น ซึ่งอาจเกี่ยวข้องกับการเปรียบเทียบความเท่าเทียมกันในคอลัมน์โดยใช้การเข้ารหัสแบบกําหนด
- หากผลลัพธ์คิวรีมีข้อมูลจากคอลัมน์ที่เข้ารหัสลับ กลไกจัดการฐานข้อมูลจะแนบเมตาดาต้าการเข้ารหัสสําหรับแต่ละคอลัมน์ รวมถึงข้อมูลเกี่ยวกับอัลกอริทึมการเข้ารหัส ชนิดการเข้ารหัส และเมตาดาต้าหลักกับชุดผลลัพธ์
- กลไกจัดการฐานข้อมูลส่งชุดผลลัพธ์ไปยังแอปพลิเคชันไคลเอ็นต์
- สําหรับแต่ละคอลัมน์ที่เข้ารหัสในชุดผลลัพธ์ที่ได้รับ โปรแกรมควบคุมจะพยายามค้นหาคีย์การเข้ารหัสคอลัมน์ plaintext ในแคชภายในเครื่อง และทําการเดินทางไปกลับไปยังที่เก็บคีย์โดยถือคีย์หลักของคอลัมน์ถ้าไม่สามารถค้นหาคีย์ในแคชได้
- โปรแกรมควบคุมจะถอดรหัสผลลัพธ์และแสดงค่าข้อความธรรมดาไปยังแอปพลิเคชัน
โปรแกรมควบคุมไคลเอ็นต์โต้ตอบกับที่เก็บคีย์ ซึ่งประกอบด้วยคีย์หลักของคอลัมน์ โดยใช้ผู้ให้บริการที่เก็บคีย์หลักคอลัมน์ ซึ่งเป็นคอมโพเนนต์ซอฟต์แวร์ฝั่งไคลเอ็นต์ที่ห่อหุ้มคีย์ที่เก็บคอลัมน์ที่มีคีย์หลัก ผู้ให้บริการสําหรับร้านค้าคีย์ประเภททั่วไปมีอยู่ในไลบรารีโปรแกรมควบคุมฝั่งไคลเอ็นต์จาก Microsoft หรือเป็นการดาวน์โหลดแบบสแตนด์อโลน นอกจากนี้คุณยังสามารถใช้ผู้ให้บริการของคุณเองได้ ความสามารถของ Always Encrypted รวมถึงผู้ให้บริการที่เก็บคีย์หลักคอลัมน์ที่มีอยู่ภายในจะแตกต่างกันไปตามไลบรารีโปรแกรมควบคุมและเวอร์ชันของไลบรารี
ดู พัฒนาแอปพลิเคชันโดยใช้ Always Encrypted สําหรับรายการโปรแกรมควบคุมไคลเอ็นต์ที่สนับสนุน Always Encrypted และสําหรับข้อมูลเกี่ยวกับวิธีการพัฒนาแอปพลิเคชันที่คิวรีคอลัมน์ที่เข้ารหัสลับ
คุณยังสามารถคิวรีคอลัมน์ที่เข้ารหัสลับโดยใช้เครื่องมือ SQL ตัวอย่างเช่น Azure Data Studio หรือ SSMS
ขีด จำกัด
ข้อจํากัดต่อไปนี้นําไปใช้กับคิวรีบนคอลัมน์ที่เข้ารหัสลับ:
การเข้ารหัสลับแบบเชิงกําหนดสนับสนุนการดําเนินการต่อไปนี้ที่เกี่ยวข้องกับการเปรียบเทียบความเท่ากัน - ไม่อนุญาตให้ดําเนินการอื่น ๆ
-
= (เท่ากับ) ในการค้นหาการค้นหาจุด
- ใน
- เลือก - จัดกลุ่มตาม
- DISTINCT
-
= (เท่ากับ) ในการค้นหาการค้นหาจุด
ไม่อนุญาตให้มีการคํานวณคอลัมน์ที่เข้ารหัสลับโดยใช้การเข้ารหัสลับแบบสุ่ม
โน้ต
การเข้ารหัสเสมอด้วยพื้นที่ปลอดภัย ช่วยผ่อนคลายข้อจํากัดโดยอนุญาตให้จับคู่รูปแบบ ตัวดําเนินการเปรียบเทียบ การเรียงลําดับ และการจัดทําดัชนีบนคอลัมน์โดยใช้การเข้ารหัสแบบสุ่ม
ไม่อนุญาตให้ใช้คําสั่งคิวรีที่ทริกเกอร์การคํานวณที่เกี่ยวข้องกับทั้งข้อความธรรมดาและข้อมูลที่เข้ารหัสลับ เช่น:
- การเปรียบเทียบคอลัมน์ที่เข้ารหัสลับกับคอลัมน์ข้อความธรรมดาหรือสัญพจน์
- การคัดลอกข้อมูลจากคอลัมน์ข้อความธรรมดาไปยังคอลัมน์ที่เข้ารหัสลับ (หรือในทางกลับกัน) UPDATEBULK INSERTSELECT INTOหรือ INSERT. เลือก
- การแทรกสัญพจน์ไปยังคอลัมน์ที่เข้ารหัสลับ
- การเปรียบเทียบคอลัมน์ที่เข้ารหัสลับกับคอลัมน์ข้อความธรรมดาหรือสัญพจน์
คําสั่งดังกล่าวส่งผลให้เกิดข้อผิดพลาดในการปะทะกันของตัวถูกดําเนินการดังนี้:
Output
Msg 206, Level 16, State 2, Line 89
Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
แอปพลิเคชันต้องใช้พารามิเตอร์คิวรีเพื่อส่งผ่านค่าที่สอดคล้องกับคอลัมน์ที่เข้ารหัสลับ ตัวอย่างเช่น เมื่อแทรกข้อมูลไปยังคอลัมน์ที่เข้ารหัสลับหรือกรองโดยการเข้ารหัสลับคอลัมน์ (เมื่อใช้การเข้ารหัสลับแบบเชิงกําหนด) ไม่รองรับการส่งผ่านตัวแปรสัญพจน์หรือ T-SQL ที่สอดคล้องกับคอลัมน์ที่เข้ารหัสลับ สําหรับข้อมูลเพิ่มเติมเฉพาะสําหรับโปรแกรมควบคุมไคลเอ็นต์ที่คุณกําลังใช้ ให้ดู พัฒนาแอปพลิเคชันโดยใช้ Always Encrypted
คุณต้องใช้การกําหนดพารามิเตอร์สําหรับตัวแปร Always Encrypted ใน Azure Data Studio หรือ SSMS เพื่อออกคิวรีที่ส่งผ่านค่าที่สอดคล้องกับคอลัมน์ที่เข้ารหัสลับในเครื่องมือเหล่านี้ ตัวอย่างเช่น เมื่อแทรกข้อมูลไปยังคอลัมน์ที่เข้ารหัสลับหรือกรองโดยการเข้ารหัสลับคอลัมน์ (เมื่อใช้การเข้ารหัสลับแบบเชิงกําหนด)
พารามิเตอร์ค่าตาราง กําหนดเป้าหมายคอลัมน์ที่เข้ารหัสลับไม่ได้รับการสนับสนุน
คิวรีที่ใช้คําสั่งต่อไปนี้ไม่ได้รับการสนับสนุน:
หลังจากเปลี่ยนข้อกําหนดของคอลัมน์ที่เข้ารหัสลับแล้ว ให้ดําเนินการ sp_refresh_parameter_encryption เพื่ออัปเดตเมตาดาต้า Always Encrypted สําหรับวัตถุ
Always Encrypted ไม่ได้รับการสนับสนุนสําหรับคอลัมน์ที่มีคุณลักษณะด้านล่าง:
- คอลัมน์ที่ใช้หนึ่งในประเภทข้อมูลต่อไปนี้: xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, นามแฝง, ประเภทที่ผู้ใช้กําหนดเอง
- คอลัมน์ FILESTREAM
- คอลัมน์ที่มีคุณสมบัติ IDENTITY
- คอลัมน์ที่มีคุณสมบัติ ROWGUIDCOL
- คอลัมน์สตริง (varchar, char, ฯลฯ) ที่มีการจัดเรียงนอกเหนือจากการจัดเรียงแบบ จุดรหัสไบนารี (_BIN2) เมื่อใช้การเข้ารหัสลับแบบเชิงกําหนด
- คอลัมน์ที่เป็นคีย์สําหรับดัชนีแบบคลัสเตอร์และแบบไม่เลือกกลุ่มเมื่อใช้การเข้ารหัสลับแบบสุ่ม (ดัชนีบนคอลัมน์ที่ใช้การเข้ารหัสลับแบบเชิงกําหนดได้รับการสนับสนุน)
- คอลัมน์ที่รวมอยู่ในดัชนีข้อความแบบเต็ม (Always Encrypted ไม่สนับสนุน การค้นหาข้อความแบบเต็ม)
- คอลัมน์จากการคํานวณ
- คอลัมน์ที่อ้างอิงโดยคอลัมน์จากการคํานวณ (เมื่อนิพจน์ไม่รองรับการดําเนินการสําหรับ Always Encrypted)
- คอลัมน์ Sparse ตั้งค่า
- คอลัมน์ที่อ้างอิงโดย สถิติ เมื่อใช้การเข้ารหัสแบบสุ่ม (รองรับการเข้ารหัสแบบกําหนด)
- คอลัมน์การแบ่งพาร์ติชัน
- คอลัมน์ที่มีข้อจํากัดเริ่มต้น
- คอลัมน์ที่อ้างอิงโดย ข้อจํากัดที่ไม่ซ้ํากัน เมื่อใช้การเข้ารหัสลับแบบสุ่ม (รองรับการเข้ารหัสลับแบบเชิงกําหนด)
- คอลัมน์คีย์หลักเมื่อใช้การเข้ารหัสลับแบบสุ่ม (การเข้ารหัสลับแบบเชิงกําหนดได้รับการสนับสนุน)
- การอ้างอิงคอลัมน์ใน ข้อจํากัดของ Foreign Key เมื่อใช้การเข้ารหัสลับแบบสุ่มหรือเมื่อใช้การเข้ารหัสลับแบบเชิงกําหนด ถ้าคอลัมน์อ้างอิงและการอ้างอิงใช้คีย์หรืออัลกอริทึมที่แตกต่างกัน
- คอลัมน์ที่อ้างอิงโดย ข้อจํากัดการตรวจสอบ
- คอลัมน์ที่จับภาพ/ติดตามโดยใช้ เปลี่ยนแปลงการรวบรวมข้อมูล
- คอลัมน์คีย์หลักบนตารางที่มี การติดตามการเปลี่ยนแปลง
- คอลัมน์ที่ถูกมาสก์ (โดยใช้ Dynamic Data Masking)
- คอลัมน์ใน ตารางฐานข้อมูลที่ขยาย (ตารางที่มีคอลัมน์ที่เข้ารหัสด้วย Always Encrypted สามารถเปิดใช้งานสําหรับ Stretch)
สําคัญ
ไม่สนับสนุนฐานข้อมูลแบบยืดใน SQL Server 2022 (16.x) และฐานข้อมูล Azure SQL คุณลักษณะนี้จะถูกเอาออกในกลไกจัดการฐานข้อมูลเวอร์ชันในอนาคต หลีกเลี่ยงการใช้คุณลักษณะนี้ในงานพัฒนาใหม่ และวางแผนที่จะปรับเปลี่ยนแอปพลิเคชันที่ใช้คุณลักษณะนี้ในปัจจุบัน
ลักษณะการทํางานต่อไปนี้ใช้ไม่ได้กับคอลัมน์ที่เข้ารหัสลับ:
- การจําลองแบบ SQL Server (ทรานแซคชัน การผสาน หรือการจําลองแบบสแนปช็อต) คุณลักษณะการจําลองแบบจริง รวมถึง Alwaysได้รับการสนับสนุน
- คิวรีแบบกระจาย (เซิร์ฟเวอร์ที่เชื่อมโยง, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL))
- คิวรีข้ามฐานข้อมูล ดําเนินการรวมบนคอลัมน์ (โดยใช้การเข้ารหัสลับแบบเชิงกําหนด) จากฐานข้อมูลที่แตกต่างกัน
การอ้างอิง Transact-SQL Always Encrypted
การเข้ารหัสลับเสมอ จะใช้คําสั่ง Transact-SQL ต่อไปนี้ มุมมองแค็ตตาล็อกระบบ กระบวนงานที่เก็บไว้ของระบบ และสิทธิ์
คำ สั่ง
- สร้างคีย์หลักของคอลัมน์ (Transact-SQL)
- ปล่อยคีย์ต้นแบบคอลัมน์ (Transact-SQL)
- สร้างคีย์การเข้ารหัสลับคอลัมน์ (Transact-SQL)
- คีย์การเข้ารหัสลับคอลัมน์ ALTER (Transact-SQL)
- ปล่อยคีย์การเข้ารหัสลับคอลัมน์ (Transact-SQL)
- สร้างตาราง (เข้ารหัสด้วย)
มุมมองแค็ตตาล็อกระบบและกระบวนงานที่เก็บไว้
- sys.column_encryption_keys (Transact-SQL)
- sys.column_encryption_key_values (Transact-SQL)
- sys.column_master_keys (Transact-SQL)
- sp_refresh_parameter_encryption (Transact-SQL)
- sp_describe_parameter_encryption (Transact-SQL)
ดู sys.column (Transact-SQL) สําหรับข้อมูลเกี่ยวกับการเข้ารหัสลับเมตาดาต้าที่เก็บไว้สําหรับแต่ละคอลัมน์
การอนุญาตของฐานข้อมูล
มีสี่สิทธิ์ฐานข้อมูลสําหรับ Always Encrypted:
- ALTER COLUMN MASTER KEY ใด ๆ - จําเป็นในการสร้างและลบเมตาดาต้าของคีย์หลักของคอลัมน์
- ALTER คีย์การเข้ารหัสลับคอลัมน์ใด ๆ - จําเป็นในการสร้างและลบเมตาดาต้าของคีย์การเข้ารหัสลับของคอลัมน์
- ดูข้อกําหนดคีย์หลักของคอลัมน์ใด ๆ - จําเป็นต้องมีการเข้าถึงและอ่านเมตาดาต้าของคีย์หลักของคอลัมน์ซึ่งจําเป็นในการคิวรีคอลัมน์ที่เข้ารหัสลับ
- ดูข้อกําหนดคีย์การเข้ารหัสลับของคอลัมน์ใด ๆ - จําเป็นในการเข้าถึงและอ่านเมตาดาต้าของคีย์หลักของคอลัมน์ซึ่งจําเป็นในการคิวรีคอลัมน์ที่เข้ารหัสลับ
ตารางต่อไปนี้สรุปสิทธิ์ที่จําเป็นสําหรับการดําเนินการทั่วไป
| สถานการณ์สมมติ | เปลี่ยน คีย์หลักของคอลัมน์ใดก็ได้ | เปลี่ยน ของคีย์การเข้ารหัสลับของคอลัมน์ | ดู ข้อกําหนดคีย์หลักของคอลัมน์ใดก็ได้ | ดูข้อกําหนดคีย์การเข้ารหัสลับของคอลัมน์ใดก็ตาม |
|---|---|---|---|---|
| การจัดการคีย์ (สร้าง/เปลี่ยน/ตรวจทานเมตาดาต้าหลักในฐานข้อมูล) | X | X | X | X |
| การคิวรีคอลัมน์ที่เข้ารหัสลับ | X | X |
ข้อควรพิจารณาที่สําคัญ
- จําเป็นต้องมีสิทธิ์ VIEW ANY COLUMN MASTER KEY DEFINITION และดู COLUMN ENCRYPTION KEY DEFINITION เมื่อเลือกคอลัมน์ที่เข้ารหัส แม้ว่าผู้ใช้ไม่มีสิทธิ์ในคีย์หลักของคอลัมน์ (ในที่เก็บคีย์) ปกป้องคอลัมน์และไม่สามารถเข้าถึงข้อความธรรมดาได้
- ใน SQL Server ทั้งนี้ ทั้งคู่ดู COLUMN MASTER KEY DEFINITION ใดๆ และดูสิทธิ์ของข้อกําหนดคีย์การเข้ารหัสลับของคอลัมน์ใด ๆ จะได้รับสิทธิ์ตามค่าเริ่มต้นสําหรับบทบาทฐานข้อมูลแบบคงที่สาธารณะ ผู้ดูแลระบบฐานข้อมูลอาจเลือกที่จะเพิกถอน (หรือปฏิเสธ) สิทธิ์ในบทบาทสาธารณะ และอนุญาตให้พวกเขามีบทบาทหรือผู้ใช้เพื่อใช้การควบคุมที่จํากัดมากขึ้น
- ในฐานข้อมูล SQL นั้น คําจํากัดความของคีย์หลักคอลัมน์ใดก็ตาม และดูสิทธิ์ของข้อกําหนดคีย์สําหรับการเข้ารหัสลับของคอลัมน์ใดๆ จะไม่ได้รับการอนุญาตตามค่าเริ่มต้นสําหรับบทบาทฐานข้อมูลแบบคงที่สาธารณะ ซึ่งช่วยให้เครื่องมือดั้งเดิมบางอย่างที่มีอยู่ (ใช้ DacFx เวอร์ชันเก่า) เพื่อให้ทํางานได้อย่างถูกต้อง เมื่อต้องการทํางานกับคอลัมน์ที่เข้ารหัสลับ (แม้ว่าจะไม่ถอดรหัสลับ) ผู้ดูแลระบบฐานข้อมูลต้องมอบสิทธิ์ VIEW ANY COLUMN MASTER KEY DEFINITION และดูการอนุญาตของ COLUMN ENCRYPTION KEY DEFINITION