Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Un database indipendente è un database isolato dagli altri database e dall'istanza di SQL Server che ospita il database. SQL Server offre all'utente quattro modalità per isolare il database dall'istanza.
Molti dei metadati che descrivono un database vengono gestiti nel database, (Oltre a, o invece di, mantenere i metadati nel database master.)
Tutti metadati sono definiti usando le stesse regole di confronto.
L'autenticazione degli utenti può essere eseguita dal database, riducendo la dipendenza del database dagli account di accesso dell'istanza di SQL Server.
L'ambiente SQL Server (DMV, XEvents, ecc.) riporta e può agire in base alle informazioni di contenimento.
Alcune funzionalità dei database parzialmente indipendenti, ad esempio l'archiviazione dei metadati nel database, si applicano a tutti i database di SQL Server. Alcuni vantaggi dei database parzialmente contenuti, ad esempio l'autenticazione a livello di database e le regole di confronto del catalogo, devono essere abilitati prima di essere disponibili. Il contenimento parziale viene abilitato usando le CREATE DATABASE istruzioni e ALTER DATABASE o usando SQL Server Management Studio. Per altre informazioni sull'abilitazione dell'indipendenza parziale del database, vedere Migrate to a Partially Contained Database.
Concetti relativi ai database parzialmente contenuti
In un database totalmente indipendente sono incluse tutte le impostazioni del database e i metadati necessari per definire il database, mentre non sono presenti dipendenze di configurazione nell'istanza del motore di database di SQL Server in cui è installato il database. Nelle versioni precedenti di SQL Server, la separazione di un database dall'istanza di SQL Server può risultare un'operazione dispendiosa in termini di tempo e richiedere una conoscenza dettagliata della relazione tra il database e l'istanza di SQL Server. I database parzialmente contenuti semplificano la separazione di un database dall'istanza di SQL Server e dagli altri database.
Il database contenuto considera le funzionalità per quanto riguarda il contenimento. Qualsiasi entità definita dall'utente basata solo su funzioni che risiedono nel database è considerata completamente indipendente. Qualsiasi entità definita dall'utente basata su funzioni che risiedono all'esterno del database è considerata non indipendente. Per altre informazioni, vedere la sezione Contenimento più avanti in questo argomento.
I termini seguenti si applicano al modello di database indipendente.
Limite del database
Limite tra un database e l'istanza di SQL Server. Limite tra un database e altri database.
Contenuto
Elemento completamente esistente entro il limite del database.
Non confinato
Elemento che varca il limite del database.
Database non indipendente
Un database con il contenimento impostato su NONE. Tutti i database delle versioni precedenti di SQL Server 2012 (11.x) sono non indipendenti. Per impostazione predefinita, per tutti i database di SQL Server 2012 (11.x) e versioni successive lo stato di indipendenza è impostato su NONE.
Database parzialmente contenuto
Un database parzialmente indipendente è un database indipendente in cui sono supportate funzionalità che superano il limite del database. SQL Server consente di determinare quando viene oltrepassato il limite di contenimento.
Utente indipendente
Per i database indipendenti sono previsti due tipi di utenti.
Utente di database contenuto con password
Gli utenti del database indipendente con password vengono autenticati dal database. Per altre informazioni, vedere Utenti di database indipendente: rendere portabile un database.
Entità di Windows
Gli utenti di Windows autorizzati e i membri dei gruppi di Windows autorizzati possono connettersi direttamente al database e non devono disporre di account di accesso nel database master. Il database considera attendibile l'autenticazione di Windows.
Agli utenti con account di accesso nel database master può essere concesso l'accesso a un database indipendente, ma si creerebbe una dipendenza dall'istanza di SQL Server. Pertanto, la creazione di utenti basati sui login richiede il contenimento parziale.
Importante
L'abilitazione dei database parzialmente contenuti delega ai proprietari del database il controllo dell'accesso all'istanza di SQL Server. Per altre informazioni, vedere Security Best Practices with Contained Databases.
Limite del database
Considerato che nei database parzialmente indipendenti le funzionalità del database sono separate da quelle dell'istanza, tra questi due elementi esiste una netta linea di demarcazione detta limite del database.
All'interno del limite del database è presente il modello di database, nel quale i database vengono sviluppati e gestiti. Esempi di entità che si trovano all'interno del database includono tabelle di sistema, ad esempio sys.tables, utenti del database indipendente con password e tabelle utente nel database corrente a cui viene fatto riferimento con un nome in due parti.
All'esterno del limite del database è presente il modello di gestioneche si riferisce alla gestione e alle funzioni a livello di istanza. Esempi di entità che si trovano all'esterno del limite del database includono tabelle di sistema, ad esempio sys.endpoints, utenti su cui viene eseguito il mapping ad account di accesso e tabelle utente in un altro database a cui viene fatto riferimento con un nome in tre parti.
Contenimento
Le entità utente completamente residenti all'interno del database sono considerate indipendenti. Qualsiasi entità residente all'esterno del database o basata sull'interazione con le funzioni esterne al database è considerata non indipendente.
In generale, le entità utente rientrano nelle seguenti categorie di contenimento:
Entità utente completamente indipendenti, ovvero quelle che non superano mai il limite del database, ad esempio sys.indexes. Qualsiasi struttura di codice in cui vengano usate queste funzionalità o qualsiasi oggetto che faccia riferimento solo a queste entità è anch'esso completamente contenuto.
Entità utente non contenute (ovvero quelle che oltrepassano i confini del database), ad esempio sys.server_principals o un server principal (login) stesso. Qualsiasi struttura di codice in cui vengano usate queste entità o qualsiasi funzione che faccia riferimento a queste entità è anch'essa non indipendente.
Database parzialmente contenuto
La funzionalità di database contenuto è attualmente disponibile solo in uno stato parzialmente contenuto. Un database parzialmente contenuto è un database contenuto che consente l'uso di funzionalità non contenute.
Usare le viste sys.dm_db_uncontained_entities e sys.sql_modules (Transact-SQL) per restituire informazioni relative a oggetti o funzionalità non indipendenti. Determinando lo stato di contenimento degli elementi del database, è possibile individuare gli oggetti o le funzionalità che è necessario sostituire o modificare per favorire il contenimento.
Importante
Poiché determinati oggetti hanno come impostazione di contenimento predefinita NONE, questa vista può restituire falsi positivi.
In termini di regole di confronto, il comportamento dei database parzialmente indipendenti è nettamente diverso da quello dei database non indipendenti. Per ulteriori informazioni sui problemi relativi alle regole di confronto, vedere Contained Database Collations.
Vantaggi dell'utilizzo di database parzialmente contenuti
Alcuni problemi e complessità associati ai database non indipendenti possono essere risolti con un database parzialmente indipendente.
Spostamento di database
Uno dei problemi che si verifica quando un database viene spostato da un'istanza a un'altra è che importanti informazioni possono non essere disponibili. Ad esempio, le informazioni di accesso sono archiviate all'interno dell'istanza anziché nel database. Quando si sposta un database non indipendente da un'istanza a un'altra di SQL Server, tali informazioni vengono ignorate. È necessario identificare le informazioni mancanti e spostarle insieme al database nella nuova istanza di SQL Server. Questo processo può richiedere tempi lunghi e risultare difficile.
Il database parzialmente contenuto può archiviare informazioni importanti al suo interno, in modo che continui a disporne anche dopo essere stato spostato.
Nota
Un database parzialmente contenuto può fornire documentazione che descrive le funzionalità utilizzate da un database che non possono essere separate dall'istanza. Ciò include un elenco di altri database interrelati, le impostazioni di sistema richieste dal database ma che non possono essere contenute al suo interno, e così via.
Vantaggi degli utenti di database indipendenti con AlwaysOn
Riducendo la dipendenza dall'istanza di SQL Server, i database parzialmente contenuti possono essere utili durante il failover quando si usano i gruppi di disponibilità Always On.
La creazione di utenti contenuti consente di connettersi direttamente al database contenuto. Si tratta di una funzionalità molto significativa in scenari a disponibilità elevata e di ripristino di emergenza, ad esempio in una soluzione AlwaysOn. Se gli utenti sono utenti contenuti, in caso di failover gli utenti potrebbero connettersi al database secondario senza creare account di accesso nell'istanza che ospita il database secondario. Questo rappresenta un vantaggio immediato. Per altre informazioni, vedere Panoramica di Gruppi di disponibilità Always On (SQL Server) e Prerequisiti, restrizioni e consigli per i gruppi di disponibilità Always On (SQL Server).
Sviluppo iniziale di database
Poiché è possibile che uno sviluppatore non conosca l'ambiente nel quale verrà distribuita un nuovo database, limitando gli impatti ambientali distribuiti al database sarà possibile ridurre il lavoro e le problematiche per lo sviluppatore. Nel modello non indipendente lo sviluppatore deve quindi considerare i possibili impatti ambientali sul nuovo database e programmare di conseguenza. Tuttavia, utilizzando database parzialmente contenuti, gli sviluppatori possono rilevare gli effetti a livello di istanza sul database e le problematiche a livello di istanza per lo sviluppatore.
Amministrazione del database
La gestione delle impostazioni del database nel database, anziché nel database master, consente a ogni proprietario di database di avere più controllo sul database, senza fornire al proprietario di database l'autorizzazione sysadmin.
Limiti
I database parzialmente contenuti non consentono le funzionalità seguenti.
Replicazione, acquisizione dei dati modificati o rilevamento delle modifiche.
Procedure numerate
Oggetti associati a schema che dipendono da funzioni predefinite con modifiche delle regole di confronto
Modifica di associazione a seguito di modifiche delle regole di confronto, inclusi riferimenti a oggetti, colonne, simboli o tipi.
Avviso
Le stored procedure temporanee sono attualmente consentite. Poiché le stored procedure temporanee violano il contenimento, non si prevede che saranno supportate nelle versioni future del database contenuto.
Identificazione del contenimento del database
Sono disponibili due strumenti per identificare lo stato di contenimento del database. sys.dm_db_uncontained_entities (Transact-SQL) è una vista in cui sono riportate tutte le entità potenzialmente non indipendenti nel database. L'evento database_uncontained_usage si verifica quando viene identificata un'entità effettivamente non contenuta in fase di esecuzione.
sys.dm_db_uncontained_entities
In questa vista vengono riportate tutte entità presenti nel database che potrebbero essere non indipendenti, ad esempio quelle che superano il limite del database. Sono incluse le entità utente che potrebbero usare oggetti al di fuori del modello di database. Poiché non è tuttavia possibile determinare lo stato di indipendenza di alcune entità, ad esempio quelle che usano SQL dinamico, fino alla fase di esecuzione, nella vista potrebbero essere presenti alcune entità che non sono effettivamente non indipendenti. Per altre informazioni, vedere sys.dm_db_uncontained_entities (Transact-SQL).
evento database_uncontained_usage
L'evento XEvent viene generato quando viene identificata un'entità non indipendente in fase di esecuzione. Sono incluse le entità che hanno origine nel codice client. Questo XEvent si verificherà solo per le entità effettive non contenute. Tuttavia, l'evento si verifica solo in fase di esecuzione. Pertanto, qualsiasi entità utente non contenuta che non è stata eseguita non verrà identificata da questo XEvent.
Vedi anche
Funzionalità modificate (database indipendente)
Regole di confronto dei database contenuti
Procedure di sicurezza consigliate con i database indipendenti
Eseguire la migrazione a un database parzialmente contenuto
Utenti del database contenuto - Rendere portabile il database