Database indipendentiContained Databases

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2012)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Un database indipendente è un database isolato dagli altri database e dall'istanza di SQL ServerSQL Server che ospita il database.A contained database is a database that is isolated from other databases and from the instance of SQL ServerSQL Server that hosts the database. SQL Server 2017SQL Server 2017 offre all'utente quattro modalità per isolare il database dall'istanza. helps user to isolate their database from the instance in 4 ways.

  • Molti dei metadati che descrivono un database vengono gestiti nel database,Much of the metadata that describes a database is maintained in the database. oltre a (o anziché) essere gestiti nel database master.(In addition to, or instead of, maintaining metadata in the master database.)

  • Tutti metadati sono definiti usando le stesse regole di confronto.All metadata are defined using the same collation.

  • L'autenticazione degli utenti può essere eseguita dal database, riducendo la dipendenza del database dagli account di accesso dell'istanza di SQL ServerSQL Server.User authentication can be performed by the database, reducing the databases dependency on the logins of the instance of SQL ServerSQL Server.

  • L'ambiente SQL ServerSQL Server consente di creare report (DMV, XEvents e così via) e agire in base alle informazioni di indipendenza.The SQL ServerSQL Server environment (DMV's, XEvents, etc.) reports and can act upon containment information.

    Alcune funzionalità dei database parzialmente indipendenti, ad esempio l'archiviazione dei metadati nel database, si applicano a tutti i database di SQL Server 2017SQL Server 2017 .Some features of partially contained databases, such as storing metadata in the database, apply to all SQL Server 2017SQL Server 2017 databases. Alcuni vantaggi dei database parzialmente indipendenti, ad esempio l'autenticazione a livello di database e le regole di confronto del catalogo, devono essere abilitati per poter essere disponibili.Some benefits of partially contained databases, such as database level authentication and catalog collation, must be enabled before they are available. L'indipendenza parziale si abilita tramite le istruzioni CREATE DATABASE e ALTER DATABASE o usando SQL Server Management StudioSQL Server Management Studio.Partial containment is enabled using the CREATE DATABASE and ALTER DATABASE statements or by using SQL Server Management StudioSQL Server Management Studio. Per altre informazioni sull'abilitazione dell'indipendenza parziale del database, vedere Migrate to a Partially Contained Database.For more information about how to enable partial database containment, see Migrate to a Partially Contained Database.

Concetti di database parzialmente indipendente Partially Contained Database Concepts

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 ServerSQL Server Database Engine in cui è installato il database.A fully contained database includes all the settings and metadata required to define the database and has no configuration dependencies on the instance of the Motore di database di SQL ServerSQL Server Database Engine where the database is installed. Nelle versioni precedenti di SQL ServerSQL Server, la separazione di un database dall'istanza di SQL ServerSQL 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 ServerSQL Server.In previous versions of SQL ServerSQL Server, separating a database from the instance of SQL ServerSQL Server could be time consuming and required detailed knowledge of the relationship between the database and the instance of SQL ServerSQL Server. Con i database parzialmente indipendenti è più semplice la separazione di un database dall'istanza di SQL ServerSQL Server e dagli altri database.Partially contained databases make it easier to separate a database from the instance of SQL ServerSQL Server and other databases.

In un database indipendente le funzionalità vengono considerate in relazione all'indipendenza.The contained database considers features with regard to containment. Qualsiasi entità definita dall'utente basata solo su funzioni che risiedono nel database è considerata completamente indipendente.Any user-defined entity that relies only on functions that reside in the database is considered fully contained. Qualsiasi entità definita dall'utente basata su funzioni che risiedono all'esterno del database è considerata non indipendente.Any user-defined entity that relies on functions that reside outside the database is considered uncontained. Per altre informazioni, vedere la sezione Indipendenza più avanti in questo argomento.(For more information, see the Containment section later in this topic.)

I termini seguenti si applicano al modello di database indipendente.The following terms apply to the contained database model.

Limite del databaseDatabase boundary
Limite tra un database e l'istanza di SQL ServerSQL Server.The boundary between a database and the instance of SQL ServerSQL Server. Limite tra un database e altri database.The boundary between a database and other databases.

ContenutoContained
Elemento completamente esistente entro il limite del database.An element that exists entirely in the database boundary.

Non contenutoUncontained
Elemento che varca il limite del database.An element that crosses the database boundary.

