Partager via


CRÉER UN SCHÉMA (Transact-SQL)

[! INCLUDE [sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb(.. /.. /includes/applies-to-version/sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb.md)]

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

Conventions de la syntaxe Transact-SQL

Syntaxe

Syntaxe pour SQL Server, Azure SQL Database et base de données SQL dans 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
    }

Syntaxe pour Azure Synapse Analytics et Parallel Data Warehouse.

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Les arguments

schema_name

Spécifie le nom du schéma dans la base de données.

OWNER_NAME D’AUTORISATION

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 ne pas utiliser le schéma actuel comme schéma par défaut.

table_definition

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

view_definition

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

grant_statement

Spécifie une GRANT instruction qui accorde des autorisations sur n’importe quel élément sécurisable à l’exception du nouveau schéma.

revoke_statement

Spécifie une REVOKE instruction qui révoque les autorisations sur n’importe quel élément sécurisable à l’exception du nouveau schéma.

deny_statement

Spécifie une DENY instruction qui refuse les autorisations sur n’importe quel élément sécurisable à l’exception du nouveau schéma.

Notes

Les instructions qui contiennent CREATE SCHEMA AUTHORIZATION, mais qui ne spécifient pas de nom, ne sont autorisées qu’à des fins de compatibilité descendante. L’instruction ne provoque pas d’erreur, mais ne crée pas de schéma.

CREATE SCHEMA peut créer un schéma, les tables et les vues qu’il contient, et GRANT, REVOKEou DENY des autorisations sur n’importe quel élément sécurisable dans une seule instruction. Vous devez exécuter cette instruction en tant que lot distinct. Les objets créés par l’instruction CREATE SCHEMA sont créés dans le schéma que vous créez.

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

Vous pouvez répertorier les éléments sécurisables à créer CREATE SCHEMA dans n’importe quel ordre, à l’exception des vues qui font référence à 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 GRANT instruction peut accorder l’autorisation sur un objet avant la création de l’objet lui-même, ou une CREATE VIEW instruction peut apparaître avant les CREATE TABLE instructions qui créent les tables référencées par la vue. En outre, les CREATE TABLE instructions peuvent déclarer des clés étrangères aux tables définies plus loin dans l’instruction CREATE SCHEMA .

Notes

DENY et REVOKE sont pris en charge dans CREATE SCHEMA les instructions. DENY et REVOKE les clauses sont exécutées dans l’ordre dans lequel elles apparaissent dans l’instruction CREATE SCHEMA .

Le principal qui s’exécute CREATE SCHEMA peut spécifier un autre principal de base de données en tant que propriétaire du schéma en cours de création. Cette action nécessite des autorisations supplémentaires, comme décrit dans la section Autorisations plus loin dans cet article.

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 sont détenus par le propriétaire du schéma et ont une valeur Null principal_id dans sys.objects. Vous pouvez transférer la propriété des objets contenus dans un schéma vers n’importe quel principal au niveau de la base de données, mais le propriétaire du schéma conserve toujours l’autorisation CONTROL sur les objets au sein du schéma.

Notes

Les schémas ne sont pas équivalents aux utilisateurs de base de données. Utilisez les vues de catalogue système pour identifier les différences entre les utilisateurs de base de données et les schémas.

Schéma implicite et création d’utilisateurs

Notes

Microsoft Entra ID s'appelait Azure Active Directory (Azure AD) jusqu'à une date récente.

Dans certains cas, un utilisateur peut utiliser une base de données sans avoir de compte d’utilisateur de base de données (principal de base de données dans la base de données). Cette condition peut se produire dans les situations suivantes :

  • Une connexion a CONTROL SERVER des privilèges.

  • Un utilisateur Windows n’a pas de compte d’utilisateur de base de données individuel (un principal de base de données dans la base de données), mais accède à une base de données en tant que membre d’un groupe Windows disposant d’un compte d’utilisateur de base de données (principal de base de données pour le groupe Windows).

  • Un utilisateur Microsoft Entra n’a pas de compte d’utilisateur de base de données individuel (principal de base de données dans la base de données), mais accède à une base de données en tant que membre d’un groupe Microsoft Entra qui a un compte d’utilisateur de base de données (principal de base de données pour le groupe Microsoft Entra).

