Симптоми
Приемете, че редовно включвате и изключвате шифроване на база данни, а също така и периодично променяте ключовете за шифроване на базата данни в SQL Server 2012. В този случай базата данни може да не е шифрована при включване на шифроването. Ако промените ключовете за шифроване, може да възникне твърдение.
Причина
Този проблем възниква, защото ако ключът за шифроване на бази данни (DEK) не е в шифровано състояние и ключът се промени, следващата актуализация на ключа копира ключовата част на DEK, но не копира настройката правилно. В SQL Server 2012, след сканиране за дешифриране е запазена заглавката на DEK в блока за управление на файлове (FCB) и DEK се премахва само когато ключът е отпаднал. Когато шифроването е изключено, има ключова промяна и след това се опитвате да включите шифроването, Динамичният изглед за управление (DMV) показва, че шифроването е завършило. Но не се извършва сканиране за шифроване и страниците са оставени нешифровани.
Решение
Информация за сборна актуализация
SQL Server 2012
Корекцията за този проблем е издадена за първи път в сборна актуализация 1. За повече информация как да получите тази кумулативна актуализация на пакета за SQL Server 2012, щракнете върху следния номер на статия, за да видите статията в базата знания на Microsoft:
2679368 Кумулативна актуализация на пакета 1 за SQL Server 2012Забележка Тъй като компилациите са кумулативни, всяко ново издание за корекция съдържа всички актуални корекции и всички корекции на защитата, които са били включени при предишното издание на SQL Server 2012 Fix. Препоръчваме ви да обмислите прилагането на най-новото съобщение за корекция, което съдържа тази спешна корекция. За допълнителна информация щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:
2692828 SQL Server 2012 компилации, които са издадени след издаването на SQL Server 2012
Състоянието
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