Kurcalama algılamak için kayıt defteri tablosunu doğrulama

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri Azure SQL VeritabanıAzure SQL Yönetilen Örneği

Bu makalede, kayıt defteri tablolarınızdaki verilerin bütünlüğünü doğrulaacaksınız. Veritabanınızda Otomatik özet depolamayı yapılandırdıysanız, otomatik özet depolamayı kullanarak T-SQL bölümünü izleyin. Aksi takdirde, T-SQL'i, el ile oluşturulmuş bir özet bölümünü kullanarak takip edin.

Önkoşullar

Veritabanı için kayıt defteri doğrulamasını çalıştırma

  • Otomatik özet saklama kullanarak T-SQL
  • T-SQL'i, el ile oluşturulmuş bir özet ile kullanarak
  1. SQL Server Management Studio kullanarak veritabanınıza bağlanın.

  2. Aşağıdaki T-SQL deyimiyle yeni bir sorgu oluşturun:

    DECLARE @digest_locations AS NVARCHAR (MAX) = (SELECT *
                                                   FROM sys.database_ledger_digest_locations
                                                   FOR JSON AUTO, INCLUDE_NULL_VALUES);
    SELECT @digest_locations AS digest_locations;
    BEGIN TRY
        EXECUTE sys.sp_verify_database_ledger_from_digest_storage @digest_locations;
        SELECT 'Ledger verification succeeded.' AS Result;
    END TRY
    BEGIN CATCH
        THROW;
    END CATCH
    

    Uyarı

    Doğrulama betiğini Azure portalında da bulabilirsiniz. azure portal açın ve doğrulamak istediğiniz veritabanını bulun. Güvenlik'nde Ledger seçeneğini belirleyin. Kayıt Defteri bölmesinde Veritabanını doğrula'yı seçin.

  3. Sorguyu çalıştır. Veritabanı özetlerinizin depolandığı geçerli konumu ve önceki konumları döndürdüğünü digest_locations görürsünüz. Sonuç, kayıt defteri doğrulama işleminin başarısını veya başarısızlığını döndürür.

    Visual Studio Code kullanarak kayıt defteri doğrulamayı çalıştırmanın ekran görüntüsü.

  4. digest_locations Özetlerinizin konumlarını görüntülemek için sonuç kümesini açın. Aşağıdaki örnekte bu veritabanı için iki özet depolama konumu gösterilmektedir:

    • path özetlerin konumunu gösterir.

    • last_digest_block_id, path konumunda depolanan son özetin blok kimliğini belirtir.

    • is_current içindeki path konumun geçerli (true) veya önceki (yanlış) bir konum olup olmadığını gösterir.

      [
      {
           "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
      }
      ]
      

    Önemli

    Kayıt defteri doğrulamasını çalıştırdığınızda, doğrulamada kullanılan özetlerin beklediğiniz konumlardan alındığını doğrulamak için digest_locations öğesinin konumunu denetleyin. Ayrıcalıklı bir kullanıcının özet depolamanın konumlarını, yapılandırılmış ve kilitli bir değiştirilemezlik ilkesi olmadan Azure Depolama gibi korumasız bir depolama konumuna değiştirmediğinden emin olun.

  5. Doğrulama, Sonuçları penceresinde aşağıdaki iletiyi döndürür.

    • Veritabanınızda herhangi bir kurcalama yoksa ileti şu şekilde olur:

      Ledger verification successful
      
    • Veritabanınızda kurcalama varsa , İletiler penceresinde aşağıdaki hata görüntülenir:

      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.