Database non indipendenteNon-contained database
Database con lo stato di indipendenza impostato su NESSUNO.A database that has containment set to NONE. Tutti i database delle versioni precedenti di SQL Server 2012SQL Server 2012 sono non indipendenti.All databases in versions earlier than SQL Server 2012SQL Server 2012 are non-contained. Per impostazione predefinita, per tutti i database di SQL Server 2012SQL Server 2012 e versioni successive lo stato di indipendenza è impostato su NESSUNO.By default, all SQL Server 2012SQL Server 2012 and later databases have a containment set to NONE.

Database parzialmente indipendentePartially contained database
Un database parzialmente indipendente è un database indipendente in cui sono supportate funzionalità che superano il limite del database.A partially contained database is a contained database that can allow some features that cross the database boundary. SQL ServerSQL Server è inclusa la possibilità di determinare quando il limite di indipendenza viene superato. includes the ability to determine when the containment boundary is crossed.

Utente indipendenteContained user
Per i database indipendenti sono previsti due tipi di utenti.There are two types of users for contained databases.

  • Utente del database indipendente con passwordContained database user with password

    Gli utenti del database indipendente con password vengono autenticati dal database.Contained database users with passwords are authenticated by the database. Per altre informazioni, vedere Utenti di database indipendente: rendere portabile un database.For more information, see Contained Database Users - Making Your Database Portable.

  • Entità di WindowsWindows principals

    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 .Authorized Windows users and members of authorized Windows groups can connect directly to the database and do not need logins in the master database. Il database considera attendibile l'autenticazione di Windows.The database trusts the authentication by 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 ServerSQL Server .Users based on logins in the master database can be granted access to a contained database, but that would create a dependency on the SQL ServerSQL Server instance. Pertanto, per la creazione di utenti in base agli account di accesso, vedere il commento per i database parzialmente indipendenti.Therefore, creating users based on logins see comment for partially contained databases.

Importante

L'abilitazione dei delegati di database parzialmente indipendenti controlla l'accesso all'istanza di SQL ServerSQL Server per i proprietari del database.Enabling partially contained databases delegates control over access to the instance of SQL ServerSQL Server to the owners of the database. Per altre informazioni, vedere Security Best Practices with Contained Databases.For more information, see Security Best Practices with Contained Databases.

Limite del databaseDatabase Boundary
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.Because partially contained databases separate the database functionality from those of the instance, there is a clearly defined line between these two elements called the database boundary.

All'interno del limite del database è presente il modello di database, nel quale i database vengono sviluppati e gestiti.Inside of the database boundary is the database model, where the databases are developed and managed. 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.Examples of entities located inside of the database include, system tables like sys.tables, contained database users with passwords, and user tables in the current database referenced by a two-part name.

All'esterno del limite del database è presente il modello di gestioneche si riferisce alla gestione e alle funzioni a livello di istanza.Outside of the database boundary is the management model, which pertains to instance-level functions and management. 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.Examples of entities located outside of the database boundary include, system tables like sys.endpoints, users mapped to logins, and user tables in another database referenced by a three-part-name.

Indipendenza Containment

Le entità utente completamente residenti all'interno del database sono considerate indipendenti.User entities that reside entirely within the database are considered contained. Qualsiasi entità residente all'esterno del database o basata sull'interazione con le funzioni esterne al database è considerata non indipendente.Any entities that reside outside of the database, or rely on interaction with functions outside of the database, are considered uncontained.

In generale, le entità utente rientrano nelle categorie di indipendenza seguenti:In general, user entities fall into the following categories of containment:

  • Entità utente completamente indipendenti, ovvero quelle che non superano mai il limite del database, ad esempio sys.indexes.Fully contained user entities (those that never cross the database boundary), for example 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.Any code that uses these features or any object that references only these entities is also fully contained.

  • Entità utente non indipendenti, ovvero quelle che superano il limite del database, ad esempio sys.server_principals o una stessa entità server (accesso).Uncontained user entities (those that cross the database boundary), for example sys.server_principals or a server principal (login) itself. Qualsiasi struttura di codice in cui vengano usate queste entità o qualsiasi funzione che faccia riferimento a queste entità è anch'essa non indipendente.Any code that uses these entities or any functions that references these entities are uncontained.

Partially Contained Database Partially Contained Database

