Symptomy
Załóżmy, że należy regularnie włączać i wyłączać szyfrowanie bazy danych, a także regularnie zmieniać klucze szyfrowania w bazie danych programu SQL Server 2012. W tym scenariuszu baza danych może nie być szyfrowana po włączeniu szyfrowania. Jeśli zmienisz klucze szyfrowania, może wystąpić potwierdzenie.
Przyczyna
Ten problem występuje, ponieważ jeśli klucz szyfrowania bazy danych (DEK) nie jest zaszyfrowany, a klucz został zmieniony, Następna aktualizacja klucza powoduje skopiowanie klucza z części DEK, ale nie powoduje prawidłowego ustawienia stanu szyfrowania. W programie SQL Server 2012 po przeprowadzeniu skanowania deszyfrowania w nagłówku bloku sterowania plikami (FCB) jest zachowywany, a program DEK jest usuwany tylko wtedy, gdy klawisz zostanie upuszczony. Gdy szyfrowanie jest wyłączone, nastąpiła zmiana klucza, a następnie próba włączenia szyfrowania powoduje, że zakończono szyfrowanie widoku zarządzania dynamicznego (DMV). Jednak skanowanie szyfrowania nie jest wykonywane, a strony nie są szyfrowane.
Rozwiązanie
Informacje o aktualizacji zbiorczej
Program SQL Server 2012
Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 1. Aby uzyskać więcej informacji na temat uzyskiwania tego pakietu aktualizacji zbiorczej dla programu SQL Server 2012, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2679368 Pakiet aktualizacji zbiorczej 1 dla programu SQL Server 2012Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2012. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
2692828 Kompilacje programu SQL Server 2012 wydane po wydaniu programu SQL Server 2012
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".
Obejście
Aby obejść ten problem, należy porzucić klucz szyfrowania przy każdym włączeniu szyfrowania w bazie danych.
Więcej informacji
Informacje o stosie połączeń
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