La Database Master Key (DMK) in SQL Server

Datamaze
01.02.24 01:08 PM Comment(s)

In SQL Server, le chiavi sono un concetto fondamentale per garantire l'integrità dei dati, come visto nei passati articoli a livello di tabelle. Esiste però quando si parla di chiave (key) il concetto di Master Key o Database Master Key che spesso può suscitare confusione, anche per il nome scelto dal team di Microsoft.


Master key

La master key è una chiave di sicurezza a livello di database che viene utilizzata per proteggere le altre chiavi presenti, viene infatti utilizzata per crittografare le chiavi private dei certificati, altre chiavi asimmetriche e le “scoped credentials”.

Ogni database ha la sua DMK e ognuna è protetta dalla Service Master Key (SMK), ovvero la chiave che protegge l’intera istanza.

La DMK è essenziale e ha ruolo centrale e importante qualora sul database si voglia attivare il meccanismo di Encryption per la protezione dei dati.

Quando viene creata, la master key viene crittografata utilizzando l'algoritmo AES_256 e una password fornita dall'utente. Tale password va preservata e tenuta in sicurezza poiché è necessaria, per esempio, per il restore del DB su altra istanza.

La master key è una chiave simmetrica, il che significa che la stessa chiave viene utilizzata sia per crittografare che per de-crittografare i dati. La master key viene solitamente archiviata in un luogo sicuro, come un'unità di archiviazione crittografata o un token di sicurezza.

database security

Le caratteristiche della master key

  • Livello: database
  • Tipo: Simmetrica
  • Scopo: protezione di altre chiavi
  • Dimensione: fino a 255 byte.

A cosa serve la master key in SQL Server?

La master key è, lo ribadiamo, una componente importante della sicurezza dei database SQL Server e deve essere protetta in modo appropriato, per assicurarsi che non possa essere compromessa da un utente malintenzionato.

La master key è infatti un'importante funzionalità di sicurezza. Viene infatti utilizzata per proteggere i seguenti elementi:
  • Chiavi private di certificati. I certificati vengono utilizzati per autenticare gli utenti e i computer. La master key protegge le chiavi private dei certificati, in modo che solo gli utenti autorizzati possano utilizzarli. 
  • Chiavi private di chiavi asimmetriche. Le chiavi asimmetriche vengono utilizzate per crittografare e de-crittografare i dati. La master key protegge le chiavi private delle chiavi asimmetriche, in modo che solo gli utenti autorizzati possano utilizzarle.
  • Dati sensibili. La master key può essere utilizzata per crittografare i dati sensibili, come dati finanziari o dati di clienti. Questo aiuta a proteggere i dati da accessi non autorizzati.

Come creare una master key

Per creare una master key, è necessario utilizzare il comando CREATE MASTER KEY. Il comando accetta due parametri:
  • ALGORITHM. L'algoritmo di crittografia utilizzato per proteggere la master key. L'algoritmo predefinito è AES_256.
  • PASSWORD. La password utilizzata per proteggere la master key.

Ad esempio, il seguente comando crea una master key utilizzando l'algoritmo AES_256 e la password "MySecurePassword":
CREATE MASTER KEY ALGORITHM = AES_256
	WITH PASSWORD = 'MySecurePassword';

Come proteggere la master key

È importante proteggere la password della master key con cura. La password dovrebbe essere lunga e complessa e non dovrebbe essere condivisa con nessuno. È anche consigliabile archiviare la password in un luogo sicuro, come ad esempio un'unità di archiviazione cloud crittografata.


Conclusione e best practices

La master key è una chiave di sicurezza a livello di database che viene utilizzata per proteggere altre chiavi nel database. Si tratta di un'importante funzionalità di sicurezza in SQL Server. Consigliamo di creare una master key per ogni database e proteggere la password con cura, in particolare nei casi in cui il contenuto è composto da dati sensibili e importati. Consigliamo inoltre di prendere in considerazione l’applicazione un meccanismo di encryption tra quelli supportati da SQL Server.

Come abbiamo visto, il concetto di DMK non ha nulla a che vedere con altre due definizioni ricorrenti quando si parla di chiavi in SQL Server ovvero:
  • Chiave primaria o esterna (Primary Key / Foreign Key): quando si parla di chiavi di protezione relative a tabelle e relazioni tra tabelle
  • Database di sistema “master”: la DMK non è chiave di protezione di questo specifico database, bensì la chiave principale (master) di tutte le chiavi di sicurezza di ciascun database. Non fa quindi riferimento in particolare al database “master”.

di Alice Sella e Riccardo Trattenero, pubblicato il 1 febbraio 2024

Fonti