Symptômes
Partez du principe que vous activez et désactivez régulièrement le chiffrement sur une base de données, ainsi que les clés de chiffrement de la base de données dans SQL Server 2012. Dans ce scénario, il est possible que la base de données ne soit pas chiffrée au moment de l’activation du chiffrement. Si vous modifiez les clés de chiffrement, une assertion peut se produire.
Cause
Ce problème se produit car, si une clé de chiffrement de base de données (DEK) ne se trouve pas dans un État chiffré et que la clé est modifiée, la prochaine mise à jour de la clé copie la partie clé du DEK, mais elle ne copie pas correctement l’état de chiffrement. Dans SQL Server 2012, après une analyse de déchiffrement, le DEK dans l’en-tête de bloc de contrôle de fichier (FCB) est conservé et DEK est supprimé uniquement lors de la suppression de la clé. Lorsque le chiffrement est désactivé, une modification est apportée et que vous essayez d’activer le chiffrement, la vue de gestion dynamique (DMV) indique que le chiffrement est terminé. Toutefois, l’analyse du chiffrement n’est pas exécutée et les pages ne sont pas chiffrées.
Résolution
Informations sur les mises à jour cumulatives
SQL Server 2012
Le correctif de ce problème a été émis pour la première fois dans la mise à jour cumulative 1. Pour plus d’informations sur la façon d’obtenir ce package de mise à jour cumulative pour SQL Server 2012, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :
2679368 Package de mise à jour cumulative 1 pour SQL Server 2012Remarque Dans la mesure où les builds sont cumulatives, chaque nouvelle version du correctif contient tous les correctifs et les correctifs de sécurité inclus dans l’ancienne version du correctif SQL Server 2012. Nous vous recommandons d’appliquer la version de correctif la plus récente qui contient ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2692828 Builds SQL Server 2012 publiées après la sortie de SQL Server 2012
Statut
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.
Solution de contournement
Pour contourner ce problème, déposez la clé de chiffrement chaque fois que vous désactivez un chiffrement sur une base de données.
Informations supplémentaires
Informations sur la pile d’appels
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