Como aceder às digestões armazenadas na ACL

Nota

O livro de dados Azure SQL Database está atualmente em pré-visualização pública.

Este artigo mostra-lhe como aceder a uma digestão de contabilidade Azure SQL Database armazenada em Azure Confidential Ledger (ACL) para obter garantias de segurança e integridade de ponta a ponta. Através deste artigo, explicaremos como aceder e verificar a integridade da informação armazenada.

Pré-requisitos

Como funciona a integração?

O servidor Azure SQL calcula periodicamente as digestões da base de dados de livros e armazena-as em Azure Confidential Ledger. A qualquer momento, um utilizador pode validar a integridade dos dados descarregando as digestões da Azure Confidential Ledger e comparando-os com as digestões armazenadas no livro de contabilidade da Base de Dados Azure SQL. Os seguintes passos explicarão.

1. Encontre a localização da Digest

Nota

A consulta retornará mais de uma linha se várias instâncias do Azure Confidential Ledger forem usadas para armazenar a digestão. Para cada linha, repita os passos 2 a 6 para descarregar as digestões de todas as instâncias do Azure Confidential Ledger.

Utilizando o SQL Server Management Studio (SSMS),executar a seguinte consulta. A saída mostra o ponto final da instância Azure Confidential Ledger onde as digestões são armazenadas.

SELECT * FROM sys.database_ledger_digest_locations WHERE path like '%.confidential-ledger.azure.com%

2. Determinar a sub-casa

Estamos interessados no valor da coluna do caminho a partir da saída da consulta. É constituída por duas partes, nomeadamente a host name . e a subledgerid . Como exemplo, na https://contoso-ledger.confidential-ledger.azure.com/sqldbledgerdigests/ledgersvr2/ledgerdb/2021-04-13T21:20:51.0000000 Url, o host name é e o é https://contoso-ledger.confidential-ledger.azure.com subledgerid sqldbledgerdigests/ledgersvr2/ledgerdb/2021-04-13T21:20:51.0000000 . Vamos usá-lo no passo 4 para fazer o download das digestão.

3. Obter um sinal AD Azure

A Azure Confidential Ledger API aceita um símbolo do Portador do Azure Ative (Azure AD) como identidade de autor. Esta identidade necessita de acesso à ACL via Azure Resource Manager durante o fornecimento. O utilizador que tinha ativado o livro de contabilidade na Base de Dados SQL tem automaticamente acesso ao Administrador da Azure Confidential Ledger. Para obter um token, o utilizador precisa de autenticar usando o Azure CLI com a mesma conta que foi utilizada com o portal Azure. Uma vez autenticado o utilizador, podem utilizar o AzureCliCredential para recuperar um token ao portador e ligar para a Azure Confidential Ledger API.

Faça login no Azure AD usando a identidade com acesso à ACL.

az login

Recupere o símbolo do portador.

from azure.identity import AzureCliCredential
credential = AzureCliCredential()

4. Descarregue as digestão da Azure Confidential Ledger

O seguinte script Python descarrega as digestões da Azure Confidential Ledger. O script utiliza a biblioteca de clientes Azure Confidential Ledger para Python.

from azure.identity import AzureCliCredential
from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.identity_service import ConfidentialLedgerIdentityServiceClient

ledger_id = "contoso-ledger"
identity_server_url = "https://identity.confidential-ledger.core.azure.com"
sub_ledger_id = "sqldbledgerdigests/ledgersvr2/ledgerdb/2021-04-13T21:20:51.0000000"
ledger_host_url = f"https://{ledger_id}.confidential-ledger.azure.com"
initial_path = f"/app/transactions?api-version=0.1-preview&subLedgerId={sub_ledger_id}"

identity_client = ConfidentialLedgerIdentityServiceClient(identity_server_url)
network_identity = identity_client.get_ledger_identity(
    ledger_id=ledger_id
)

ledger_tls_cert_file_name = f"{ledger_id}_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity.ledger_tls_certificate)

credential = AzureCliCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint=ledger_host_url, 
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

ranged_result = ledger_client.get_ledger_entries(
    sub_ledger_id=sub_ledger_id
)

entries = 0

for entry in ranged_result:
    entries += 1
    print(f"\nTransaction id {entry.transaction_id} contents: {entry.contents}")

if entries == 0:
    print("\n***No digests are found for the supplied SubledgerID.")
else:
    print("\n***No more digests were found for the supplied SubledgerID.")

5. Descarregue as Digestões do Servidor SQL

Nota

Esta é uma forma de confirmar que as hashes armazenadas no livro-razão Azure SQL Database não mudaram ao longo do tempo. Para obter uma auditoria completa da integridade do livro de dados Azure SQL Database, consulte como verificar uma tabela de livros para detetar adulteração.

Utilizando SSMS,executar a seguinte consulta. A consulta devolve as digestões dos blocos de Gênesis.

SELECT * FROM sys.database_ledger_blocks

6. Comparação

Compare a digestão recuperada do Azure Confidential Ledger com a digestão devolvida da sua base de dados SQL usando a block_id chave. Por exemplo, a digestão block_id = 1 é o valor da previous_block_hash coluna na block_id = 2 linha. Da mesma forma, para block_id = 3 , é o valor da previous_block_id coluna na block_id = 4 linha. Uma incompatibilidade no valor do haxixe é um indicador de uma potencial adulteração de dados.

Se for suspeitar de adulteração de dados, consulte como verificar uma tabela de livros para detetar adulteração para realizar uma auditoria completa do livro de contabilidade da Base de Dados Azure SQL.

Passos seguintes