Príznaky
Predpokladajme, že pravidelne zapnete alebo vypnete šifrovanie v databáze a zároveň pravidelne meníte šifrovacie kľúče v databáze na serveri SQL Server 2012. V tomto scenári je možné, že databáza nie je zašifrovaná pri zapnutí šifrovania. Ak zmeníte šifrovacie kľúče, môže dôjsť k tvrdeniu.
Príčina
Tento problém sa vyskytuje, pretože v prípade, ak sa šifrovací kľúč databázy (DEK) nenachádza v šifrovanom stave a kľúč sa zmení, ďalšia aktualizácia klávesu skopíruje kľúčovú časť DEK, ale nekopíruje správne nastavenie stavu šifrovania. V SQL Server 2012 po dešifrovaní scan sa DEK v hlavičke súboru Control Block (FCB) zachová a DEK sa odstráni iba vtedy, keď sa kľúč vynechá. Keď je šifrovanie vypnuté, je tu kľúčová zmena a potom sa pokúsite zapnúť šifrovanie, zobrazenie dynamického manažmentu (DMV) zobrazuje, že šifrovanie sa dokončilo. Kontrola šifrovania sa však nevykonala a strany nie sú zašifrované.
Riešenie
Kumulatívna aktualizácia informácií
SQL Server 2012
Oprava tohto problému bola prvýkrát vydaná v kumulatívnej aktualizácii 1. Ďalšie informácie o možnostiach získania tohto balíka kumulatívnych aktualizácií pre SQL Server 2012 nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na nasledovné číslo článku:
2679368 Kumulatívna aktualizácia balíka 1 pre SQL Server 2012Poznámka: Pretože zostavy sú kumulatívne, každé nové vydanie opraviť obsahuje všetky rýchlych opráv a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho SQL servera 2012 opraviť uvoľnenia. Odporúčame, aby ste zvážili uplatnenie najnovších opráv, ktoré túto rýchlu opravu obsahujú. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na príslušné číslo článku:
2692828 Zostavy SQL servera 2012, ktoré boli vydané po vydaní SQL servera 2012
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.
Alternatívne riešenie
Ak chcete tento problém obísť, presunutím šifrovacieho kľúča zakaždým, keď vypnete šifrovanie v databáze.
Ďalšie informácie
Informácie o zásobníku hovoru
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