Sintomi
Si supponga di attivare e disattivare regolarmente la crittografia in un database e di modificare regolarmente le chiavi di crittografia nel database in SQL Server 2012. In questo scenario, il database potrebbe non essere crittografato quando si attiva la crittografia. Se si modificano le chiavi di crittografia, potrebbe verificarsi un'asserzione.
Causa
Questo problema si verifica perché, se una chiave di crittografia del database non è in uno stato crittografato e la chiave viene modificata, il successivo aggiornamento della chiave copia la parte chiave di decrittografia, ma non copia correttamente l'impostazione dello stato di crittografia. In SQL Server 2012, dopo un'analisi di decrittografia, viene mantenuta la decrittazione nell'intestazione FCB (file Control Block) e la decrittografia viene rimossa solo quando la chiave viene eliminata. Quando la crittografia è disattivata, c'è una modifica chiave e quindi si prova a attivare la crittografia, la visualizzazione a gestione dinamica (DMV) Mostra che la crittografia è stata completata. Tuttavia, l'analisi di crittografia non viene eseguita e le pagine non vengono crittografate.
Risoluzione
Informazioni sull'aggiornamento cumulativo
SQL Server 2012
La correzione di questo problema è stata rilasciata per la prima volta nell'aggiornamento cumulativo 1. Per altre informazioni su come ottenere questo pacchetto di aggiornamento cumulativo per SQL Server 2012, fare clic sul numero dell'articolo della Microsoft Knowledge Base seguente per visualizzare l'articolo:
2679368 Pacchetto di aggiornamento cumulativo 1 per SQL Server 2012Nota Poiché le build sono cumulative, ogni nuova versione di correzione contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nella versione precedente di SQL Server 2012 FIX. Ti consigliamo di considerare l'applicazione della versione di correzione più recente che contiene questo hotfix. Per ulteriori informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo nella Microsoft Knowledge Base:
2692828 Build di SQL Server 2012 rilasciate dopo il rilascio di SQL Server 2012
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".
Soluzione alternativa
Per risolvere il problema, eliminare la chiave di crittografia ogni volta che si disattiva la crittografia in un database.
Ulteriori informazioni
Informazioni sullo stack delle chiamate
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