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.
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 de l'entité de sécurité au niveau base de données qui est propriétaire du schéma. Cette entité de sécurité 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. L'entité de sécurité 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. L'entité de sécurité 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
[!REMARQUE]
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 traitement 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.
[!REMARQUE]
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.
L'entité de sécurité qui exécute CREATE SCHEMA peut désigner une autre entité de sécurité 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'une des entités de sécurité de base de données suivantes : 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. La valeur principal_id de ces objets est NULL dans sys.objects. Il est possible de transférer la propriété des objets contenus dans le schéma à n'importe quelle entité de sécurité de base de données, mais le propriétaire du schéma conserve toujours l'autorisation CONTROL sur les objets dans le schéma.
Attention |
---|
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 entités de sécurité et des schémas introduite dans SQL Server 2005 Pour plus d'informations sur les affichages catalogue, consultez Affichages catalogue (Transact-SQL). |
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 entités de sécurité 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.
[!REMARQUE]
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éé.
Exemples
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 AdventureWorks;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
CREATE TABLE NineProngs (source int, cost int, partnumber int)
GRANT SELECT TO Mandar
DENY SELECT TO Prasanna;
GO
Voir aussi