CREATE SCHEMA (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data Warehouse

Erstellt ein Schema in der aktuellen Datenbank. Mit der CREATE SCHEMA-Transaktion können auch Tabellen und Sichten innerhalb des neuen Schemas erstellt und GRANT-, DENY- oder REVOKE-Berechtigungen für diese Objekte festgelegt werden.

Topic link icon Transact-SQL-Syntaxkonventionen

-- Syntax for SQL Server and Azure SQL Database  
  
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   
    }  

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]  

schema_name
Der Name, mit dem das Schema innerhalb der Datenbank identifiziert wird.

AUTORISIERUNG Owner_name
Gibt den Namen des Prinzipals auf Datenbankebene an, der der Besitzer des Schemas ist. Dieser Prinzipal kann andere Schemas besitzen und verwendet das aktuelle Schema möglicherweise nicht als Standardschema.

Table_Definition
Gibt eine CREATE TABLE-Anweisung an, die eine Tabelle in dem Schema erstellt. Der Prinzipal, der diese Anweisung ausführt, benötigt die CREATE TABLE-Berechtigung für die aktuelle Datenbank.

view_definition
Gibt eine CREATE VIEW-Anweisung an, die eine Sicht in dem Schema erstellt. Der Prinzipal, der diese Anweisung ausführt, benötigt die CREATE VIEW-Berechtigung für die aktuelle Datenbank.

grant_statement
Gibt eine GRANT-Anweisung an, die Berechtigungen für jedes sicherungsfähige Element außer dem neuen Schema erteilt.

revoke_statement
Gibt eine REVOKE-Anweisung an, die Berechtigungen für jedes sicherungsfähige Element außer dem neuen Schema aufhebt.

deny_statement
Gibt eine DENY-Anweisung an, die Berechtigungen für jedes sicherungsfähige Element außer dem neuen Schema verweigert.

System_CAPS_ICON_note.jpg Hinweis


Anweisungen, die CREATE SCHEMA AUTHORIZATION enthalten, aber kein Name angegeben ist, sind nur für Abwärtskompatibilität zulässig. Die Anweisung verursacht zwar keinen Fehler, erstellt aber auch kein Schema.

Mit CREATE SCHEMA können ein Schema und die darin enthaltenen Tabellen und Sichten sowie die Berechtigungen GRANT, REVOKE oder DENY für jedes sicherungsfähige Element in einer einzelnen Anweisung erstellt werden. Diese Anweisung muss als separater Batch ausgeführt werden. Mit der CREATE SCHEMA-Anweisung erstellte Objekte werden innerhalb des zu erstellenden Schemas erstellt.

CREATE SCHEMA-Transaktionen sind atomar. Wenn während der Ausführung einer CREATE SCHEMA-Anweisung ein Fehler auftritt, werden keine der angegebenen sicherungsfähigen Elemente erstellt, und es werden keine Berechtigungen erteilt.

Die von CREATE SCHEMA zu erstellenden sicherungsfähigen Elemente können in einer beliebigen Reihenfolge aufgelistet werden, außer bei Sichten, die auf andere Sichten verweisen. In diesem Fall muss die Sicht, auf die verwiesen wird, vor der verweisenden Sicht erstellt werden.

Deshalb kann eine GRANT-Anweisung eine Berechtigung für ein Objekt erteilen, bevor das Objekt selbst erstellt wird. Ebenso kann eine CREATE VIEW-Anweisung vor den entsprechenden CREATE TABLE-Anweisungen auftreten, die die Tabellen erstellen, auf die die Sicht verweist. CREATE TABLE-Anweisungen können darüber hinaus Fremdschlüssel für Tabellen deklarieren, die später in der CREATE SCHEMA-Anweisung definiert werden.

System_CAPS_ICON_note.jpg Hinweis


DENY und REVOKE werden in CREATE SCHEMA-Anweisungen unterstützt. DENY- und REVOKE-Klauseln werden in der Reihenfolge ausgeführt, in der sie in der CREATE SCHEMA-Anweisung angezeigt werden.

Der Prinzipal, der CREATE SCHEMA ausführt, kann einen anderen Datenbankprinzipal als Besitzer des erstellten Schemas angeben. Dies erfordert zusätzliche Berechtigungen, die im Abschnitt "Berechtigungen" weiter unten in diesem Thema beschrieben werden.

Das neue Schema ist im Besitz einer der folgenden Prinzipale auf Datenbankebene: Datenbankbenutzer, Datenbankrolle oder Anwendungsrolle. Objekte, die innerhalb eines Schemas erstellt werden, gehören dem Besitzer des Schemas und haben für principal_id in sys.objectseinen NULL-Wert. Der Besitz von Objekten, die Schemas als Bereich aufweisen, kann an jeden Prinzipal auf Datenbankebene übertragen werden, aber der Schemabesitzer behält immer die CONTROL-Berechtigung für Objekte innerhalb des Schemas.

System_CAPS_ICON_caution.jpg Achtung


Beginning with SQL Server 2005, the behavior of schemas changed. As a result, code that assumes that schemas are equivalent to database users may no longer return correct results. Old catalog views, including sysobjects, should not be used in a database in which any of the following DDL statements have ever been used: 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. In such databases you must instead use the new catalog views. The new catalog views take into account the separation of principals and schemas that was introduced in SQL Server 2005. For more information about catalog views, see Catalog Views (Transact-SQL).

