Aracılığıyla paylaş


Veritabanı doğrulaması

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

Ledger,ileriye doğru bütünlük adı verilen ve kayıt defteri tablolarınızdaki verilerde değişiklik olduğuna ilişkin kanıt sağlayan bir veri bütünlüğü biçimi sağlar. Veritabanı doğrulama işlemi, önceden oluşturulmuş bir veya daha fazla veritabanı özeti girişi olarak alır. Ardından, kayıt defteri tablolarının geçerli durumuna göre veritabanı kayıt defterinde depolanan karmaları yeniden hesaplar. Hesaplanan özetler giriş özetiyle eşleşmezse doğrulama başarısız olur. Hata, verilerin üzerinde oynandığını gösterir. Doğrulama işlemi algıladığına ilişkin tüm tutarsızlıkları bildirir.

Veritabanı doğrulama işlemi

Doğrulama işlemi tüm kayıt defteri ve geçmiş tablolarını tarar. Satırlarının SHA-256 karmalarını yeniden hesaplar ve doğrulama için kullanılan depolanmış prosedüre geçirilen veritabanı özeti dosyalarına karşılaştırır.

Kayıt defteri doğrulaması, veritabanındaki işlemler için tüm karmaları yeniden çözümlediğinden, büyük miktarda veriye sahip veritabanları için yoğun kaynak gerektiren bir işlem olabilir. Doğrulama maliyetini azaltmak için özellik, tek tek kayıt defteri tablolarını veya kayıt defteri tablolarının yalnızca bir alt kümesini doğrulama seçeneklerini kullanıma sunar.

Veritabanı doğrulamasını, otomatik özet depolama kullanmanıza veya özetleri el ile yönetmenize bağlı olarak, iki saklı yordam aracılığıyla gerçekleştirebilirsiniz.

Not

Doğrulama saklı yordamlarını çalıştırabilmeniz için ALLOW_SNAPSHOT_ISOLATION veritabanı seçeneğinin veritabanında etkinleştirilmesi gerekir.

Otomatik özet depolama kullanan veritabanı doğrulaması

Veritabanı özetlerini oluşturmak ve depolamak için otomatik özet depolamayı kullanırken, özet depolamanın konumu sistem kataloğu görünümündedir sys.database_ledger_digest_locations JSON nesneleri olarak kullanılır. Veritabanı doğrulamasını çalıştırmak, sp_verify_database_ledger_from_digest_storage sistem saklı yordamının yürütülmesinden oluşur. Veritabanı özetlerinin depolanacak şekilde yapılandırıldığı sys.database_ledger_digest_locations sistem kataloğu görünümündeki JSON nesnelerini belirtin.

Otomatik özet depolamayı kullandığınızda, kayıt defteri tablolarının yaşam döngüsü boyunca depolama konumlarını değiştirebilirsiniz. Örneğin özet dosyalarınızı depolamak için Azure sabit depolamayı kullanarak başlıyorsanız ancak daha sonra bunun yerine Azure Gizli Kayıt Defteri'ni kullanmak istiyorsanız, bunu yapabilirsiniz. Bu konum değişikliği sys.database_ledger_digest_locationsiçinde depolanır.

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.

Birden çok özet depolama konumu kullandığınızda doğrulamayı çalıştırmayı basitleştirmek için aşağıdaki betik özetlerin konumlarını getirir ve bu konumları kullanarak doğrulamayı yürütür.

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

El ile özet depolama kullanan veritabanı doğrulaması

Manuel özet depolama kullanarak veritabanı özetleri oluşturup depolarken, ledger veritabanını doğrulamak için saklı yordam sp_verify_database_ledger kullanılır. Özetin JSON içeriği saklı tutulan prosedüre eklenir. Veritabanı doğrulamasını çalıştırırken, veritabanındaki tüm tabloları doğrulamayı veya belirli tabloları doğrulamayı seçebilirsiniz.

Aşağıda, doğrulama için iki özet verisi geçirerek sp_verify_database_ledger saklı yordamını çalıştırmanın bir örneği bulunmaktadır:

EXECUTE sp_verify_database_ledger N'
[
    {
        "database_name":  "ledgerdb",
        "block_id":  0,
        "hash":  "0xDC160697D823C51377F97020796486A59047EBDBF77C3E8F94EEE0FFF7B38A6A",
        "last_transaction_commit_time":  "2020-11-12T18:01:56.6200000",
        "digest_time":  "2020-11-12T18:39:27.7385724"
    },
    {
        "database_name":  "ledgerdb",
        "block_id":  1,
        "hash":  "0xE5BE97FDFFA4A16ADF7301C8B2BEBC4BAE5895CD76785D699B815ED2653D9EF8",
        "last_transaction_commit_time":  "2020-11-12T18:39:35.6633333",
        "digest_time":  "2020-11-12T18:43:30.4701575"
    }
]';

sp_verify_database_ledger ve sp_verify_database_ledger_from_digest_storage için dönüş kodları 0 (başarı) veya 1 (başarısızlık) olur.

Tavsiye

İdeal olarak, saldırının gerçekleştiği zaman ile algılandığı zaman arasındaki boşluğu en aza indirmek ve hatta ortadan kaldırmak istersiniz. Microsoft, tahrifat algılandıktan sonra veritabanının günler veya aylar önceki haline geri yüklenmesini önlemek içindüzenli olarak defter doğrulaması yapılmasını önerir. Doğrulama aralığı müşteri tarafından belirlenir, ancak kayıt defteri doğrulamasının kaynak tüketebileceğini unutmayın. Bunu bir bakım penceresi sırasında veya yoğun olmayan saatlerde çalıştırmanızı öneririz.

Azure SQL Veritabanı'nda veritabanı doğrulaması zamanlama işlemi Elastik İşler veya Azure Otomasyonu ile yapılabilir. Azure SQL Yönetilen Örneği ve SQL Server'da veritabanı doğrulamasını zamanlamak için SQL Server Aracısı'nı kullanabilirsiniz.

İzinler

Veritabanı doğrulaması için VIEW LEDGER CONTENT izni gerekir. Kayıt defteri tablolarıyla ilgili izinlerle ilgili ayrıntılar için bkz. İzinler.