Проверка таблицы реестра для обнаружения незаконного изменения

Область применения: SQL Server 2022 (16.x) База данных SQL Azure Управляемый экземпляр SQL Azure

В этой статье вы узнаете, как проверить целостность данных в таблицах реестра. Если вы настроили автоматическое дайджест-хранилище в базе данных, выполните T-SQL с помощью раздела автоматического дайджеста. В противном случае перейдите к разделу T-SQL с использованием ручного создания дайджестов.

Необходимые компоненты

Выполнение проверки реестра для базы данных

  1. Подключитесь к базе данных, используя SQL Server Management Studio или Azure Data Studio.

  2. Создайте новый запрос с помощью следующей инструкции 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 и найдите базу данных для проверки. На вкладке Безопасностьвыберите параметр Реестр. В области Реестр выберите </> Проверить базу данных.

  3. Выполните запрос. Вы увидите, что digest_locations возвращает текущее и все предыдущие расположения хэш-кодов базы данных. В окне Результаты отображается сообщение об успешности проверки реестра.

    Screenshot of running ledger verification by using Azure Data Studio.

  4. Откройте набор результатов 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, без настроенной и заблокированной политики неизменяемости.

  5. Операция проверки возвращает следующее сообщение в окне Результаты.

    • Если в базе данных не обнаружены незаконные изменения, сообщение будет таким:

      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.