La caratteristica di database indipendente è attualmente disponibile solo in uno stato parzialmente indipendente.The contained database feature is currently available only in a partially contained state. Un database parzialmente indipendente è un database indipendente in cui è supportato l'utilizzo di funzionalità non indipendenti.A partially contained database is a contained database that allows the use of uncontained features.

Usare le viste sys.dm_db_uncontained_entities e sys.sql_modules (Transact-SQL) per restituire informazioni relative a oggetti o funzionalità non indipendenti.Use the sys.dm_db_uncontained_entities and sys.sql_modules (Transact-SQL) view to return information about uncontained objects or features. Determinando lo stato di indipendenza degli elementi del database, è possibile individuare gli oggetti o le funzionalità che è necessario sostituire o modificare ai fini dell'indipendenza.By determining the containment status of the elements of your database, you can discover what objects or features must be replaced or altered to promote containment.

Importante

Poiché l'impostazione di indipendenza predefinita di determinati oggetti è NESSUNO, è possibile che in questa vista vengano restituiti falsi positivi.Because certain objects have a default containment setting of NONE, this view can return false positives.

In termini di regole di confronto, il comportamento dei database parzialmente indipendenti è nettamente diverso da quello dei database non indipendenti.The behavior of partially contained databases differs most distinctly from that of non-contained databases with regard to collation. Per altre informazioni sui problemi relativi alle regole di confronto, vedere Contained Database Collations.For more information about collation issues, see Contained Database Collations.

Vantaggi dell'utilizzo di database parzialmente indipendenti Benefits of using Partially Contained Databases

Alcuni problemi e complessità associati ai database non indipendenti possono essere risolti con un database parzialmente indipendente.There are issues and complications associated with the non-contained databases that can be resolved by using a partially contained database.

Spostamento di databaseDatabase Movement

Uno dei problemi che si verifica quando un database viene spostato da un'istanza a un'altra è che importanti informazioni possono non essere disponibili.One of the problems that occurs when moving databases, is that some important information can be unavailable when a database is moved from one instance to another. Ad esempio, le informazioni di accesso sono archiviate all'interno dell'istanza anziché nel database.For example, login information is stored within the instance instead of in the database. Quando si sposta un database non indipendente da un'istanza a un'altra di SQL ServerSQL Server, tali informazioni vengono ignorate.When you move a non-contained database from one instance to another instance of SQL ServerSQL Server, this information is left behind. È necessario identificare le informazioni mancanti e spostarle insieme al database nella nuova istanza di SQL ServerSQL Server.You must identify the missing information and move it with your database to the new instance of SQL ServerSQL Server. Questo processo può richiedere tempi lunghi e risultare difficile.This process can be difficult and time-consuming.

È possibile archiviare importanti informazioni nel database parzialmente indipendente in modo che dopo lo spostamento le informazioni siano ancora disponibili nel database.The partially contained database can store important information in the database so the database still has the information after it is moved.

Nota

Un database parzialmente indipendente può fornire la documentazione che descrive le funzionalità usate da un database che non possono essere separate dall'istanza.A partially contained database can provide documentation describing those features that are used by a database that cannot be separated from the instance. tra cui un elenco di altri database correlati, le impostazioni di sistema richieste dal database ma non indipendenti e così via.This includes a list of other interrelated databases, system settings that the database requires but cannot be contained, and so on.

Vantaggi degli utenti di database indipendenti con AlwaysOnBenefit of Contained Database Users with Always On

Riducendo i valori equivalenti all'istanza di SQL ServerSQL Server, i database parzialmente indipendenti possono essere utili durante il failover quando si usano Gruppi di disponibilità Always OnAlways On availability groups.By reducing the ties to the instance of SQL ServerSQL Server, partially contained databases can be useful during failover when you use Gruppi di disponibilità Always OnAlways On availability groups.

La creazione di utenti indipendenti consente all'utente di connettersi direttamente al database indipendente.Creating contained users enables the user to connect directly to the contained database. Si tratta di una funzionalità molto significativa in scenari a disponibilità elevata e di ripristino di emergenza, ad esempio in una soluzione AlwaysOn.This is a very significant feature in high availability and disaster recovery scenarios such as in an Always On solution. Se gli utenti sono indipendenti, in caso di failover può essere possibile connettersi al database secondario senza creare account di accesso sull'istanza che ospita il database secondario.If the users are contained users, in case of failover, people would be able to connect to the secondary without creating logins on the instance hosting the secondary. Questo rappresenta un vantaggio immediato.This provides an immediate benefit. 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).For more information, see Overview of Always On Availability Groups (SQL Server) and Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server).