Lorsqu’un utilisateur sans compte d’utilisateur de base de données crée un objet sans spécifier de schéma existant, un principal de base de données et un schéma par défaut sont créés automatiquement dans la base de données pour cet utilisateur. Le principal et le schéma de base de données créés ont le même nom que le nom utilisé par l’utilisateur lors de la connexion à SQL Server (nom de connexion d’authentification SQL Server ou nom d’utilisateur Windows).

Ce comportement est nécessaire pour permettre aux utilisateurs basés sur des groupes Windows de créer et de posséder des objets. Toutefois, il peut entraîner la création involontaire de schémas et d’utilisateurs. Pour éviter la création implicite d'utilisateurs et de schémas, dans la mesure du possible vous devez créer de manière explicite des principaux de base de données et assigner un schéma par défaut. Vous pouvez également déclarer de manière explicite un schéma existant lors de la création d'objets dans une base de données, à l'aide de noms d'objets en deux ou trois parties.

La création implicite d’un utilisateur Microsoft Entra n’est pas possible sur SQL Database. Étant donné que la création d’un utilisateur Microsoft Entra à partir d’un fournisseur externe doit vérifier l’état de l’utilisateur dans l’ID Microsoft Entra, la création de l’utilisateur échoue avec l’erreur 2760 : The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. Puis, erreur 2759 : CREATE SCHEMA failed due to previous errors.

Les tentatives de création ou de modification de schémas entraînent l’erreur 15151 : Cannot find the user '', because it does not exist or you do not have permission.également suivie de l’erreur 2759. Pour contourner ces erreurs, créez l’utilisateur Microsoft Entra à partir d’un fournisseur externe ou modifiez le groupe Microsoft Entra pour affecter un schéma par défaut. Réexécutez ensuite l’instruction qui crée l’objet.

Dans le point de terminaison d’analytique SQL et l’entrepôt dans Microsoft Fabric, les noms de schémas ne peuvent pas contenir / ou \ se terminer par un ..

Avis de dépréciation

CREATE SCHEMA les instructions qui ne spécifient pas de nom de schéma sont actuellement prises en charge pour la compatibilité descendante. Ces instructions ne créent pas réellement de schéma dans la base de données, mais elles créent des tables et des vues, et accordent des autorisations. Les principaux n’ont pas besoin CREATE SCHEMA d’autorisation pour exécuter cette forme CREATE SCHEMAantérieure, car aucun schéma n’est créé. Cette fonctionnalité sera retirée dans une version future de SQL Server.

Autorisations

Requiert 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 correspondante CREATE .

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

Pour la syntaxe compatible descendante, aucune autorisation n’est CREATE SCHEMA vérifiée, car aucun schéma n’est créé.

Autorisations dans Fabric Data Warehouse

Dans Fabric Data Warehouse, en plus de l’autorisation CREATE SCHEMA , l’utilisateur doit être membre du rôle d’espace de travail Administrateur, Membre ou Contributeur.

Exemples

R. Créer un schéma et accorder des autorisations

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. Sprockets et NineProngs sont créés dans une instruction unique.

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

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

B. Créer un schéma et une table dans le schéma

L’exemple suivant crée un schéma Sales, puis une table Sales.Region dans ce schéma.

CREATE SCHEMA Sales;
GO

CREATE TABLE Sales.Region
(
    Region_id INT NOT NULL,
    Region_Name CHAR (5) NOT NULL
)
WITH (DISTRIBUTION = REPLICATE);
GO

Chapitre C. Définir le propriétaire d’un schéma

L’exemple suivant crée un Production schéma et définit Mary en tant que propriétaire.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO