อาการ
สมมติว่าคุณเปิดและปิดการเข้ารหัสลับในฐานข้อมูลอย่างสม่ำเสมอและยังเปลี่ยนคีย์การเข้ารหัสลับบนฐานข้อมูลใน SQL Server ๒๐๑๒เป็นประจำ ในสถานการณ์สมมตินี้ฐานข้อมูลอาจไม่ได้รับการเข้ารหัสลับเมื่อคุณเปิดใช้งานการเข้ารหัสลับ ถ้าคุณเปลี่ยนคีย์การเข้ารหัสลับการตรวจสอบเงื่อนไขอาจเกิดขึ้น
สาเหตุ
ปัญหานี้เกิดขึ้นเนื่องจากถ้าคีย์การเข้ารหัสลับฐานข้อมูล (DEK) ไม่ได้อยู่ในสถานะที่เข้ารหัสลับและคีย์จะถูกเปลี่ยนแปลงการอัปเดตหน้าของคีย์นี้จะคัดลอกส่วนที่สำคัญของ DEK แต่จะไม่คัดลอกการตั้งค่าสถานะการเข้ารหัสลับอย่างถูกต้อง ใน SQL Server ๒๐๑๒หลังจากการสแกนการถอดรหัสลับแล้ว DEK ในส่วนหัวของบล็อกตัวควบคุมไฟล์ (FCB) จะถูกเก็บไว้และ DEK จะถูกเอาออกเฉพาะเมื่อคีย์ถูกทิ้งไป เมื่อการเข้ารหัสลับถูกปิดใช้งานมีการเปลี่ยนแปลงที่สำคัญแล้วคุณพยายามเปิดการเข้ารหัสลับมุมมองการจัดการแบบไดนามิก (DMV) แสดงว่าการเข้ารหัสลับเสร็จสมบูรณ์ อย่างไรก็ตามไม่มีการดำเนินการการสแกนการเข้ารหัสลับและไม่มีการเข้ารหัสลับหน้า
การแก้ไข
ข้อมูลโปรแกรมอัปเดตสะสม
SQL Server 2012
การแก้ไขสำหรับปัญหานี้ถูกนำออกใช้ครั้งแรกใน1การอัปเดตที่สะสม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการขอรับแพคเกจโปรแกรมปรับปรุงที่สะสมนี้สำหรับ SQL Server ๒๐๑๒ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
๒๖๗๙๓๖๘ แพคเกจโปรแกรมปรับปรุงที่สะสม1สำหรับ SQL Server ๒๐๑๒หมายเหตุ เนื่องจาก builds สะสมแต่ละรุ่นของการแก้ไขใหม่มีโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ใน SQL Server ๒๐๑๒รุ่นก่อนหน้านี้ เราขอแนะนำให้คุณพิจารณาใช้การแก้ไขการแก้ไขล่าสุดที่มีโปรแกรมแก้ไขด่วนนี้ สำหรับข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base:
๒๖๙๒๘๒๘ SQL Server ๒๐๑๒รุ่นที่เผยแพร่หลังจากที่มีการเผยแพร่ SQL Server ๒๐๑๒
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการแก้ไขปัญหานี้ให้วางคีย์การเข้ารหัสลับทุกครั้งที่คุณเปิดการเข้ารหัสลับบนฐานข้อมูล
ข้อมูลเพิ่มเติม
การเรียกข้อมูลกองซ้อน
FCB::InitializeReencryptionScan ntdbms\storeng\dfs\manager\fcb.cpp 8407FCB::ReencryptFile ntdbms\storeng\dfs\manager\fcb.cpp 8934AsynchronousDiskAction::DoReencryptFile ntdbms\storeng\dfs\manager\asyncdp.cpp 810AsynchronousDiskAction::ExecuteDeferredAction ntdbms\storeng\dfs\manager\asyncdp.cpp 1203AsynchronousDiskPool::ProcessActions ntdbms\storeng\dfs\manager\asyncdp.cpp 2252AsynchronousDiskWorker::ThreadRoutine ntdbms\storeng\dfs\manager\asyncdp.cpp 3120SubprocEntrypoint ntdbms\storeng\dfs\process\subproc.cpp 444SOS_Task::Param::Execute e:\sql11_main_t\sql\common\dk\sos\include\sos.inl 8564SOS_Scheduler::RunTask e:\sql11_main_t\sql\common\dk\sos\src\scheduler.cpp 976SOS_Scheduler::ProcessTasks e:\sql11_main_t\sql\common\dk\sos\src\scheduler.cpp 852SchedulerManager::WorkerEntryPoint e:\sql11_main_t\sql\common\dk\sos\src\node.cpp 1809SystemThread::RunWorker e:\sql11_main_t\sql\common\dk\sos\include\worker.inl 823SystemThreadDispatcher::ProcessWorker e:\sql11_main_t\sql\common\dk\sos\src\node.cpp 449Assert in FCB::InitializeReencryptionScan in file fcb.cpp @ 8407Expression: a_dbDEK->GetDbeState () == CSECDEK::x_dbe_DecryptionInProgress || a_dbDEK->GetDbeState () == CSECDEK::x_dbe_EncryptionInProgress