
CVE-2019-1402로 도입된 "Query is corrupt" 오류에 대한 최신 해결 방법
CVE-2019-1402와 함께 MS Access에 도입된 쿼리가 손상되었습니다 오류에 대한 최신 해결 방법입니다.
관리자 수준에서 적용해야 하는 다른 해결 방법도 있습니다(예: 오류가 있는 업데이트를 제거). 대조적으로, 여기 제공된 해결 방법의 의도는 가능한 한 적은 작업으로 MDB/ACCDB 콘텐츠 자체를 자동으로 변경하여 작동하도록 하는 것입니다.
Microsoft는 2019-12-10(패치 데이)에 이 문제에 대한 수정 사항을 출시했으며, 기본적으로 WSUS 등을 통해 자동으로 설치됩니다. 따라서 이 해결 방법은 수정 사항이 적용된 후에는 더 이상 필요하지 않으며, 이를 사용한 사람은 RemoveWorkaroundForCorruptedQueryIssue() 함수를 호출하여 원래 애플리케이션 상태를 복원할 수 있습니다.
VBA Editor -> Tools -> References에서 Microsoft DAO 3.6 Object Library(하위 호환성) 또는 Microsoft Office x.x Access Database Engine Object Library 참조가 활성화되어 있는지 확인하세요(자세한 내용은 #1 참조).
basWorkaround.bas 모듈을 사용하여 Microsoft가 제안한 해결 방법(테이블 대신 쿼리 사용)을 자동으로 구현하세요. 예방 차원에서 먼저 데이터베이스를 백업하십시오.
AddWorkaroundForCorruptedQueryIssue()를 호출하여 해결 방법을 적용하고, RemoveWorkaroundForCorruptedQueryIssue()를 호출하여 언제든지 제거할 수 있습니다.
AddWorkaroundForCorruptedQueryIssue()는 모든 비시스템 테이블에 접미사 _Table을 추가합니다. 예를 들어, IceCreams 테이블은 IceCreams_Table로 이름이 바뀝니다.
또한 원래 테이블 이름을 가진 새 쿼리를 생성하며, 이 쿼리는 이름이 바뀐 테이블의 모든 열을 선택합니다. 예를 들어, 쿼리 이름은 IceCreams이고 SQL select * from [IceCreams_Table]을 실행합니다.
RemoveWorkaroundForCorruptedQueryIssue()는 반대 작업을 수행합니다.
저는 SQL Server와 같은 외부 비-MDB 테이블을 포함하여 400개 이상의 다양한 종류의 테이블이 있는 대규모 프로젝트에서 이 해결 방법을 사용하고 있습니다.
제 경우에는 과거에 USysRibbons_Table을 만들 때 시스템 테이블로 표시하지 않았기 때문에 수동으로 USysRibbons로 다시 이름을 바꿔야 했습니다.
다음 사항을 염두에 두세요:
TableDefs!MyTableName과 같은 명령문을 명시적으로 사용하는 경우 코드/UI에서 해당 인스턴스를 찾아 바꿔야 합니다).