Implizites Schema und Benutzererstellung

In bestimmten Fällen kann ein Benutzer eine Datenbank verwenden, ohne ein Datenbankbenutzerkonto (einen Datenbankprinzipal in der Datenbank) zu besitzen. Das ist in den folgenden Situationen möglich:

  • Eine Anmeldung besitzt CONTROL SERVER Berechtigungen.

  • Ein Windows-Benutzer hat kein individuelles Datenbankbenutzerkonto (einen Datenbankprinzipal in der Datenbank), greift jedoch als Mitglied einer Windows-Gruppe, die ein Datenbankbenutzerkonto (einen Datenbankprinzipal für die Windows-Gruppe) besitzt, auf eine Datenbank zu.

Wenn ein Benutzer ohne Datenbankbenutzerkonto ein Objekt erstellt, ohne ein vorhandenes Schema anzugeben, werden für diesen Benutzer automatisch ein Datenbankprinzipal und ein Standardschema in der Datenbank erstellt. Der erstellte Datenbankprinzipal und das erstellte Schema weisen den Namen auf, den der Benutzer bei der Herstellung der Verbindung zu SQL Server verwendet hat (der Anmeldenamen für die SQL Server-Authentifizierung oder der Windows-Benutzername).

Dieses Verhalten ist erforderlich, damit auf Windows-Gruppen basierende Benutzer Objekte erstellen und besitzen können. Es kann jedoch zur unbeabsichtigten Erstellung von Schemata und Benutzern führen. Um das implizite Erstellen von Benutzern und Schemata tu vermeiden, sollten Sie soweit möglich Datenbankprinzipale explizit erstellen und ein Standardschema zuweisen. Oder geben Sie bei der Erstellung von Objekten in einer Datenbank explizit ein vorhandenes Schema anhand von zwei- oder dreiteiligen Objektnamen an.

System_CAPS_ICON_note.jpg Hinweis

Die implizite Erstellung von Azure Active Directory-Benutzer ist nicht möglich, auf SQL-Datenbank. Da den Status der Benutzer in der AAD Erstellen eines Azure AD-Benutzers von externen Anbieter überprüfen muss, Erstellen des Benutzers schlägt fehl mit Fehler 2760: der angegebene Schemaname "user_name@domain" ist nicht vorhanden oder Sie sind nicht berechtigt, ihn zu verwenden. Und klicken Sie dann die Fehler 2759: Fehler bei CREATE SCHEMA wegen vorheriger Fehler. Um diese Fehler zu umgehen, erstellen Sie Azure AD-Benutzers vom externen Anbieter zunächst, und führen Sie die Anweisung, die beim Erstellen des Objekts.

CREATE SCHEMA-Anweisungen, die keinen Schemanamen angeben, werden derzeit aus Gründen der Abwärtskompatibilität unterstützt. Solche Anweisungen erstellen kein Schema in der Datenbank, sondern Tabellen und Sichten, und sie erteilen Berechtigungen. Prinzipale benötigen die CREATE SCHEMA-Berechtigung nicht zum Ausführen dieser älteren Version von CREATE SCHEMA, weil kein Schema erstellt wird. Diese Funktionalität wird in zukünftigen Versionen von SQL Server nicht mehr bereitgestellt.

Erfordert die CREATE SCHEMA-Berechtigung für die Datenbank.

Zum Erstellen eines in der CREATE SCHEMA-Anweisung angegebenen Objekts muss der Benutzer über die entsprechende CREATE-Berechtigung verfügen.

Um einen anderen Benutzer als den Besitzer des zu erstellenden Schemas anzugeben, benötigt der Aufrufer die IMPERSONATE-Berechtigung für diesen Benutzer. Wenn eine Datenbankrolle als Besitzer angegeben wird, muss der Aufrufer entweder über eine Mitgliedschaft in der Rolle oder die ALTER-Berechtigung für die Rolle verfügen.

System_CAPS_ICON_note.jpg Hinweis


Für die Abwärtskompatibilitätssyntax werden keine Berechtigungen für CREATE SCHEMA überprüft, weil kein Schema erstellt wird.

A. Erstellen eines Schemas und Benutzern Berechtigungen erteilen

Das folgende Beispiel erstellt das Sprockets-Schema, das im Besitz von Annik ist und die NineProngs-Tabelle enthält. Die Anweisung erteilt die SELECT-Berechtigung für Mandar und verweigert die SELECT-Berechtigung für Prasanna. Beachten Sie, dass Sprockets und NineProngs in einer einzigen Anweisung erstellt werden.

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

B. Erstellen ein Schema und eine Tabelle im schema

Das folgende Beispiel erstellt ein Schema Sales und erstellt dann eine Tabelle Sales.Region in diesem 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. Festlegen des Besitzers eines Schemas

Das folgende Beispiel erstellt ein Schema Production Besitz Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

ALTER SCHEMA ( Transact-SQL )
DROP SCHEMA ( Transact-SQL )
GRANT ( Transact-SQL )
DENY ( Transact-SQL )
REVOKE ( Transact-SQL )
ERSTELLEN Sie VIEW ( Transact-SQL )
EVENTDATA ( Transact-SQL )
Sys.Schemas ( Transact-SQL )
Erstellen eines Datenbankschemas

Community-Beiträge

HINZUFÜGEN
Anzeigen: