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.
[! INCLUDE [sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb(.. /.. /includes/applies-to-version/sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb.md)]
Crea uno schema nel database corrente. La CREATE SCHEMA transazione può anche creare tabelle e viste all'interno del nuovo schema e impostare GRANTle autorizzazioni , DENYo REVOKE per tali oggetti.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
Sintassi per SQL Server, database SQL di Azure e database SQL in Microsoft Fabric.
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]
<schema_name_clause> ::=
{
schema_name
| AUTHORIZATION owner_name
| schema_name AUTHORIZATION owner_name
}
<schema_element> ::=
{
table_definition | view_definition | grant_statement |
revoke_statement | deny_statement
}
Sintassi per Azure Synapse Analytics e Parallel Data Warehouse.
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]
Argomenti
schema_name
Specifica il nome dello schema all'interno del database.
OWNER_NAME AUTHORIZATION
Specifica il nome dell'entità a livello di database che sarà proprietaria dello schema. Questa entità potrebbe essere proprietaria di altri schemi e potrebbe non usare lo schema corrente come schema predefinito.
table_definition
Specifica un'istruzione CREATE TABLE che crea una tabella all'interno dello schema. L'entità che esegue questa istruzione deve disporre CREATE TABLE dell'autorizzazione per il database corrente.
view_definition
Specifica un'istruzione CREATE VIEW che crea una vista all'interno dello schema. L'entità che esegue questa istruzione deve disporre CREATE VIEW dell'autorizzazione per il database corrente.
grant_statement
Specifica un'istruzione GRANT che concede le autorizzazioni per qualsiasi entità a protezione diretta, ad eccezione del nuovo schema.
revoke_statement
Specifica un'istruzione REVOKE che revoca le autorizzazioni per qualsiasi entità a protezione diretta, ad eccezione del nuovo schema.
deny_statement
Specifica un'istruzione DENY che nega le autorizzazioni per qualsiasi entità a protezione diretta, ad eccezione del nuovo schema.
Osservazioni:
Le istruzioni che contengono CREATE SCHEMA AUTHORIZATION, ma non specificano un nome, sono consentite solo per la compatibilità con le versioni precedenti. L'istruzione non genera un errore, ma non crea uno schema.
CREATE SCHEMApuò creare uno schema, le tabelle e le viste che contiene, e GRANTREVOKE, o DENY le autorizzazioni per qualsiasi entità a protezione diretta in una singola istruzione. È necessario eseguire questa istruzione come batch separato. Gli oggetti creati dall'istruzione CREATE SCHEMA vengono creati all'interno dello schema creato.
CREATE SCHEMA le transazioni sono atomiche. Se si verifica un errore durante l'esecuzione di un'istruzione CREATE SCHEMA , nessuna delle entità a protezione diretta specificate viene creata e non viene concessa alcuna autorizzazione.
È possibile elencare le entità a protezione diretta da creare CREATE SCHEMA in qualsiasi ordine, ad eccezione delle visualizzazioni che fanno riferimento ad altre visualizzazioni. In questo caso, la vista a cui viene fatto riferimento deve essere creata prima della vista che vi fa riferimento.
Pertanto, un'istruzione GRANT può concedere l'autorizzazione per un oggetto prima della creazione dell'oggetto stesso oppure CREATE VIEW può essere visualizzata un'istruzione prima CREATE TABLE delle istruzioni che creano le tabelle a cui fa riferimento la vista.
CREATE TABLE Le istruzioni possono anche dichiarare chiavi esterne alle tabelle definite più avanti nell'istruzione CREATE SCHEMA .
Nota
DENY e REVOKE sono supportati all'interno CREATE SCHEMA di istruzioni .
DENY Le clausole e REVOKE vengono eseguite nell'ordine in cui vengono visualizzate nell'istruzione CREATE SCHEMA .
L'entità che esegue CREATE SCHEMA può specificare un'altra entità di database come proprietario dello schema da creare. Questa azione richiede autorizzazioni aggiuntive, come descritto nella sezione Autorizzazioni più avanti in questo articolo.
Il nuovo schema è di proprietà di una delle seguenti entità a livello di database: utente di database, ruolo di database o ruolo applicazione. Gli oggetti creati all'interno di uno schema sono di proprietà del proprietario dello schema e hanno un valore Null principal_id in sys.objects. È possibile trasferire la proprietà degli oggetti contenuti nello schema a qualsiasi entità a livello di database, ma il proprietario dello schema mantiene CONTROL sempre l'autorizzazione per gli oggetti all'interno dello schema.
Nota
Gli schemi non sono equivalenti agli utenti del database. Usare le viste del catalogo di sistema per identificare eventuali differenze tra gli utenti del database e gli schemi.
Schema implicito e creazione utente
Nota
Microsoft Entra ID era precedentemente conosciuto come Azure Active Directory (Azure AD).
In alcuni casi, un utente può usare un database senza avere un account utente del database (un'entità di database nel database). Questa condizione può verificarsi nelle situazioni seguenti:
Un account di accesso ha
CONTROL SERVERprivilegi.Un utente di Windows non ha un singolo account utente del database (un'entità di database nel database), ma accede a un database come membro di un gruppo di Windows con un account utente del database (un'entità di database per il gruppo di Windows).
Un utente di Microsoft Entra non ha un singolo account utente del database (un'entità di database nel database), ma accede a un database come membro di un gruppo Microsoft Entra con un account utente del database (un'entità di database per il gruppo Microsoft Entra).
Quando un utente senza un account utente del database crea un oggetto senza specificare uno schema esistente, viene creato automaticamente un'entità di database e uno schema predefinito nel database per tale utente. L'entità di database e lo schema creati hanno lo stesso nome del nome usato dall'utente per la connessione a SQL Server (nome di accesso per l'autenticazione di SQL Server o nome utente di Windows).
Questo comportamento è necessario per permettere agli utenti che usano gruppi di Windows di creare e possedere oggetti. Tuttavia, può comportare la creazione involontaria di schemi e utenti. Per evitare di creare implicitamente utenti e schema, creare sempre, quando possibile, in modo esplicito le entità database e assegnare uno schema predefinito. In alternativa, dichiarare in modo esplicito uno schema esistente quando si creano oggetti in un database, usando nomi oggetto costituiti da due o tre parti.
La creazione implicita di un utente di Microsoft Entra non è possibile nel database SQL. Poiché la creazione di un utente di Microsoft Entra da un provider esterno deve controllare lo stato dell'utente in Microsoft Entra ID, la creazione dell'utente ha esito negativo con errore 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. e quindi errore 2759: CREATE SCHEMA failed due to previous errors.
I tentativi di creare o modificare gli schemi generano l'errore 15151: Cannot find the user '', because it does not exist or you do not have permission., seguito anche dall'errore 2759. Per risolvere questi errori, creare l'utente di Microsoft Entra da un provider esterno o modificare il gruppo Microsoft Entra per assegnare uno schema predefinito. Eseguire quindi di nuovo l'istruzione creando l'oggetto .
In Endpoint di analisi SQL e Warehouse in Microsoft Fabric i nomi degli schemi non possono contenere / o \ terminare con un oggetto ..
Avviso di deprecazione
CREATE SCHEMA Le istruzioni che non specificano un nome di schema sono attualmente supportate per la compatibilità con le versioni precedenti. Queste istruzioni non creano effettivamente uno schema nel database, ma creano tabelle e viste e concedono autorizzazioni. Le entità non necessitano CREATE SCHEMA dell'autorizzazione per eseguire questo formato precedente di CREATE SCHEMA, perché non viene creato alcuno schema. Questa funzionalità verrà rimossa a partire da una delle prossime versioni di SQL Server.
Autorizzazioni
È richiesta l'autorizzazione CREATE SCHEMA per il database.
Per creare un oggetto specificato all'interno dell'istruzione CREATE SCHEMA , l'utente deve disporre dell'autorizzazione corrispondente CREATE .
Per specificare un altro utente come proprietario dello schema da creare, il chiamante deve disporre IMPERSONATE dell'autorizzazione per tale utente. Se un ruolo del database viene specificato come proprietario, il chiamante deve disporre di una delle seguenti appartenenze al ruolo o ALTER all'autorizzazione per il ruolo.
Per la sintassi compatibile con le versioni precedenti, non viene verificata alcuna autorizzazione perché CREATE SCHEMA non viene creato alcuno schema.
Autorizzazioni in Fabric Data Warehouse
In Fabric Data Warehouse, oltre all'autorizzazione CREATE SCHEMA , l'utente deve essere membro del ruolo dell'area di lavoro Amministratore, Membro o Collaboratore.
Esempi
R. Creare uno schema e concedere autorizzazioni
Nell'esempio seguente viene creato lo schema Sprockets, di proprietà di Annik, contenente la tabella NineProngs. L'istruzione concede SELECT a Mandar e nega SELECT a Prasanna.
Sprockets e NineProngs vengono creati in una singola istruzione.
USE AdventureWorks2022;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
CREATE TABLE NineProngs
(
source INT,
cost INT,
partnumber INT
)
GRANT SELECT ON SCHEMA::Sprockets TO Mandar
DENY SELECT ON SCHEMA::Sprockets TO Prasanna;
GO
Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)
B. Creare uno schema e una tabella nello schema
Nell'esempio seguente viene creato lo schema Sales e poi la tabella Sales.Region nello schema.
CREATE SCHEMA Sales;
GO
CREATE TABLE Sales.Region
(
Region_id INT NOT NULL,
Region_Name CHAR (5) NOT NULL
)
WITH (DISTRIBUTION = REPLICATE);
GO
C. Impostare il proprietario di uno schema
Nell'esempio seguente viene creato uno Production schema e viene impostato Mary come proprietario.
CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO