Příznaky
Předpokládejme, že se šifrování v databázi pravidelně zapíná a vypíná a také pravidelně mění šifrovací klíče v databázi serveru SQL Server 2012. V tomto případě nemusí být databáze při zapnutí šifrování zašifrovaná. Pokud změníte šifrovací klíče, může dojít ke kontrolnímu výrazu.
Příčina
K tomuto problému dochází, protože pokud šifrovací klíč databáze (DEK) není v šifrovaném stavu a klíč se změní, zkopíruje se do další aktualizace klíče část klíče DEK, ale nezkopíruje se nastavení stavu šifrování správně. V systému SQL Server 2012 se po dešifrování zachová DEK v záhlaví řídicího bloku (FCB) a DEK se odebere jenom v případě, že je klíč vyřazený. Pokud je šifrování vypnuté, dojde ke změně klíče a pokusíte se zapnout šifrování, ale zobrazení dynamické správy (DMV) Toto šifrování dokončilo. Vyhledávání šifrování se ale neprovádí a stránky nešifrovaná.
Řešení
Informace o kumulativní aktualizaci
SQL Server 2012
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 1. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2012, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2679368 Kumulativní aktualizace 1 pro SQL Server 2012Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2012 Oprava. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2692828 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Řešení
Tento problém vyřešíte vyřazením šifrovacího klíče při každém vypnutí šifrování databáze.
Další informace
Informace o zásobníku volání
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