CREATE SCHEMA (Transact-SQL)

Crée un schéma dans la base de données active. La transaction CREATE SCHEMA peut également créer des tables et des vues dans le nouveau schéma et définir des autorisations GRANT, DENY ou REVOKE sur ces objets.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

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 
    }

Arguments

  • schema_name
    Nom qui identifie le schéma dans cette base de données.

  • AUTHORIZATION owner_name
    Spécifie le nom du principal au niveau base de données qui est propriétaire du schéma. Ce principal peut posséder d'autres schémas et peut ne pas utiliser le schéma actif comme schéma par défaut.

  • table_definition
    Spécifie une instruction CREATE TABLE qui crée une table dans le schéma. Le principal qui exécute cette instruction doit avoir l'autorisation CREATE TABLE sur la base de données active.

  • view_definition
    Spécifie une instruction CREATE VIEW qui crée une vue dans le schéma. Le principal qui exécute cette instruction doit avoir l'autorisation CREATE VIEW sur la base de données active.

  • grant_statement
    Spécifie une instruction GRANT qui accorde des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.

  • revoke_statement
    Spécifie une instruction REVOKE qui révoque des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.

  • deny_statement
    Spécifie une instruction DENY qui refuse des autorisations sur tout élément sécurisable à l'exception du nouveau schéma.

Notes

Notes

Les instructions qui contiennent CREATE SCHEMA AUTHORIZATION sans spécifier un nom sont acceptées uniquement pour des raisons de compatibilité descendante.

CREATE SCHEMA peut créer un schéma, les tables et les vues qu'il contient, et accorder (GRANT), révoquer (REVOKE) ou refuser (DENY) des autorisations sur tout élément sécurisable dans une instruction. Cette instruction doit être exécutée en tant que lot séparé. Les objets créés par l'instruction CREATE SCHEMA sont créés à l'intérieur du schéma en cours de création.

Les transactions CREATE SCHEMA sont atomiques. Si une erreur se produit pendant l'exécution d'une instruction CREATE SCHEMA, aucun des éléments sécurisables spécifiés n'est créé et aucune autorisation n'est accordée.

Il est possible de répertorier les éléments sécurisables à créer par l'instruction CREATE SCHEMA dans n'importe quel ordre, excepté pour les vues qui référencent d'autres vues. Dans ce cas, la vue référencée doit être créée avant la vue qui la référence.

Par conséquent, une instruction GRANT peut accorder une autorisation sur un objet avant la création de cet objet, ou une instruction CREATE VIEW peut apparaître avant les instructions CREATE TABLE qui créent les tables référencées par la vue. De même, les instructions CREATE TABLE peuvent déclarer des clés étrangères sur des tables qui sont définies ultérieurement dans l'instruction CREATE SCHEMA.

Notes

DENY et REVOKE sont pris en charge dans des instructions CREATE SCHEMA. Les clauses DENY et REVOKE sont exécutées dans leur ordre d'apparition dans l'instruction CREATE SCHEMA.

Le principal qui exécute CREATE SCHEMA peut désigner un autre principal de base de données en tant que propriétaire du schéma créé. Pour cela, il est nécessaire de disposer d'autorisations supplémentaires, comme l'explique la section « Autorisations » plus loin dans cette rubrique.

Le nouveau schéma appartient à l'un des principaux de base de données suivants : utilisateur de base de données, rôle de base de données ou rôle d'application. Les objets créés dans un schéma appartiennent au propriétaire du schéma et ont une valeur principal_id Null dans sys.objects. Il est possible de transférer la propriété des objets contenus dans le schéma à n'importe quel principal de base de données, mais le propriétaire du schéma conserve toujours l'autorisation CONTROL sur les objets dans le schéma.

AttentionAttention

Avec l'arrivée de SQL Server 2005, le comportement des schémas a changé. Ainsi, le code qui suppose que les schémas sont équivalents aux utilisateurs de base de données peut ne plus renvoyer des résultats corrects. Vous ne devez pas recourir aux anciens affichages catalogue, notamment sysobjects, dans une base de données où une des instructions DDL suivantes a été utilisée : CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. Dans ces bases de données, vous devez utiliser les nouveaux affichages catalogue. Les nouveaux affichages catalogue tiennent compte de la séparation des principaux et des schémas introduite dans SQL Server 2005 Pour plus d'informations sur les affichages catalogue, consultez Affichages catalogue (Transact-SQL).

Lors de la création d'un objet de base de données, si vous spécifiez un principal de domaine valide (utilisateur ou groupe) comme propriétaire de l'objet, le principal du domaine est ajouté à la base de données en tant que schéma. Le nouveau schéma appartiendra à ce principal de domaine.

Note relative à la suppression de fonctionnalités

Les instructions CREATE SCHEMA qui ne spécifient pas de nom de schéma continuent à être prises en charge pour des raisons de compatibilité descendante. De telles instructions ne créent pas réellement un schéma dans la base de données, mais créent plutôt des tables et des vues, et accordent des autorisations. Les principaux n'ont pas besoin de l'autorisation CREATE SCHEMA pour exécuter cette version antérieure de CREATE SCHEMA, car aucun schéma n'est créé. Cette fonctionnalité sera retirée dans une version future de SQL Server.

Autorisations

Nécessite l'autorisation CREATE SCHEMA sur la base de données.

Pour créer un objet spécifié dans l'instruction CREATE SCHEMA, l'utilisateur doit disposer de l'autorisation CREATE correspondante.

Pour spécifier un autre utilisateur comme propriétaire du schéma à créer, l'appelant doit avoir l'autorisation IMPERSONATE sur cet utilisateur. Si un rôle de base de données est spécifié en tant que propriétaire, l'appelant doit disposer de l'un des éléments suivants : appartenance au rôle ou autorisation ALTER pour le rôle.

Notes

Pour la compatibilité descendante de la syntaxe, aucune vérification n'est effectuée sur l'autorisation CREATE SCHEMA car aucun schéma n'est créé.

Exemple

L'exemple suivant crée le schéma Sprockets détenu par Annik qui contient la table NineProngs. L'instruction accorde SELECT à Mandar et refuse SELECT à Prasanna. Remarquez que Sprockets et NineProngs sont créés dans une même instruction.

USE AdventureWorks2008R2;
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