Проверка таблицы реестра для обнаружения незаконного изменения
Область применения:SQL Server 2022 (16.x)
База данных SQL Azure Управляемый экземпляр SQL Azure
В этой статье вы узнаете, как проверить целостность данных в таблицах реестра. Если вы настроили автоматическое дайджест-хранилище в базе данных, выполните шаги из раздела о использовании T-SQL с автоматическим дайджест-хранилищем. В противном случае перейдите к разделу T-SQL с использованием ручного создания дайджестов.
Предварительные требования
- Чтобы использовать Базу данных SQL Azure или Управляемый экземпляр SQL Azure, у вас должна быть активная подписка на Azure. Если ее нет, создайте бесплатную учетную запись.
- Создайте и используйте обновляемые таблицы реестра или создайте и используйте таблицы реестра только для добавления данных.
- SQL Server Management Studio или Azure Data Studio.
- Параметр базы данных ALLOW_SNAPSHOT_ISOLATION необходимо включить в базе данных, прежде чем выполнять хранимые процедуры проверки.
Выполнение проверки реестра для базы данных
Подключитесь к базе данных, используя SQL Server Management Studio или Azure Data Studio.
Создайте новый запрос с помощью следующей инструкции T-SQL:
DECLARE @digest_locations NVARCHAR(MAX) = (SELECT * FROM sys.database_ledger_digest_locations FOR JSON AUTO, INCLUDE_NULL_VALUES);SELECT @digest_locations as digest_locations; BEGIN TRY EXEC sys.sp_verify_database_ledger_from_digest_storage @digest_locations; SELECT 'Ledger verification succeeded.' AS Result; END TRY BEGIN CATCH THROW; END CATCH
Примечание.
Сценарий проверки также можно найти на портале Azure. Откройте портал Azure и найдите базу данных для проверки. На вкладке Безопасностьвыберите параметр Реестр. В области Реестр выберите </> Проверить базу данных.
Выполните запрос. Вы увидите, что digest_locations возвращает текущее местоположение, где хранятся дайджесты вашей базы данных, и все предыдущие местоположения. В окне Результаты отображается сообщение об успешности проверки реестра.
Откройте набор результатов digest_locations, чтобы просмотреть местоположения ваших дайджестов. Следующий пример демонстрирует два расположения дайджестов для этой базы данных.
path обозначает расположение дайджестов.
last_digest_block_id указывает ID блока последнего дайджеста, сохранённого по пути path.
is_current указывает на то, является ли местоположение в path текущим (true) или предыдущим (false).
[ { "path": "https:\/\/digest1.blob.core.windows.net\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000", "last_digest_block_id": 10016, "is_current": true }, { "path": "https:\/\/jandersneweracl.confidential-ledger.azure.com\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000", "last_digest_block_id": 1704, "is_current": false } ]
Внимание
При выполнении проверки реестра проверьте расположение digest_locations и убедитесь, что использованные для этой проверки хэш-коды получены из правильного расположения. Убедитесь, что привилегированный пользователь не изменил расположение хранилища дайджестов на незащищенное, например на службу хранилища Azure, без настроенной и заблокированной политики неизменяемости.
Операция проверки возвращает следующее сообщение в окне Результаты.
Если в базе данных не обнаружены незаконные изменения, сообщение будет таким:
Ledger verification successful
Если в базе данных обнаружены незаконные изменения, в окне Сообщения появится следующая ошибка:
Failed to execute query. Error: The hash of block xxxx in the database ledger doesn't match the hash provided in the digest for this block.