Sviluppo iniziale di databaseInitial Database Development

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.Because a developer may not know where a new database will be deployed, limiting the deployed environmental impacts on the database lessens the work and concern for the developer. Nel modello non indipendente lo sviluppatore deve quindi considerare i possibili impatti ambientali sul nuovo database e programmare di conseguenza.In the non-contained model, the developer must consider possible environmental impacts on the new database and program accordingly. Tuttavia, usando i database parzialmente indipendenti, gli sviluppatori possono rilevare l'impatto a livello di istanza sul database e le problematiche a livello di istanza che è necessario affrontare.However, by using partially contained databases, developers can detect instance-level impacts on the database and instance-level concerns for the developer.

Amministrazione del databaseDatabase Administration

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 .Maintaining database settings in the database, instead of in the master database, lets each database owner have more control over their database, without giving the database owner sysadmin permission.

Limitazioni Limitations

I database parzialmente indipendenti non supportano le funzionalità indicate di seguito.Partially contained databases do not allow the following features.

  • Nei database parzialmente indipendenti non è supportato l'utilizzo di funzionalità di replica, di rilevamento modifiche o Change Data Capture.Partially contained databases cannot use replication, change data capture, or change tracking.

  • Procedure numerateNumbered procedures

  • Oggetti associati a schema che dipendono da funzioni predefinite con modifiche delle regole di confrontoSchema-bound objects that depend on built-in functions with collation changes

  • Modifica di associazione a seguito di modifiche delle regole di confronto, inclusi riferimenti a oggetti, colonne, simboli o tipi.Binding change resulting from collation changes, including references to objects, columns, symbols, or types.

  • Replica, Change Data Capture e rilevamento modifiche.Replication, change data capture, and change tracking.

Avviso

Le stored procedure temporanee sono attualmente consentite.Temporary stored procedures are currently permitted. Poiché le stored procedure temporanee violano l'indipendenza, non ne è previsto il supporto nelle versioni future del database indipendente.Because temporary stored procedures breach containment, they are not expected to be supported in future versions of contained database.

Identificazione dell'indipendenza del database Identifying Database Containment

Per consentire l'identificazione dello stato di indipendenza del database sono disponibili due strumenti.There are two tools to help identify the containment status of the database. sys.dm_db_uncontained_entities (Transact-SQL) è una vista in cui sono riportate tutte le entità potenzialmente non indipendenti nel database.The sys.dm_db_uncontained_entities (Transact-SQL) is a view that shows all the potentially uncontained entities in the database. L'evento database_uncontained_usage si verifica quando viene identificata un'entità effettivamente non contenuta in fase di esecuzione.The database_uncontained_usage event occurs when any actual uncontained entity is identified at run time.

sys.dm_db_uncontained_entitiessys.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.This view shows any entities in the database that have the potential to be uncontained, such as those that cross-the database boundary. Sono incluse le entità utente che potrebbero usare oggetti al di fuori del modello di database.This includes those user entities that may use objects outside the database model. 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.However, because the containment of some entities (for example, those using dynamic SQL) cannot be determined until run time, the view may show some entities that are not actually uncontained. Per altre informazioni, vedere sys.dm_db_uncontained_entities (Transact-SQL).For more information, see sys.dm_db_uncontained_entities (Transact-SQL).

database_uncontained_usage - eventodatabase_uncontained_usage event

L'evento XEvent viene generato quando viene identificata un'entità non indipendente in fase di esecuzione.This XEvent occurs whenever an uncontained entity is identified at run time. Sono incluse le entità che hanno origine nel codice client.This includes entities originated in client code. Questo evento XEvent verrà generato solo per le entità effettivamente non indipendentiThis XEvent will occur only for actual uncontained entities. e solo in fase di esecuzione.However, the event only occurs at run time. Pertanto, qualsiasi entità utente non indipendente non eseguita non sarà identificata da questo XEvent.Therefore, any uncontained user entities you have not run will not be identified by this XEvent

Vedere ancheSee Also

Funzionalità modificate (database indipendente) Modified Features (Contained Database)
Contained Database Collations Contained Database Collations
Security Best Practices with Contained Databases Security Best Practices with Contained Databases
Migrate to a Partially Contained Database Migrate to a Partially Contained Database
Utenti di database indipendente: rendere portabile un database Contained Database Users - Making Your Database Portable