Triệu chứng
Giả định rằng bạn thường xuyên bật tính năng mã hóa và tắt trên cơ sở dữ liệu và cũng thường xuyên thay đổi các khóa mã hóa trên cơ sở dữ liệu trong SQL Server 2012. Trong trường hợp này, cơ sở dữ liệu có thể không được mã hóa khi bạn bật tính năng mã hóa. Nếu bạn thay đổi các khóa mã hóa, một khẳng định có thể xảy ra.
Nguyên nhân
Sự cố này xảy ra vì nếu một khóa mã hóa cơ sở dữ liệu (DEK) không có trong trạng thái đã mã hóa và khóa được thay đổi, bản Cập Nhật tiếp theo của bản sao chính là phần chính của DEK, nhưng nó không sao chép thiết đặt chính xác cho trạng thái mã hóa. Trong SQL Server 2012, sau khi quét giải mã, thì DEK trong phần đầu trang kiểm soát khối (FCB) được giữ lại và DEK chỉ bị loại bỏ khi phím bị bỏ. Khi tắt mã hóa, có một thay đổi then chốt, sau đó bạn cố gắng bật tính năng mã hóa, dạng xem quản lý động (các) Hiển thị mã hóa đã hoàn thành. Tuy nhiên, việc quét mã hóa không được thực hiện và các trang được trái không được mã hóa.
Giải pháp
Thông tin Cập Nhật tích lũy
SQL Server 2012
Bản sửa lỗi cho sự cố này lần đầu tiên được phát hành trong bản Cập Nhật Cumulative Update 1. Để biết thêm thông tin về cách tải gói Cập Nhật tích lũy cho SQL Server 2012, hãy bấm số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
2679368 Gói Cập Nhật tích lũy 1 cho SQL Server 2012Lưu ý Vì bản dựng được tích lũy, mỗi bản phát hành khắc phục sự cố mới chứa tất cả các hotfix và tất cả các bản sửa lỗi bảo mật đã được đưa vào bản phát hành khắc phục SQL Server 2012 trước đó. Chúng tôi khuyên bạn nên cân nhắc việc áp dụng bản phát hành bản sửa lỗi gần đây nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
2692828 Bản dựng SQL Server 2012 đã được phát hành sau khi SQL Server 2012 đã được phát hành
Trạng thái
Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
Cách giải quyết
Để giải quyết vấn đề này, hãy thả khóa mã hóa mỗi khi bạn tắt mã hóa trên cơ sở dữ liệu.
Thông tin Bổ sung
Thông tin về ngăn xếp cuộc gọi
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