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.