Проверка таблицы реестра для обнаружения незаконного изменения
Область применения: 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 обозначает идентификатор блока, в котором сохранен последний хэш-код в расположении 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.