Sintomas
Suponha que você ative e desative a criptografia regularmente em um banco de dados e também Altere regularmente as chaves de criptografia no banco de dados do SQL Server 2012. Nesse cenário, o banco de dados pode não ser criptografado quando você ativa a criptografia. Se você alterar as chaves de criptografia, pode ocorrer uma asserção.
Causa
Esse problema ocorre porque, se uma chave de criptografia do banco de dados (DEK) não estiver em um estado criptografado e a chave for alterada, a próxima atualização da chave copiará a parte da chave do DEK, mas não copiará a configuração do estado de criptografia corretamente. No SQL Server 2012, após uma verificação de descriptografia, o DEK no cabeçalho de bloco de controle de arquivo (FCB) é mantido, e o DEK é removido somente quando a tecla é descartada. Quando a criptografia está desativada, há uma alteração chave e, em seguida, você tenta ativar a criptografia, o modo de exibição de gerenciamento dinâmico (DMV) mostra que a criptografia foi concluída. No entanto, a verificação de criptografia não é realizada e as páginas não são criptografadas.
Resolução
Informações sobre a atualização cumulativa
SQL Server 2012
A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 1. Para obter mais informações sobre como obter este pacote de atualização cumulativa do SQL Server 2012, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:
2679368 Pacote de atualização cumulativa 1 para SQL Server 2012Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2012 Fix. Recomendamos que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:
2692828 As compilações do SQL Server 2012 lançadas após o lançamento do SQL Server 2012
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Solução alternativa
Para contornar esse problema, descarte a chave de criptografia toda vez que você desativar a criptografia em um banco de dados.
Informações adicionais
Informações de pilha de chamadas
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