Home > Articoli > SQL Server “Denali” Contained databases (CDB)

SQL Server “Denali” Contained databases (CDB)

SQL Server “Denali”, la nuova versione di SQL Server, conta tra le novità i Contained Database. Si tratta di database indipendenti dall’istanza che li ospita, che includono tutte le impostazioni ed i metadati necessari per il loro corretto funzionamento anche in caso di spostamento su istanze diverse da quella originale.

I vantaggi di questa tipologia di database sono proprio nell’indipendenza del database, che ne consente la facile portabilità, la migliore manutenibilità da parte di chi amministra le applicazioni che lo utilizzano (non è più necessario avere diritti amministrativi sull’istanza per effettuare operazioni sul CDB). Risulta essere più semplice anche la distribuzione del database da parte dello sviluppatore, che non ha bisogno di conoscere l’ambiente dove il database sarà installato.

L’accesso ai Contained Database avviene attraverso i contained users, utenti creati localmente, per i quali va impostata una password all’atto della creazione, oppure utenti o gruppi di Windows autorizzati all’accesso al CDB. In quest’ultimo caso, l’autorizzazione viene data direttamente all’utente/gruppo, senza la necessità di creare una login nel database master. E’ comunque possibile creare una login “tradizionale” ed autorizzarla all’accesso al contained database, ma è sconsigliato, in quanto creerebbe una dipendenza dall’istanza SQL Server.

Per abilitare l’uso dei Contained Databases occorre attivare la funzionalità a livello di istanza, altrimenti SQL Server riporta il seguente errore:


Per farlo è sufficiente che un membro del ruolo sysadmin di SQL Server esegua il comando:

sp_configure ‘show advanced’, 1;

RECONFIGURE WITH OVERRIDE;

GO

sp_configure ‘contained database authentication’, 1;

RECONFIGURE WITH OVERRIDE;

GO

A questo punto si può procedere con la creazione del database. Da SQL Server Management Studio, nella finestra di creazione di un nuovo database, è presente la nuova voce Containment Type, che specifica se e in che modo il database che si sta creando usa le funzionalità di Contained Database.


Se preferite fare la stessa operazione da codice T-SQL:

CREATE DATABASE CDB_Demo

CONTAINMENT = PARTIAL;

GO

USE CDB_Demo;

GO

— Creo un utente “contained” per l’autenticazione con SQL Server

CREATE USER usr_Contained

WITH PASSWORD = ‘Log1nSicurissim@!’;

go

— Creo un utente “contained” per l’autenticazione Windows via utente di dominio MarioRossi

CREATE USER [DOMAIN\MarioRossi];

go

Gli utenti così creati hanno accesso solamente al Contained Database.

Per connettersi al database CDB_Demo è sufficiente specificare dalla maschera di connessione l’utente e la password appena creati (o connettersi tramite l’utente Windows DOMAIN\MarioRossi) e specificare nelle opzioni di connessione (vedi figura) il database CDB_Demo. In caso contrario SQL Server procederà alla ricerca dell’utente nel database master e ritornerà un errore, non trovandolo.


Nella combo box Containment Type presente nella schermata delle opzioni del database è possibile specificare None se il database da creare è di tipo tradizionale o Partial se si tratta di un Contained Database.

Maggiori informazioni le trovate qui: http://msdn.microsoft.com/en-us/library/ff929094(v=SQL.110).aspx

Ricordo che SQL Server “Denali” è la prima CTP Pubblica e quindi la documentazione è ancora incompleta ed in costante aggiornamento.

Ritengo piuttosto interessante questa funzionalità, insieme alle tante altre che popolano “Denali” e che saranno oggetto di prossimi articoli.

Chi è Davide Mauri

Microsoft Data Platform MVP dal 2007, Davide Mauri si occupa di Data Architecture e Big Data nel mondo dell'IoT. Attualmente ricopre il ruolo di "Director Software Development & Cloud Infrastructure" in Sensoria, societa specializzata nella creazione di Wearables e sensori per l'IoT applicati a tessuti ed oggetti sportivi.

Leggi Anche

Automazione delle attività di manutenzione in Azure SQL Database (2 Parte)

Introduzione Nell’articolo Automazione delle attività di manutenzione in Azure SQL Database abbiamo descritto le attività …