Delen via


SCHEMA MAKEN (Transact-SQL)

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

Hiermee maakt u een schema in de huidige database. De CREATE SCHEMA transactie kan ook tabellen en weergaven in het nieuwe schema maken en machtigingen GRANTvoor deze objecten instellen, of DENY machtigingen instellenREVOKE.

Transact-SQL syntaxis-conventies

Syntaxis

Syntaxis voor SQL Server, Azure SQL Database en SQL-database 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
    }

Syntaxis voor Azure Synapse Analytics en Parallel Data Warehouse.

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Argumenten

schema_name

Hiermee geeft u de naam van het schema in de database.

AUTORISATIE-owner_name

Hiermee geeft u de naam op van de principal op databaseniveau die eigenaar is van het schema. Deze principal is mogelijk eigenaar van andere schema's en gebruikt het huidige schema mogelijk niet als standaardschema.

table_definition

Hiermee geeft u een CREATE TABLE instructie op waarmee een tabel in het schema wordt gemaakt. De principal die deze instructie uitvoert, moet CREATE TABLE zijn gemachtigd voor de huidige database.

view_definition

Hiermee geeft u een CREATE VIEW instructie op waarmee een weergave in het schema wordt gemaakt. De principal die deze instructie uitvoert, moet CREATE VIEW zijn gemachtigd voor de huidige database.

grant_statement

Hiermee geeft u een GRANT instructie op die machtigingen verleent voor een beveiligbaar, behalve het nieuwe schema.

revoke_statement

Hiermee geeft u een REVOKE instructie op waarmee machtigingen worden ingetrokken voor een beveiligbaar, behalve het nieuwe schema.

deny_statement

Hiermee geeft u een DENY instructie op die machtigingen weigert voor een beveiligbaar, behalve het nieuwe schema.

Opmerkingen

Instructies die een naam bevatten CREATE SCHEMA AUTHORIZATION, maar geen naam opgeven, zijn alleen toegestaan voor compatibiliteit met eerdere versies. De instructie veroorzaakt geen fout, maar maakt geen schema.

CREATE SCHEMA kan een schema maken, de tabellen en weergaven die het bevat, en GRANT, REVOKEof DENY machtigingen voor elk beveiligbaar schema in één instructie. U moet deze instructie uitvoeren als een afzonderlijke batch. Objecten die door de CREATE SCHEMA instructie worden gemaakt, worden gemaakt in het schema dat u maakt.

CREATE SCHEMA transacties zijn atomisch. Als er een fout optreedt tijdens de uitvoering van een CREATE SCHEMA instructie, worden geen van de opgegeven beveiligbare objecten gemaakt en worden er geen machtigingen verleend.

U kunt beveiligbare objecten weergeven die in elke volgorde moeten worden gemaakt CREATE SCHEMA , met uitzondering van weergaven die verwijzen naar andere weergaven. In dat geval moet de weergave waarnaar wordt verwezen, worden gemaakt voordat de weergave ernaar verwijst.

Daarom kan een GRANT instructie machtigingen verlenen voor een object voordat het object zelf wordt gemaakt, of een CREATE VIEW instructie kan worden weergegeven vóór de instructies die de CREATE TABLE tabellen maken waarnaar wordt verwezen door de weergave. CREATE TABLE Bovendien kunnen instructies refererende sleutels declareren voor tabellen die later in de CREATE SCHEMA instructie zijn gedefinieerd.

Opmerking

DENY en REVOKE worden ondersteund in CREATE SCHEMA instructies. DENY en REVOKE componenten worden uitgevoerd in de volgorde waarin ze worden weergegeven in de CREATE SCHEMA instructie.

De principal die wordt uitgevoerd CREATE SCHEMA , kan een andere database-principal opgeven als eigenaar van het schema dat wordt gemaakt. Voor deze actie zijn extra machtigingen vereist, zoals beschreven in de sectie Machtigingen verderop in dit artikel.

Het nieuwe schema is eigendom van een van de volgende principals op databaseniveau: databasegebruiker, databaserol of toepassingsrol. Objecten die in een schema zijn gemaakt, zijn eigendom van de eigenaar van het schema en hebben een null-waarde principal_id in sys.objects. U kunt het eigendom van in schema opgenomen objecten overdragen aan elke principal op databaseniveau, maar de eigenaar van het schema behoudt CONTROL altijd machtigingen voor objecten in het schema.

Opmerking

Schema's zijn niet gelijk aan databasegebruikers. Gebruik systeemcatalogusweergaven om eventuele verschillen tussen databasegebruikers en schema's te identificeren.

Impliciet schema en het maken van gebruikers

Opmerking

Microsoft Entra-id werd voorheen Azure Active Directory (Azure AD) genoemd.

