Simptomi
Pieņemiet, ka datu bāzē tiek regulāri ieslēgta šifrēšana un tās ir arī regulāri jāmaina šifrēšanas taustiņi datu bāzē, izmantojot SQL Server 2012. Šajā scenārijā datu bāze, iespējams, nav šifrēta, ieslēdzot šifrēšanu. Ja maināt šifrēšanas atslēgas, var tikt parādīts apgalvojums.
Cēlonis
Šī problēma rodas tāpēc, ka, ja datu bāzes šifrēšanas atslēga (DEK) nav šifrētā stāvoklī un atslēga ir mainīta, tālākās atjaunināšanas atslēga kopē DEK atslēgu, bet tā nekopē šifrēšanas stāvokļa iestatījumu pareizi. Izmantojot SQL Server 2012, pēc atšifrēšanas skenēšanas DEK failu vadības bloka (FCB) galvenē tiek glabāts, un DEK tiek noņemts tikai tad, kad taustiņš tiek pārtraukts. Ja šifrēšana ir izslēgta, ir mainītas izmaiņas, un pēc tam mēģināt ieslēgt šifrēšanu, dinamiskās pārvaldības skats (DMV) norāda, ka šifrēšana ir pabeigta. Taču šifrēšanas pārbaude netiek veikta un lapas tiek atstātas nešifrētas.
Risinājums
Kumulatīvās atjaunināšanas informācija
SQL Server 2012
Šīs problēmas labojums pirmo reizi tika izlaists kumulatīvajā atjauninājumā 1. Lai iegūtu papildinformāciju par to, kā iegūt šo kumulatīvo atjaunināšanas pakotni SQL Server 2012, noklikšķiniet uz šī raksta numura, lai skatītu Microsoft zināšanu bāzes rakstu:
2679368 Kumulatīvās atjaunināšanas pakotne 1 SQL Server 2012Piezīme. Tā kā būvējums ir kumulatīvs, katrā jaunajā laidienā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā SQL Server 2012 labošanas laidienā. Iesakām apsvērt jaunāko labojumu laidienu, kurā ir iekļauts šis labojumfails. Lai iegūtu papildinformāciju, noklikšķiniet uz šī raksta numura, lai skatītu Microsoft zināšanu bāzes rakstu:
2692828 SQL Server 2012 būvējumi, kas tika izlaisti pēc tam, kad tika izlaists SQL Server 2012
Statusa
Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".
Risinājums
Lai novērstu šo problēmu, nolaidiet šifrēšanas atslēgu ik reizi, kad datu bāzē izslēdzat šifrēšanu.
Papildinformācija
Informācija par datu steku
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