Separazione tra schema e utente

Il comportamento degli schemi in SQL Server 2005 è cambiato. Gli schemi non equivalgono più agli utenti del database; ogni schema è ora uno spazio dei nomi distinto e indipendente dal database dell'utente che lo ha creato. In altre parole, uno schema è semplicemente un contenitore di oggetti. Lo schema può essere di proprietà di qualsiasi utente e la sua proprietà è trasferibile.

Nuovo comportamento

La separazione della proprietà dagli schemi ha implicazioni importanti:

  • La proprietà degli schemi e delle entità a sicurezza diretta definite a livello di ambito dello schema è trasferibile. Per ulteriori informazioni, vedere ALTER AUTHORIZATION (Transact-SQL).

  • È possibile spostare gli oggetti tra gli schemi. Per ulteriori informazioni, vedere ALTER SCHEMA (Transact-SQL).

  • Un singolo schema può contenere oggetti di proprietà di più utenti del database.

  • Più utenti del database possono condividere un singolo schema predefinito.

  • Le autorizzazioni per schemi ed entità a sicurezza diretta contenute negli schemi possono essere gestite con una maggiore precisione rispetto alle versioni precedenti. Per ulteriori informazioni, vedere GRANT (autorizzazioni per schemi) (Transact-SQL) e GRANT - autorizzazioni per oggetti (Transact-SQL).

  • Uno schema può essere di proprietà di qualsiasi entità di database, inclusi i ruoli e i ruoli applicazione.

  • È possibile eliminare un utente del database senza rimuovere gli oggetti in uno schema corrispondente.

  • Il codice scritto per le versioni precedenti di SQL Server può restituire risultati non corretti, se in esso si presuppone che gli schemi siano equivalenti agli utenti del database.

  • Le viste del catalogo progettate per versioni precedenti di SQL Server possono restituire risultati non corretti, incluso sysobjects.

  • Quando si crea un oggetto di database, se si specifica un'entità di dominio valida (utente o gruppo) come proprietario dell'oggetto, l'entità di dominio sarà aggiunta al database come uno schema. Il proprietario del nuovo schema sarà l'entità di dominio.

A partire da SQL Server 2005, gli schemi sono entità esplicite riflesse nei metadati; di conseguenza, gli schemi possono avere un solo proprietario, ma un singolo utente può possedere molti schemi. Poiché questa relazione complessa non è riflessa nelle tabelle di sistema di SQL Server 2000, in SQL Server 2005 sono state introdotte nuove viste del catalogo, che rispecchiano i nuovi metadati in modo accurato.

Nella tabella seguente è indicato il mapping tra le tabelle di sistema di SQL Server 2000 e le viste equivalenti del catalogo di SQL Server 2005 e versioni successive.

Tabella di sistema di SQL Server 2000

Vista del catalogo di SQL Server 2005 e versioni successive

sysusers

sys.database_principals

sys.schemas

syslogins

sys.server_principals

In SQL Server 2005 sono state introdotte più di 250 nuove viste del catalogo. È consigliabile utilizzare le nuove viste del catalogo per accedere ai metadati. Per ulteriori informazioni, vedere Viste del catalogo (Transact-SQL).

Le nuove istruzioni DDL (Data Definition Language) possono introdurre complessità nei metadati di sistema, che non vengono riflesse in modo accurato nelle viste di catalogo precedenti, ad esempio sysobjects. Nell'esempio seguente l'ID utente e il nome dello schema restituiti da sysobjects non sono sincronizzati e non riflettono la distinzione tra utente e schema introdotta con SQL Server 2005.

USE tempdb
GO
CREATE LOGIN u1 WITH PASSWORD = 'Mdfjd$sakj943857l7sdfh##30'
CREATE USER u1 WITH DEFAULT_SCHEMA = u1
GO
GRANT CREATE TABLE to u1 
GO
CREATE SCHEMA sch1
GO
CREATE SCHEMA u1 AUTHORIZATION u1
GO
EXECUTE AS user = 'u1'
GO
CREATE TABLE t1(c1 int)
GO
revert
GO
SELECT user_name(uid) , * FROM sysobjects WHERE name = 't1'
GO
Nota di attenzioneAttenzione

È necessario utilizzare le nuove viste del catalogo in tutti i database in cui sia mai stata applicata una delle istruzioni DDL seguenti: CREATE/ALTER/DROP SCHEMA, CREATE/ALTER/DROP USER, CREATE/ALTER/DROP ROLE, CREATE/ALTER/DROP APPROLE, ALTER AUTHORIZATION.

Schemi predefiniti

Per risolvere i nomi delle entità a sicurezza diretta non completi, in SQL Server 2000 viene utilizzata la risoluzione dei nomi per controllare lo schema di proprietà dell'utente del database che ha eseguito la chiamata e lo schema di proprietà di dbo.

A partire da SQL Server 2005, ogni utente dispone di uno schema predefinito che può essere impostato e modificato tramite l'opzione DEFAULT_SCHEMA di CREATE USER o ALTER USER. Se DEFAULT_SCHEMA non viene definito, l'utente del database disporrà dello schema dbo come schema predefinito.