In sommige gevallen kan een gebruiker een database gebruiken zonder een databasegebruikersaccount (een database-principal in de database). Deze situatie kan zich voordoen in de volgende situaties:

  • Een aanmelding heeft CONTROL SERVER bevoegdheden.

  • Een Windows-gebruiker heeft geen afzonderlijk databasegebruikersaccount (een database-principal in de database), maar opent een database als lid van een Windows-groep met een databasegebruikersaccount (een database-principal voor de Windows-groep).

  • Een Microsoft Entra-gebruiker heeft geen afzonderlijk databasegebruikersaccount (een database-principal in de database), maar opent een database als lid van een Microsoft Entra-groep met een databasegebruikersaccount (een database-principal voor de Microsoft Entra-groep).

Wanneer een gebruiker zonder databasegebruikersaccount een object maakt zonder een bestaand schema op te geven, worden er automatisch een database-principal en een standaardschema gemaakt in de database voor die gebruiker. De gemaakte database-principal en het schema hebben dezelfde naam als de naam die de gebruiker heeft gebruikt bij het maken van verbinding met SQL Server (de aanmeldingsnaam voor SQL Server-verificatie of de Windows-gebruikersnaam).

Dit gedrag is nodig om gebruikers toe te staan die zijn gebaseerd op Windows-groepen om objecten te maken en te bezitten. Dit kan echter resulteren in het onbedoeld maken van schema's en gebruikers. Om te voorkomen dat gebruikers en schema's impliciet worden gemaakt, maakt u indien mogelijk expliciet database-principals en wijst u een standaardschema toe. Of geef een bestaand schema expliciet op bij het maken van objecten in een database, met behulp van twee of driedelige objectnamen.

Het impliciet maken van een Microsoft Entra-gebruiker is niet mogelijk in SQL Database. Omdat het maken van een Microsoft Entra-gebruiker van externe provider de status van de gebruiker in Microsoft Entra-id moet controleren, mislukt het maken van de gebruiker met fout 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. En vervolgens fout 2759: CREATE SCHEMA failed due to previous errors.

Pogingen om schema's te maken of te wijzigen resulteren in fout 15151: Cannot find the user '', because it does not exist or you do not have permission., ook gevolgd door fout 2759. Als u deze fouten wilt omzeilen, maakt u de Microsoft Entra-gebruiker van een externe provider of wijzigt u de Microsoft Entra-groep om een standaardschema toe te wijzen. Voer vervolgens de instructie voor het maken van het object opnieuw uit.

In SQL Analytics-eindpunten en -warehouse in Microsoft Fabric kunnen schemanamen geen schemanamen bevatten / of \ beëindigen met een ..

Kennisgeving over afschaffing

CREATE SCHEMA instructies die geen schemanaam opgeven, worden momenteel ondersteund voor compatibiliteit met eerdere versies. Deze instructies maken geen schema in de database, maar ze maken wel tabellen en weergaven en verlenen machtigingen. Principals hebben geen toestemming nodig CREATE SCHEMA om deze eerdere vorm van CREATE SCHEMA, omdat er geen schema wordt gemaakt. Deze functionaliteit wordt verwijderd uit een toekomstige versie van SQL Server.

Machtigingen

Vereist CREATE SCHEMA machtiging voor de database.

Als u een object wilt maken dat is opgegeven in de CREATE SCHEMA instructie, moet de gebruiker de bijbehorende CREATE machtiging hebben.

Als u een andere gebruiker wilt opgeven als de eigenaar van het schema dat wordt gemaakt, moet de aanroeper gemachtigd zijn IMPERSONATE voor die gebruiker. Als een databaserol is opgegeven als de eigenaar, moet de aanroeper een van de volgende functies hebben: lidmaatschap van de rol of ALTER machtiging voor de rol.

Voor de achterwaarts compatibele syntaxis worden er geen machtigingen CREATE SCHEMA gecontroleerd omdat er geen schema wordt gemaakt.

Machtigingen in Fabric Data Warehouse

Naast de CREATE SCHEMA machtiging in Fabric Data Warehouse moet de gebruiker lid zijn van de werkruimterol Beheerder, Lid of Inzender.

Voorbeelden

Eén. Een schema maken en machtigingen verlenen

In het volgende voorbeeld wordt een schema Sprockets gemaakt dat eigendom is van Annik die tabel NineProngs. De verklaring verleent SELECT aan Mandar en weigert SELECT aan Prasanna. Sprockets en NineProngs worden gemaakt in één instructie.

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

Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)

B. Een schema en een tabel in het schema maken

In het volgende voorbeeld wordt een schema Sales gemaakt en vervolgens een tabel Sales.Region in dat schema gemaakt.

CREATE SCHEMA Sales;
GO

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

C. De eigenaar van een schema instellen

In het volgende voorbeeld wordt een Production schema gemaakt en ingesteld Mary als eigenaar.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO