แนะนําเมื่อต้องใช้ 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 ในฐานข้อมูลของคุณ คุณจําเป็นต้อง:

  1. ปรับใช้คีย์การเข้ารหัสเพื่อปกป้องข้อมูลของคุณ Always Encrypted ใช้คีย์สองชนิด:

    • คีย์การเข้ารหัสลับคอลัมน์
    • คีย์หลักของคอลัมน์

    คีย์การเข้ารหัสลับคอลัมน์ถูกใช้เพื่อเข้ารหัสลับข้อมูลในคอลัมน์ที่เข้ารหัสลับ คีย์หลักของคอลัมน์คือคีย์ป้องกันคีย์ที่เข้ารหัสลับคีย์การเข้ารหัสลับของคอลัมน์อย่างน้อยหนึ่งรายการ คุณต้องเก็บคีย์หลักของคอลัมน์ไว้ในที่เก็บคีย์ที่เชื่อถือได้ภายนอกระบบฐานข้อมูล ตําแหน่งที่เก็บข้อมูลที่พบบ่อยที่สุดคือ Azure Key Vault, ที่เก็บใบรับรอง Windows หรือโมดูลความปลอดภัยของฮาร์ดแวร์ จากนั้น คุณต้องปรับใช้คีย์การเข้ารหัสลับคอลัมน์และเข้ารหัสแต่ละคีย์ด้วยคีย์หลักของคอลัมน์ สุดท้าย คุณจําเป็นต้องจัดเก็บเมตาดาต้าเกี่ยวกับคีย์ในฐานข้อมูลของคุณ

    • เมตาดาต้าของคีย์หลักของคอลัมน์รวบรวมตําแหน่งที่ตั้งของคีย์หลักของคอลัมน์
    • เมตาดาต้าของคีย์การเข้ารหัสลับคอลัมน์ประกอบด้วยค่าเข้ารหัสลับของคีย์การเข้ารหัสลับของคอลัมน์ Database Engine จะไม่จัดเก็บหรือใช้คีย์ชนิดใดชนิดหนึ่งในข้อความธรรมดา
  2. กําหนดค่าการเข้ารหัสลับสําหรับคอลัมน์ฐานข้อมูลที่เลือกที่มีข้อมูลที่สําคัญที่ได้รับการป้องกัน คุณสามารถสร้างตารางใหม่ด้วยคอลัมน์ที่เข้ารหัสลับหรือเข้ารหัสลับคอลัมน์ฐานข้อมูลที่มีอยู่และข้อมูลที่มีอยู่ เมื่อตั้งค่าการเข้ารหัสลับสําหรับคอลัมน์ คุณระบุข้อมูลเกี่ยวกับอัลกอริทึมการเข้ารหัสลับ ของคีย์การเข้ารหัสลับของคอลัมน์เพื่อปกป้องข้อมูลในคอลัมน์ และชนิดการเข้ารหัสลับ 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 สําหรับการเชื่อมต่อฐานข้อมูล

โน้ต

หากผู้ใช้มีสิทธิ์ฐานข้อมูลที่จําเป็นในการอ่านข้อมูล แต่ไม่สามารถเข้าถึงคีย์ที่ป้องกันข้อมูลได้ ผู้ใช้สามารถดึงข้อมูลข้อความเข้ารหัส (เข้ารหัส) ได้โดยการเชื่อมต่อกับฐานข้อมูลโดยไม่ต้องเปิดใช้งานการเข้ารหัสเสมอในการเชื่อมต่อฐานข้อมูล

นี่คือวิธีการทํางานของคิวรีบนคอลัมน์ที่เข้ารหัสลับ:

  1. เมื่อแอปพลิเคชันออกคิวรีที่มีการกําหนดพารามิเตอร์ ไดรเวอร์ไคลเอ็นต์ SQL ภายในแอปพลิเคชันจะติดต่อกลไกจัดการฐานข้อมูลอย่างโปร่งใส (โดยการเรียก sp_describe_parameter_encryption (Transact-SQL) เพื่อกําหนดพารามิเตอร์ที่เข้ารหัสลับคอลัมน์ที่เข้ารหัสลับและควรเข้ารหัสลับ สําหรับแต่ละพารามิเตอร์ที่จําเป็นต้องเข้ารหัสลับ โปรแกรมควบคุมจะได้รับอัลกอริทึมการเข้ารหัสลับ ชนิดการเข้ารหัสลับ และเมตาดาต้าหลัก รวมถึงคีย์การเข้ารหัสลับคอลัมน์ที่เข้ารหัสลับและตําแหน่งที่ตั้งของคีย์หลักของคอลัมน์ที่สอดคล้องกัน
  2. โปรแกรมควบคุมจะเรียกใช้คีย์สโตร์ที่มีคีย์หลักของคอลัมน์เพื่อถอดรหัสค่าคีย์การเข้ารหัสลับของคอลัมน์ที่เข้ารหัสลับ คีย์การเข้ารหัสคอลัมน์ plaintext ผลลัพธ์จะถูกแคชเพื่อลดจํานวนการเดินทางไปกลับไปยังที่เก็บคีย์ในการใช้งานในภายหลังของคีย์การเข้ารหัสลับของคอลัมน์เดียวกัน
  3. โปรแกรมควบคุมใช้คีย์การเข้ารหัสลับคอลัมน์ plaintext ที่ได้รับเพื่อเข้ารหัสลับพารามิเตอร์แบบสอบถามที่สอดคล้องกับคอลัมน์ที่เข้ารหัสลับ
  4. โปรแกรมควบคุมแทนที่ค่าข้อความธรรมดาของพารามิเตอร์ที่กําหนดเป้าหมายคอลัมน์ที่เข้ารหัสลับด้วยค่าที่เข้ารหัสลับ และจะส่งคิวรีไปยังกลไกจัดการฐานข้อมูลสําหรับการประมวลผล
  5. กลไกจัดการฐานข้อมูลจะดําเนินการสืบค้น ซึ่งอาจเกี่ยวข้องกับการเปรียบเทียบความเท่าเทียมกันในคอลัมน์โดยใช้การเข้ารหัสแบบกําหนด
  6. หากผลลัพธ์คิวรีมีข้อมูลจากคอลัมน์ที่เข้ารหัสลับ กลไกจัดการฐานข้อมูลจะแนบเมตาดาต้าการเข้ารหัสสําหรับแต่ละคอลัมน์ รวมถึงข้อมูลเกี่ยวกับอัลกอริทึมการเข้ารหัส ชนิดการเข้ารหัส และเมตาดาต้าหลักกับชุดผลลัพธ์
  7. กลไกจัดการฐานข้อมูลส่งชุดผลลัพธ์ไปยังแอปพลิเคชันไคลเอ็นต์
  8. สําหรับแต่ละคอลัมน์ที่เข้ารหัสในชุดผลลัพธ์ที่ได้รับ โปรแกรมควบคุมจะพยายามค้นหาคีย์การเข้ารหัสคอลัมน์ plaintext ในแคชภายในเครื่อง และทําการเดินทางไปกลับไปยังที่เก็บคีย์โดยถือคีย์หลักของคอลัมน์ถ้าไม่สามารถค้นหาคีย์ในแคชได้
  9. โปรแกรมควบคุมจะถอดรหัสผลลัพธ์และแสดงค่าข้อความธรรมดาไปยังแอปพลิเคชัน

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

ดู พัฒนาแอปพลิเคชันโดยใช้ Always Encrypted สําหรับรายการโปรแกรมควบคุมไคลเอ็นต์ที่สนับสนุน Always Encrypted และสําหรับข้อมูลเกี่ยวกับวิธีการพัฒนาแอปพลิเคชันที่คิวรีคอลัมน์ที่เข้ารหัสลับ

คุณยังสามารถคิวรีคอลัมน์ที่เข้ารหัสลับโดยใช้เครื่องมือ SQL ตัวอย่างเช่น Azure Data Studio หรือ SSMS

ขีด จำกัด

ข้อจํากัดต่อไปนี้นําไปใช้กับคิวรีบนคอลัมน์ที่เข้ารหัสลับ:

  • การเข้ารหัสลับแบบเชิงกําหนดสนับสนุนการดําเนินการต่อไปนี้ที่เกี่ยวข้องกับการเปรียบเทียบความเท่ากัน - ไม่อนุญาตให้ดําเนินการอื่น ๆ

  • ไม่อนุญาตให้มีการคํานวณคอลัมน์ที่เข้ารหัสลับโดยใช้การเข้ารหัสลับแบบสุ่ม

โน้ต

การเข้ารหัสเสมอด้วยพื้นที่ปลอดภัย ช่วยผ่อนคลายข้อจํากัดโดยอนุญาตให้จับคู่รูปแบบ ตัวดําเนินการเปรียบเทียบ การเรียงลําดับ และการจัดทําดัชนีบนคอลัมน์โดยใช้การเข้ารหัสแบบสุ่ม

  • ไม่อนุญาตให้ใช้คําสั่งคิวรีที่ทริกเกอร์การคํานวณที่เกี่ยวข้องกับทั้งข้อความธรรมดาและข้อมูลที่เข้ารหัสลับ เช่น:

    • การเปรียบเทียบคอลัมน์ที่เข้ารหัสลับกับคอลัมน์ข้อความธรรมดาหรือสัญพจน์
    • การคัดลอกข้อมูลจากคอลัมน์ข้อความธรรมดาไปยังคอลัมน์ที่เข้ารหัสลับ (หรือในทางกลับกัน) 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 คุณลักษณะนี้จะถูกเอาออกในกลไกจัดการฐานข้อมูลเวอร์ชันในอนาคต หลีกเลี่ยงการใช้คุณลักษณะนี้ในงานพัฒนาใหม่ และวางแผนที่จะปรับเปลี่ยนแอปพลิเคชันที่ใช้คุณลักษณะนี้ในปัจจุบัน

  • ลักษณะการทํางานต่อไปนี้ใช้ไม่ได้กับคอลัมน์ที่เข้ารหัสลับ:

การอ้างอิง Transact-SQL Always Encrypted

การเข้ารหัสลับเสมอ จะใช้คําสั่ง 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