SlideShare a Scribd company logo
Azure SQL Database Ledger
Gianluca Hotz
@glhotz
Data Platform MVP - Presidente UGISS.ORG
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Chi sono?
• Gianluca Hotz | @glhotz | ghotz@ugiss.org
• Consulente indipendente
• 25 anni su SQL Server (dalla 4.21 nel 1996)
• Modellazione e sviluppo database, dimensionamento e amministrazione
database server, aggiornamenti e migrazioni, performance tuning
• Community
• 23 anni Microsoft MVP SQL Server/Data Platform (dal 1998)
• VMware Experts SQL Server
• Fondatore e presidente UGISS (ex «PASS Chapter»)
• (Co-organizzatore DAMAG Meetup Community)
#CDays15 – Milano 24, 25 e 26 Marzo 2015
Tecnologie «Ledger» e «Digital Trust»
Le aziende si stanno spostando da
intermediari e audit manuali che sono
lenti e costosi…
...a tecnologie «Ledger» che riducono i
costi, fanno risparmiare tempo e
riducono i rischi
#CDays15 – Milano 24, 25 e 26 Marzo 2015
Previsioni crescita mercato «blockchain»
https://www.forbes.com/sites/robertanzalone/2020/05/13/will-enterprise-
blockchain-survive-a-new-report-says-that-the-blockchain-technology-market-
will-reach-21-billion-by-2025/#7a5f793954b8
Gartner Predicts 2019: Blockchain Technologies
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Transaction
Node(s)
Member 2
Validator
Node(s)
Transaction
Node(s)
Member 3
Validator
Node(s)
Transaction
Node(s)
Member 1
Validator
Node(s)
No data integrity
off-chain
«Blockchain» esagerate in scenari centralizzati
• Decentramento richiede a tutte le parti di
ospitare nodi per partecipare al consenso
• Regole di «governance» devono essere
stabilite dal consorzio e distribuite/gestite
• Latenza associata a consenso può influire
su velocità effettiva transazioni
(<1000 TPS per «Ethereum»
• Archiviazione «off-chain» per
interrogazioni è tipica, ma integrità si perde
nel processo
• Sistemi personalizzati con tool immaturi
rendono sviluppo e gestione impegnativi
#CDays15 – Milano 24, 25 e 26 Marzo 2015
Rende dati in SQL a
prova di manomissione
tramite crittografia
Fornisce traccia
cronologica delle
modifiche, verificata
tramite prove
crittografiche
Lo stesso SQL Server già
usato in Azure e «on-
premises»
Azure SQL Database Ledger
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Append-Only
Ledger Table
Trusted
Storage
Database Ledger
Block N Block N-1 Block N-2
Updatable
Ledger Table
History Table
Ledger View
Tabelle «Ledger»
• «Updatable» permettono «insert/update/delete»
• Cronologia aggiornamento mantenuta tabella
storica e nella «Ledger View» di facile consultazione
• Integrità tabelle «aggiornabile» e «storico»
mantenuta tramite collegamenti crittografici nel
«Database Ledger»
• Ricevute digitali caricate periodicamente in storage
attendibile configurato dal cliente
• Cliente può utilizzare ricevute digitali per verificare
integrità dei dati
• «Append-Only» permesso solo «insert»
• rimuovono necessità tabella «storico»
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
«Database Ledger»
• Cattura incrementalmente stato database
• A livello logico: «blockchain» e strutture dati «Merkle Tree»
• Cattura anche metadati transazione (es. timestamp, utente)
• Blocchi e informazioni transazioni in tabelle di sistema
• sys.database_ledger_transactions
• sys.database_ledger_blocks
• Blocchi chiusi
• ogni 30 secondi
• oppure esecuzione manuale sys.sp_generate_database_ledger_digest
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
«Database Digest»
• Hash ultimo blocco «Ledger»
• Rappresenta stato di tutte le tabelle «Ledger»
• Devono essere mantenuti in uno storage affidabile e immutabile
• Altrimenti si potrebbero manomettere le informazioni (in teoria)
• Possibilità di generarli manualmente o in automatico
• Generati in automatico possono essere anche salvati in automatico
• «Immutable Blob Storage»
• «Azure Confidential Ledger» (ACL)
#CDays15 – Milano 24, 25 e 26 Marzo 2015
Storage attendibile
«Immutable Blob Storage»
• Storage «Write Once, Read Many» basato
su policy
• BLOB possono essere impostati in sola
lettura per intervallo specificato
• Dati bloccati solo funzionalmente in base
a policy
• Supporto per «audit logging» ma
creatore log deve essere considerato
attendibile
• Microsoft è la «Trusted Computing Base»
«Azure Confidential Ledger» (ACL)
• Storage «Write Once, Read Many» in
perpetuo
• BLOB scritti nel «Ledger» non possono
essere modificati
• Utilizza «Confidential Enclaves» a prova di
manomissione
• Crea ricevute transazioni e file «Ledger»
serializzati contenenti informazioni che
possono essere verificate dai clienti
• Microsoft è fuori dalla «TCB», codice
sorgente è open source (Confidential
Consortium Framework)
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Verifica del «Ledger»
• Manomissione possibile a meno di modifiche impedite/tracciate
• Es. modifica diretta file dati, DBCC WRITEPAGE ecc.
• Verifica ricalcola tutti gli hash e li confronta con i «digest»
• Operazione richiede uso intensivo di risorse
• Verificare
• quando necessario (es. sospetto manomissione, audit)
• su base ricorrente (es. giornalmente, ogni ora)
• Verifica tramite procedura di sistema dipende da modalità salvataggio
• automatico: passando indirizzo storage
• manuale: passando documento JSON con «Digest»
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
«Ledger auditing»
• Nuovi eventi SQL Audit
• ENABLE LEDGER
• Creazione tabelle (o conversione, non ancora supportata)
• ALTER LEDGER
• Eliminazione/cambio nome tabelle (non ancora supportati)
• GENERATE LEDGER DIGEST
• VERIFY LEDGER
• LEDGER_OPERATION_GROUP
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Demo
Abilitazione Database Ledger
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Selezione opzione «deployment»
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Creazione Database
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Configurazione «Ledger»
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
«Digest Storage»
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Demo
Ledger Tables
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Tabella Aggiornabile
CREATE SCHEMA [Account];
GO
CREATE TABLE [Account].[Balance]
(
[CustomerID] int NOT NULL PRIMARY KEY CLUSTERED
, [LastName] varchar(50) NOT NULL
, [FirstName] varchar(50) NOT NULL
, [Balance] decimal(10,2) NOT NULL
)
WITH (
SYSTEM_VERSIONING = ON --(HISTORY_TABLE = [Account].[BalanceHistory])
, LEDGER = ON --(LEDGER_VIEW = [Account].[BalanceLedgerView])
);
GO
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Transazioni di inserimento
-- Prima transazione
INSERT INTO [Account].[Balance]
VALUES
(1, 'Jones', 'Nick', 50);
GO
-- Seconda transazione
INSERT INTO [Account].[Balance]
VALUES
(2, 'Smith', 'John', 500)
, (3, 'Smith', 'Joe', 30)
, (4, 'Michaels', 'Mary', 200);
GO
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Selezione da tabella
-- Di default le colonne con le informazioni relative alle
-- transazioni non vengono tornate (trasparente applicazioni)
SELECT *
FROM [Account].[Balance];
GO
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Selezione da tabella campi aggiuntivi
-- Devono essere selezionate esplicitamente
SELECT *
, [ledger_start_transaction_id]
, [ledger_end_transaction_id]
, [ledger_start_sequence_number]
, [ledger_end_sequence_number]
FROM [Account].[Balance];
GO
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Aggiornamento
UPDATE[Account].[Balance]
SET[Balance] = 100
WHERE[CustomerID] = 1;
GO
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Interrogazione dopo aggiornamento
-- Interroghiamo la tabella aggiornabile, quella di storico e la vista
SELECT *
,[ledger_start_transaction_id]
,[ledger_end_transaction_id]
,[ledger_start_sequence_number]
,[ledger_end_sequence_number]
FROM [Account].[Balance];
SELECT * FROM [Account].[MSSQL_LedgerHistoryFor_1525580473];
SELECT * FROM [Account].[Balance_Ledger] ORDER BY [ledger_transaction_id];
GO
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Risultato interrogazione
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Tabella «Append-Only»
CREATE SCHEMA [AccessControl];
GO
CREATE TABLE [AccessControl].[KeyCardEvents]
(
[EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED
, [AccessOperationDescription] nvarchar(MAX) NOT NULL
, [Timestamp] datetime2 NOT NULL
)
WITH (
LEDGER = ON (APPEND_ONLY = ON)
);
GO
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Inserimento e aggiornamento
-- Inseriamo una prima riga
INSERT INTO [AccessControl].[KeyCardEvents]
VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
GO
-- Se proviamo a fare un'aggiornamento, da errore
UPDATE [AccessControl].[KeyCardEvents]
SET[EmployeeID] = 34184
WHERE[EmployeeID] = 43869;
GO
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Demo
Verifica Database
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Verifica Database
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Limitazioni generali
• Opzione a livello di database non può essere disabilitata
• No conversione tabelle esistenti
• No cambio di nome o spostamento di «schema»
• No eliminazione dati tabelle di storico (tabelle aggiornabili)
• Transazione può aggiornare solo (!) 200 tabelle
• «Long-term backups» (LTR) non supportati
• «Ledger» aggiornabili ereditano limitazioni tabelle temporali
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Limitazioni di interoperabilità
• Tabelle «In-memory» non supportate
• No operazioni di SWITCH IN/OUT
• No indici di tipo «Full-Text»
• No indice «non-clustered rowstore» con «clustered columnstore»
• No «Change Tracking»
• No tabelle FILETABLE
• No utilizzo API UPDATETEXT e WRITETEXT
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Limitazioni schema
• Numero massimo di colonne (sempre 1024)
• Tabelle aggiornabili +4 colonne
• Tabelle solo accodamento +2 colonne
• Aggiunta solo di colonne «nullable» (senza WITH VALUES)
• No eliminazione colonne, modifica limitata:
• NULL/NOT NULL, lunghezza tipi a lunghezza variabile, SPARSE
• «Collation» per tipi Unicode, se non cambia «code page» per gli altri
• No tipi dato XML, FILESTREAM, SqlVariant e «user-defined»
• Colonne «computed» solo deterministiche
• No «Sparse Column Set»
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Scenari per tabelle «Ledger»
• In generale: quelli che necessitano solo della «Forward Integrity»
• Sistema attendibile al processamento della transazione, protetto contro
manomissioni future
• Alcuni esempi
• Semplificazione scenari di audit
• Verifica crittografica manomissione dati verso terze parti (interne o esterne)
• Processi aziendali tra più parti
• Alternativa a «blockchain» per sistemi intrinsecamente centralizzati in ottica «trust, but
verify»
• Storage «off-chain» affidabile per interrogazioni dati «blockchain»
• «Choosing an Azure ledger technology»
• https://techcommunity.microsoft.com/t5/azure-sql/choosing-an-azure-ledger-
technology/ba-p/2450502
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Risorse
• Announcement blog
• https://aka.ms/sql-ledger-blog
• Azure SQL Database ledger Documentation
• https://aka.ms/sql-ledger-docs
• Whitepaper
• https://aka.ms/sql-ledger-whitepaper
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Grazie!
• Il materiale sarà online nei prossimi giorni su
http://www.communitydays.it

More Related Content

What's hot

Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Gianluca Hotz
 
SQL Server Back to Basics: Sicurezza
SQL Server Back to Basics: SicurezzaSQL Server Back to Basics: Sicurezza
SQL Server Back to Basics: Sicurezza
Gianluca Hotz
 
SQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWSSQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWS
Gianluca Hotz
 
Mettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverMettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql server
Gianluca Hotz
 
SQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed DisksSQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed Disks
Gianluca Hotz
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
Gianluca Hotz
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
Gianluca Hotz
 
SQL Server Data Virtualization with polybase
SQL Server Data Virtualization with polybaseSQL Server Data Virtualization with polybase
SQL Server Data Virtualization with polybase
Gianluca Hotz
 
Azure Data Factory: l'evoluzione della specie della data integration
Azure Data Factory: l'evoluzione della specie della data integrationAzure Data Factory: l'evoluzione della specie della data integration
Azure Data Factory: l'evoluzione della specie della data integration
Roberto Messora
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Emanuele Zanchettin
 
Novità di SQL Server 2017
Novità di SQL Server 2017Novità di SQL Server 2017
Novità di SQL Server 2017
Gianluca Hotz
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
Gianluca Hotz
 
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerSql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Alessandro Alpi
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
Emanuele Zanchettin
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
Emanuele Zanchettin
 
OCP Paas_ultima
OCP Paas_ultimaOCP Paas_ultima
OCP Paas_ultima
opencityplatform
 
Code quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptCode quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScript
Roberto Messora
 
Una web farm bilanciata e scalabile con Microsoft Azure
Una web farm bilanciata e scalabile con Microsoft AzureUna web farm bilanciata e scalabile con Microsoft Azure
Una web farm bilanciata e scalabile con Microsoft Azure
Davide Benvegnù
 
Data flow
Data flowData flow
Data flow
Marco Pozzan
 
SQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload AnalysisSQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload Analysis
Gianluca Sartori
 

What's hot (20)

Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
 
SQL Server Back to Basics: Sicurezza
SQL Server Back to Basics: SicurezzaSQL Server Back to Basics: Sicurezza
SQL Server Back to Basics: Sicurezza
 
SQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWSSQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWS
 
Mettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverMettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql server
 
SQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed DisksSQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed Disks
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
SQL Server Data Virtualization with polybase
SQL Server Data Virtualization with polybaseSQL Server Data Virtualization with polybase
SQL Server Data Virtualization with polybase
 
Azure Data Factory: l'evoluzione della specie della data integration
Azure Data Factory: l'evoluzione della specie della data integrationAzure Data Factory: l'evoluzione della specie della data integration
Azure Data Factory: l'evoluzione della specie della data integration
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2
 
Novità di SQL Server 2017
Novità di SQL Server 2017Novità di SQL Server 2017
Novità di SQL Server 2017
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
 
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerSql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
OCP Paas_ultima
OCP Paas_ultimaOCP Paas_ultima
OCP Paas_ultima
 
Code quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptCode quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScript
 
Una web farm bilanciata e scalabile con Microsoft Azure
Una web farm bilanciata e scalabile con Microsoft AzureUna web farm bilanciata e scalabile con Microsoft Azure
Una web farm bilanciata e scalabile con Microsoft Azure
 
Data flow
Data flowData flow
Data flow
 
SQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload AnalysisSQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload Analysis
 

Similar to Azure SQL Database Ledger

CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo AzureCDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
Davide Benvegnù
 
Sviluppare SPA con Vue
Sviluppare SPA con VueSviluppare SPA con Vue
Sviluppare SPA con Vue
Fabrizio Bernabei
 
Sviluppare SPA con Vue.js
Sviluppare SPA con Vue.jsSviluppare SPA con Vue.js
Sviluppare SPA con Vue.js
Fabrizio Bernabei
 
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
Alessandro Alpi
 
A performance tuning methodology
A performance tuning methodologyA performance tuning methodology
A performance tuning methodology
Gianluca Sartori
 
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Marco Parenzan
 
SQL Server 2022 Intelligent Query Processing
SQL Server 2022 Intelligent Query ProcessingSQL Server 2022 Intelligent Query Processing
SQL Server 2022 Intelligent Query Processing
Gianluca Hotz
 
[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control
Alessandro Alpi
 
Azure Logic Apps
Azure Logic AppsAzure Logic Apps
Azure Logic Apps
Marco Parenzan
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
azuredayit
 
OCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSOCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaS
opencityplatform
 
Costruire una chain of custody del software - una guida per Cto Cio Devops
Costruire una chain of custody del software - una guida per Cto Cio DevopsCostruire una chain of custody del software - una guida per Cto Cio Devops
Costruire una chain of custody del software - una guida per Cto Cio Devops
Emerasoft, solutions to collaborate
 
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
Alessandro Alpi
 
Gestione completa di active directory & exchange
Gestione completa di active directory & exchangeGestione completa di active directory & exchange
Gestione completa di active directory & exchange
Stefano Arduini
 
Gestione completa di active directory & exchange - User Conference ManageEngi...
Gestione completa di active directory & exchange - User Conference ManageEngi...Gestione completa di active directory & exchange - User Conference ManageEngi...
Gestione completa di active directory & exchange - User Conference ManageEngi...
ManageEngine Italia
 
RDBMS: pregi e difetti
RDBMS: pregi e difettiRDBMS: pregi e difetti
RDBMS: pregi e difetti
Gianluca Hotz
 
IaaS and PaaS relational databases in the cloud
IaaS and PaaS relational databases in the cloudIaaS and PaaS relational databases in the cloud
IaaS and PaaS relational databases in the cloud
Gianluca Hotz
 
ManageEngine AD360 - Gestione e reporting Active Directory
ManageEngine AD360 - Gestione e reporting Active DirectoryManageEngine AD360 - Gestione e reporting Active Directory
ManageEngine AD360 - Gestione e reporting Active Directory
ManageEngine Italia
 
TSQL Advanced Query Techniques
TSQL Advanced Query TechniquesTSQL Advanced Query Techniques
TSQL Advanced Query Techniques
Gianluca Sartori
 
Cloud, IoT and Big Data
Cloud, IoT and Big DataCloud, IoT and Big Data
Cloud, IoT and Big Data
SolidQIT
 

Similar to Azure SQL Database Ledger (20)

CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo AzureCDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
 
Sviluppare SPA con Vue
Sviluppare SPA con VueSviluppare SPA con Vue
Sviluppare SPA con Vue
 
Sviluppare SPA con Vue.js
Sviluppare SPA con Vue.jsSviluppare SPA con Vue.js
Sviluppare SPA con Vue.js
 
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
 
A performance tuning methodology
A performance tuning methodologyA performance tuning methodology
A performance tuning methodology
 
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
 
SQL Server 2022 Intelligent Query Processing
SQL Server 2022 Intelligent Query ProcessingSQL Server 2022 Intelligent Query Processing
SQL Server 2022 Intelligent Query Processing
 
[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control
 
Azure Logic Apps
Azure Logic AppsAzure Logic Apps
Azure Logic Apps
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
OCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSOCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaS
 
Costruire una chain of custody del software - una guida per Cto Cio Devops
Costruire una chain of custody del software - una guida per Cto Cio DevopsCostruire una chain of custody del software - una guida per Cto Cio Devops
Costruire una chain of custody del software - una guida per Cto Cio Devops
 
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
 
Gestione completa di active directory & exchange
Gestione completa di active directory & exchangeGestione completa di active directory & exchange
Gestione completa di active directory & exchange
 
Gestione completa di active directory & exchange - User Conference ManageEngi...
Gestione completa di active directory & exchange - User Conference ManageEngi...Gestione completa di active directory & exchange - User Conference ManageEngi...
Gestione completa di active directory & exchange - User Conference ManageEngi...
 
RDBMS: pregi e difetti
RDBMS: pregi e difettiRDBMS: pregi e difetti
RDBMS: pregi e difetti
 
IaaS and PaaS relational databases in the cloud
IaaS and PaaS relational databases in the cloudIaaS and PaaS relational databases in the cloud
IaaS and PaaS relational databases in the cloud
 
ManageEngine AD360 - Gestione e reporting Active Directory
ManageEngine AD360 - Gestione e reporting Active DirectoryManageEngine AD360 - Gestione e reporting Active Directory
ManageEngine AD360 - Gestione e reporting Active Directory
 
TSQL Advanced Query Techniques
TSQL Advanced Query TechniquesTSQL Advanced Query Techniques
TSQL Advanced Query Techniques
 
Cloud, IoT and Big Data
Cloud, IoT and Big DataCloud, IoT and Big Data
Cloud, IoT and Big Data
 

More from Gianluca Hotz

Multitenancy con SQL Server e Azure SQL Database
Multitenancy con SQL Server e Azure SQL DatabaseMultitenancy con SQL Server e Azure SQL Database
Multitenancy con SQL Server e Azure SQL Database
Gianluca Hotz
 
Microsoft SQL Server PaaS (Platform as a Service)
Microsoft SQL Server PaaS (Platform as a Service)Microsoft SQL Server PaaS (Platform as a Service)
Microsoft SQL Server PaaS (Platform as a Service)
Gianluca Hotz
 
SQL Server 2022 Programmability & Performance
SQL Server 2022 Programmability & PerformanceSQL Server 2022 Programmability & Performance
SQL Server 2022 Programmability & Performance
Gianluca Hotz
 
Le novità di SQL Server 2022
Le novità di SQL Server 2022Le novità di SQL Server 2022
Le novità di SQL Server 2022
Gianluca Hotz
 
Data Integrity with SQL Database Ledger
Data Integrity with SQL Database LedgerData Integrity with SQL Database Ledger
Data Integrity with SQL Database Ledger
Gianluca Hotz
 
Best Practices for Running Microsoft SQL Server on AWS
Best Practices for Running Microsoft SQL Server on AWSBest Practices for Running Microsoft SQL Server on AWS
Best Practices for Running Microsoft SQL Server on AWS
Gianluca Hotz
 
SQL Server Modernization
SQL Server ModernizationSQL Server Modernization
SQL Server Modernization
Gianluca Hotz
 
Azure sql database
Azure sql databaseAzure sql database
Azure sql database
Gianluca Hotz
 
Le novità di sql server 2019
Le novità di sql server 2019Le novità di sql server 2019
Le novità di sql server 2019
Gianluca Hotz
 
SQL Server 2019 CTP 2.5
SQL Server 2019 CTP 2.5SQL Server 2019 CTP 2.5
SQL Server 2019 CTP 2.5
Gianluca Hotz
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
Gianluca Hotz
 
SQL Server 2019 CTP2.4
SQL Server 2019 CTP2.4SQL Server 2019 CTP2.4
SQL Server 2019 CTP2.4
Gianluca Hotz
 
SQL Server 2019 ctp2.2
SQL Server 2019 ctp2.2SQL Server 2019 ctp2.2
SQL Server 2019 ctp2.2
Gianluca Hotz
 

More from Gianluca Hotz (13)

Multitenancy con SQL Server e Azure SQL Database
Multitenancy con SQL Server e Azure SQL DatabaseMultitenancy con SQL Server e Azure SQL Database
Multitenancy con SQL Server e Azure SQL Database
 
Microsoft SQL Server PaaS (Platform as a Service)
Microsoft SQL Server PaaS (Platform as a Service)Microsoft SQL Server PaaS (Platform as a Service)
Microsoft SQL Server PaaS (Platform as a Service)
 
SQL Server 2022 Programmability & Performance
SQL Server 2022 Programmability & PerformanceSQL Server 2022 Programmability & Performance
SQL Server 2022 Programmability & Performance
 
Le novità di SQL Server 2022
Le novità di SQL Server 2022Le novità di SQL Server 2022
Le novità di SQL Server 2022
 
Data Integrity with SQL Database Ledger
Data Integrity with SQL Database LedgerData Integrity with SQL Database Ledger
Data Integrity with SQL Database Ledger
 
Best Practices for Running Microsoft SQL Server on AWS
Best Practices for Running Microsoft SQL Server on AWSBest Practices for Running Microsoft SQL Server on AWS
Best Practices for Running Microsoft SQL Server on AWS
 
SQL Server Modernization
SQL Server ModernizationSQL Server Modernization
SQL Server Modernization
 
Azure sql database
Azure sql databaseAzure sql database
Azure sql database
 
Le novità di sql server 2019
Le novità di sql server 2019Le novità di sql server 2019
Le novità di sql server 2019
 
SQL Server 2019 CTP 2.5
SQL Server 2019 CTP 2.5SQL Server 2019 CTP 2.5
SQL Server 2019 CTP 2.5
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
 
SQL Server 2019 CTP2.4
SQL Server 2019 CTP2.4SQL Server 2019 CTP2.4
SQL Server 2019 CTP2.4
 
SQL Server 2019 ctp2.2
SQL Server 2019 ctp2.2SQL Server 2019 ctp2.2
SQL Server 2019 ctp2.2
 

Azure SQL Database Ledger

  • 1. Azure SQL Database Ledger Gianluca Hotz @glhotz Data Platform MVP - Presidente UGISS.ORG
  • 2. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Chi sono? • Gianluca Hotz | @glhotz | ghotz@ugiss.org • Consulente indipendente • 25 anni su SQL Server (dalla 4.21 nel 1996) • Modellazione e sviluppo database, dimensionamento e amministrazione database server, aggiornamenti e migrazioni, performance tuning • Community • 23 anni Microsoft MVP SQL Server/Data Platform (dal 1998) • VMware Experts SQL Server • Fondatore e presidente UGISS (ex «PASS Chapter») • (Co-organizzatore DAMAG Meetup Community)
  • 3. #CDays15 – Milano 24, 25 e 26 Marzo 2015 Tecnologie «Ledger» e «Digital Trust» Le aziende si stanno spostando da intermediari e audit manuali che sono lenti e costosi… ...a tecnologie «Ledger» che riducono i costi, fanno risparmiare tempo e riducono i rischi
  • 4. #CDays15 – Milano 24, 25 e 26 Marzo 2015 Previsioni crescita mercato «blockchain» https://www.forbes.com/sites/robertanzalone/2020/05/13/will-enterprise- blockchain-survive-a-new-report-says-that-the-blockchain-technology-market- will-reach-21-billion-by-2025/#7a5f793954b8 Gartner Predicts 2019: Blockchain Technologies
  • 5. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Transaction Node(s) Member 2 Validator Node(s) Transaction Node(s) Member 3 Validator Node(s) Transaction Node(s) Member 1 Validator Node(s) No data integrity off-chain «Blockchain» esagerate in scenari centralizzati • Decentramento richiede a tutte le parti di ospitare nodi per partecipare al consenso • Regole di «governance» devono essere stabilite dal consorzio e distribuite/gestite • Latenza associata a consenso può influire su velocità effettiva transazioni (<1000 TPS per «Ethereum» • Archiviazione «off-chain» per interrogazioni è tipica, ma integrità si perde nel processo • Sistemi personalizzati con tool immaturi rendono sviluppo e gestione impegnativi
  • 6. #CDays15 – Milano 24, 25 e 26 Marzo 2015 Rende dati in SQL a prova di manomissione tramite crittografia Fornisce traccia cronologica delle modifiche, verificata tramite prove crittografiche Lo stesso SQL Server già usato in Azure e «on- premises» Azure SQL Database Ledger
  • 7. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Append-Only Ledger Table Trusted Storage Database Ledger Block N Block N-1 Block N-2 Updatable Ledger Table History Table Ledger View Tabelle «Ledger» • «Updatable» permettono «insert/update/delete» • Cronologia aggiornamento mantenuta tabella storica e nella «Ledger View» di facile consultazione • Integrità tabelle «aggiornabile» e «storico» mantenuta tramite collegamenti crittografici nel «Database Ledger» • Ricevute digitali caricate periodicamente in storage attendibile configurato dal cliente • Cliente può utilizzare ricevute digitali per verificare integrità dei dati • «Append-Only» permesso solo «insert» • rimuovono necessità tabella «storico»
  • 8. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 «Database Ledger» • Cattura incrementalmente stato database • A livello logico: «blockchain» e strutture dati «Merkle Tree» • Cattura anche metadati transazione (es. timestamp, utente) • Blocchi e informazioni transazioni in tabelle di sistema • sys.database_ledger_transactions • sys.database_ledger_blocks • Blocchi chiusi • ogni 30 secondi • oppure esecuzione manuale sys.sp_generate_database_ledger_digest
  • 9. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 «Database Digest» • Hash ultimo blocco «Ledger» • Rappresenta stato di tutte le tabelle «Ledger» • Devono essere mantenuti in uno storage affidabile e immutabile • Altrimenti si potrebbero manomettere le informazioni (in teoria) • Possibilità di generarli manualmente o in automatico • Generati in automatico possono essere anche salvati in automatico • «Immutable Blob Storage» • «Azure Confidential Ledger» (ACL)
  • 10. #CDays15 – Milano 24, 25 e 26 Marzo 2015 Storage attendibile «Immutable Blob Storage» • Storage «Write Once, Read Many» basato su policy • BLOB possono essere impostati in sola lettura per intervallo specificato • Dati bloccati solo funzionalmente in base a policy • Supporto per «audit logging» ma creatore log deve essere considerato attendibile • Microsoft è la «Trusted Computing Base» «Azure Confidential Ledger» (ACL) • Storage «Write Once, Read Many» in perpetuo • BLOB scritti nel «Ledger» non possono essere modificati • Utilizza «Confidential Enclaves» a prova di manomissione • Crea ricevute transazioni e file «Ledger» serializzati contenenti informazioni che possono essere verificate dai clienti • Microsoft è fuori dalla «TCB», codice sorgente è open source (Confidential Consortium Framework)
  • 11. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Verifica del «Ledger» • Manomissione possibile a meno di modifiche impedite/tracciate • Es. modifica diretta file dati, DBCC WRITEPAGE ecc. • Verifica ricalcola tutti gli hash e li confronta con i «digest» • Operazione richiede uso intensivo di risorse • Verificare • quando necessario (es. sospetto manomissione, audit) • su base ricorrente (es. giornalmente, ogni ora) • Verifica tramite procedura di sistema dipende da modalità salvataggio • automatico: passando indirizzo storage • manuale: passando documento JSON con «Digest»
  • 12. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 «Ledger auditing» • Nuovi eventi SQL Audit • ENABLE LEDGER • Creazione tabelle (o conversione, non ancora supportata) • ALTER LEDGER • Eliminazione/cambio nome tabelle (non ancora supportati) • GENERATE LEDGER DIGEST • VERIFY LEDGER • LEDGER_OPERATION_GROUP
  • 13. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Demo Abilitazione Database Ledger
  • 14. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Selezione opzione «deployment»
  • 15. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Creazione Database
  • 16. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Configurazione «Ledger»
  • 17. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 «Digest Storage»
  • 18. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Demo Ledger Tables
  • 19. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Tabella Aggiornabile CREATE SCHEMA [Account]; GO CREATE TABLE [Account].[Balance] ( [CustomerID] int NOT NULL PRIMARY KEY CLUSTERED , [LastName] varchar(50) NOT NULL , [FirstName] varchar(50) NOT NULL , [Balance] decimal(10,2) NOT NULL ) WITH ( SYSTEM_VERSIONING = ON --(HISTORY_TABLE = [Account].[BalanceHistory]) , LEDGER = ON --(LEDGER_VIEW = [Account].[BalanceLedgerView]) ); GO
  • 20. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Transazioni di inserimento -- Prima transazione INSERT INTO [Account].[Balance] VALUES (1, 'Jones', 'Nick', 50); GO -- Seconda transazione INSERT INTO [Account].[Balance] VALUES (2, 'Smith', 'John', 500) , (3, 'Smith', 'Joe', 30) , (4, 'Michaels', 'Mary', 200); GO
  • 21. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Selezione da tabella -- Di default le colonne con le informazioni relative alle -- transazioni non vengono tornate (trasparente applicazioni) SELECT * FROM [Account].[Balance]; GO
  • 22. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Selezione da tabella campi aggiuntivi -- Devono essere selezionate esplicitamente SELECT * , [ledger_start_transaction_id] , [ledger_end_transaction_id] , [ledger_start_sequence_number] , [ledger_end_sequence_number] FROM [Account].[Balance]; GO
  • 23. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Aggiornamento UPDATE[Account].[Balance] SET[Balance] = 100 WHERE[CustomerID] = 1; GO
  • 24. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Interrogazione dopo aggiornamento -- Interroghiamo la tabella aggiornabile, quella di storico e la vista SELECT * ,[ledger_start_transaction_id] ,[ledger_end_transaction_id] ,[ledger_start_sequence_number] ,[ledger_end_sequence_number] FROM [Account].[Balance]; SELECT * FROM [Account].[MSSQL_LedgerHistoryFor_1525580473]; SELECT * FROM [Account].[Balance_Ledger] ORDER BY [ledger_transaction_id]; GO
  • 25. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Risultato interrogazione
  • 26. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Tabella «Append-Only» CREATE SCHEMA [AccessControl]; GO CREATE TABLE [AccessControl].[KeyCardEvents] ( [EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED , [AccessOperationDescription] nvarchar(MAX) NOT NULL , [Timestamp] datetime2 NOT NULL ) WITH ( LEDGER = ON (APPEND_ONLY = ON) ); GO
  • 27. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Inserimento e aggiornamento -- Inseriamo una prima riga INSERT INTO [AccessControl].[KeyCardEvents] VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567'); GO -- Se proviamo a fare un'aggiornamento, da errore UPDATE [AccessControl].[KeyCardEvents] SET[EmployeeID] = 34184 WHERE[EmployeeID] = 43869; GO
  • 28. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Demo Verifica Database
  • 29. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Verifica Database
  • 30. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Limitazioni generali • Opzione a livello di database non può essere disabilitata • No conversione tabelle esistenti • No cambio di nome o spostamento di «schema» • No eliminazione dati tabelle di storico (tabelle aggiornabili) • Transazione può aggiornare solo (!) 200 tabelle • «Long-term backups» (LTR) non supportati • «Ledger» aggiornabili ereditano limitazioni tabelle temporali
  • 31. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Limitazioni di interoperabilità • Tabelle «In-memory» non supportate • No operazioni di SWITCH IN/OUT • No indici di tipo «Full-Text» • No indice «non-clustered rowstore» con «clustered columnstore» • No «Change Tracking» • No tabelle FILETABLE • No utilizzo API UPDATETEXT e WRITETEXT
  • 32. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Limitazioni schema • Numero massimo di colonne (sempre 1024) • Tabelle aggiornabili +4 colonne • Tabelle solo accodamento +2 colonne • Aggiunta solo di colonne «nullable» (senza WITH VALUES) • No eliminazione colonne, modifica limitata: • NULL/NOT NULL, lunghezza tipi a lunghezza variabile, SPARSE • «Collation» per tipi Unicode, se non cambia «code page» per gli altri • No tipi dato XML, FILESTREAM, SqlVariant e «user-defined» • Colonne «computed» solo deterministiche • No «Sparse Column Set»
  • 33. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Scenari per tabelle «Ledger» • In generale: quelli che necessitano solo della «Forward Integrity» • Sistema attendibile al processamento della transazione, protetto contro manomissioni future • Alcuni esempi • Semplificazione scenari di audit • Verifica crittografica manomissione dati verso terze parti (interne o esterne) • Processi aziendali tra più parti • Alternativa a «blockchain» per sistemi intrinsecamente centralizzati in ottica «trust, but verify» • Storage «off-chain» affidabile per interrogazioni dati «blockchain» • «Choosing an Azure ledger technology» • https://techcommunity.microsoft.com/t5/azure-sql/choosing-an-azure-ledger- technology/ba-p/2450502
  • 34. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Risorse • Announcement blog • https://aka.ms/sql-ledger-blog • Azure SQL Database ledger Documentation • https://aka.ms/sql-ledger-docs • Whitepaper • https://aka.ms/sql-ledger-whitepaper
  • 35. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Grazie! • Il materiale sarà online nei prossimi giorni su http://www.communitydays.it