Síntomas
Suponga que activa y desactiva el cifrado de forma regular en una base de datos y también cambia regularmente las claves de cifrado en la base de datos de SQL Server 2012. En este escenario, es posible que la base de datos no esté cifrada al activar el cifrado. Si cambia las claves de cifrado, es posible que se produzca una aserción.
Causa
Este problema se produce porque si una clave de cifrado de la base de datos (DEK) no está en un estado cifrado y se cambia la clave, la siguiente actualización de la clave copia la parte de clave de la DEK, pero no copia la configuración de estado de cifrado correctamente. En SQL Server 2012, después de un recorrido de descifrado, se mantiene la DEK en el encabezado de bloque de control de archivos (FCB), y el DEK se quita solo cuando se coloca la tecla. Cuando el cifrado está desactivado, hay un cambio clave y, a continuación, intenta activar el cifrado, la vista de administración dinámica (DMV) muestra que se completó el cifrado. Sin embargo, el análisis de cifrado no se realiza y las páginas no se cifran.
Resolución
Información sobre la actualización acumulativa
SQL Server 2012
La corrección para este problema se publicó por primera vez en la actualización acumulativa 1. Para obtener más información sobre cómo obtener este paquete de actualización acumulativa para SQL Server 2012, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2679368 Paquete de actualización acumulativa 1 para SQL Server 2012Nota Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de corrección de SQL Server 2012. Le recomendamos que considere la posibilidad de aplicar la versión de corrección más reciente que contenga este Hotfix. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2692828 Las compilaciones de SQL Server 2012 que se publicaron después de que se publicó SQL Server 2012
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".
Solución alternativa
Para evitar este problema, quite la clave de cifrado cada vez que desactive el cifrado en una base de datos.
Más información
Información de la pila de llamadas
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