Aracılığıyla paylaş


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ğrulayacaksınız. Veritabanınızda Otomatik özet depolama yapılandırdıysanız otomatik özet depolamakullanarakT-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 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
    

    Uyarı

    Doğrulama betiği Azure portalında da bulunabilir. azure portal açın ve doğrulamak istediğiniz veritabanını bulun. Güvenlik'nde Ledger seçeneğini belirleyin. Ledger bölmesinde </> Doğrula veritabanı'i seçin.

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

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

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

    • yol özetlerin konumunu gösterir.

    • last_digest_block_id, yolu konumunda depolanan son özetin blok kimliğini gösterir.

    • is_current, yolu üzerindeki konumunun geçerli (doğru) mi yoksa önceki (yanlış) mi olduğunu 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ığından emin olmak için digest_locations konumunu inceleyin. 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 olmak istiyorsunuz.

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

    • Veritabanınızda herhangi bir değişiklik yapılmadıysa ileti şu şekildedir:

      Ledger verification successful
      
    • Veritabanınızda değişiklik yapıldıysa, İ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.