Catene di proprietà
Quando più oggetti di database accedono l'uno all'altro in modo sequenziale, questa sequenza viene denominata catena. Sebbene queste catene non esistono in modo indipendente, quando in SQL Server vengono attraversati i collegamenti contenuti in una catena, SQL Server valuta le autorizzazioni per gli oggetti che compongono la catena diversamente da quanto farebbe se accedesse agli oggetti separatamente. Questa differenza ha implicazioni importanti per la gestione della protezione.
Il concatenamento delle proprietà consente di gestire l'accesso a più oggetti, quali ad esempio più tabelle, impostando autorizzazioni su un oggetto, come ad esempio una vista. Il concatenamento delle proprietà offre inoltre un leggero vantaggio a livello di prestazioni in situazioni dove è consentito ignorare i controlli delle autorizzazioni.
Controllo delle autorizzazioni in una catena
Quando si accede a un oggetto attraverso una catena, in SQL Server il proprietario dell'oggetto viene innanzitutto confrontato con il proprietario dell'oggetto chiamante. Ciò rappresenta il primo collegamento nella catena. Se entrambi gli oggetti hanno lo stesso proprietario, le autorizzazioni per l'oggetto a cui si fa riferimento non vengono valutate.
Esempio di concatenamento di proprietà
Nella figura seguente, Mary è la proprietaria della vista July2003. Mary ha concesso ad Alex le autorizzazioni per la vista. Alex non dispone di autorizzazioni per gli oggetti di database di questa istanza. Che cosa succede quando Alex seleziona la vista?
Alex esegue SELECT * sulla vista July2003. SQL Server controlla le autorizzazioni per la vista e conferma ad Alex che è autorizzato ad eseguire selezioni sulla vista.
La vista July2003 richiede informazioni dalla vista SalesXZ. SQL Server verifica la proprietà della vista SalesXZ. Poiché il proprietario di questa vista (Mary) è lo stesso della vista chiamante, le autorizzazioni per SalesXZ non vengono controllate. Le informazioni richieste vengono restituite.
La vista SalesXZ richiede informazioni dalla vista InvoicesXZ. SQL Server verifica la proprietà della vista InvoicesXZ. Poiché il proprietario di questa vista è lo stesso dell'oggetto precedente, le autorizzazioni per InvoicesXZ non vengono controllate. Le informazioni richieste vengono restituite. Fino a questo punto, tutti gli elementi della sequenza hanno avuto un solo proprietario (Mary). Questa situazione è denominata catena di proprietà ininterrotta.
La vista InvoicesXZ richiede informazioni dalla vista AcctAgeXZ. SQL Server verifica la proprietà della vista AcctAgeXZ. Poiché il proprietario di questa vista è diverso dal proprietario dell'oggetto precedente (Sam invece di Mary), vengono recuperate tutte le informazioni sulle autorizzazioni relative a questa vista. Se la vista AcctAgeXZ dispone di autorizzazioni per consentire l'accesso a Alex, le informazioni verranno restituite.
La vista AcctAgeXZ richiede informazioni dalla tabella ExpenseXZ. SQL Server verifica la proprietà della tabella ExpenseXZ. Poiché il proprietario di questa tabella è diverso dal proprietario dell'oggetto precedente (Joe invece di Mary), vengono recuperate tutte le informazioni sulle autorizzazioni relative a questa tabella. Se la tabella ExpenseXZ dispone di autorizzazioni per consentire l'accesso a Alex, le informazioni verranno restituite.
Quando la vista July2003 tenta di recuperare le informazioni dalla tabella ProjectionsXZ, il server verifica innanzitutto se è attivato il concatenamento della proprietà tra Database 1 e Database 2. Se il concatenamento tra database è attivato, il server controlla la proprietà della tabella ProjectionsXZ. Poiché il proprietario di questa tabella è lo stesso della vista chiamante (Mary), le autorizzazioni per questa tabella non vengono controllate. Le informazioni richieste vengono restituite.
Concatenamento della proprietà tra database
SQL Server può essere configurato in modo da consentire il concatenamento della proprietà tra particolari database o tra tutti i database per una singola istanza di SQL Server. Il concatenamento della proprietà tra database è disattivato per impostazione predefinita e va attivato solo se specificamente richiesto.
Potenziali minacce
Il concatenamento di proprietà risulta particolarmente utile per la gestione delle autorizzazioni di accesso a un database ma presuppone che i proprietari degli oggetti siano consapevoli delle conseguenze di ogni decisione di concedere l'autorizzazione per l'accesso a un'entità a protezione diretta. Nella figura precedente, Mary è la proprietaria della maggior parte degli oggetti sottostanti della vista July 2003. Poiché Mary ha diritto a rendere accessibili a un qualsiasi altro utente gli oggetti di cui è proprietaria, in SQL Server tutte le volte che Mary concede l'accesso alla prima vista di una catena, si presume che abbia implicitamente deciso di condividere le viste e le tabelle a cui la prima vista fa riferimento. In realtà, ciò potrebbe essere una supposizione errata. I database di produzione sono molto più complessi di quello illustrato sopra ed è difficile che le autorizzazioni che ne regolano l'accesso rappresentino fedelmente le strutture amministrative delle organizzazioni che li usano.
È necessario rendersi conto che i membri di ruoli di database con privilegi elevati possono utilizzare il concatenamento della proprietà tra database per accedere a oggetti di database esterni. Se ad esempio viene attivato il concatenamento della proprietà tra il database A e il database B, un membro del ruolo predefinito del database db_owner di uno dei due database può escogitare un modo per accedere all'altro database. È molto semplice. Diane (membro di db_owner nel database A) crea l'utente Stuart nel database A. Stuart è un utente già esistente nel database B. Successivamente Diane crea un oggetto (di proprietà di Stuart) nel database A che chiama un qualsiasi oggetto di proprietà di Stuart nel database B. Poiché l'oggetto chiamante e l'oggetto chiamato hanno lo stesso proprietario, le autorizzazioni per l'oggetto del database B non vengono controllate quando Diane accede ad esso attraverso l'oggetto da lei creato.