Sdílet prostřednictvím


VYTVOŘIT 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)]

Vytvoří schéma v aktuální databázi. Transakce CREATE SCHEMA může také vytvářet tabulky a zobrazení v rámci nového schématu a nastavit GRANT, DENYnebo REVOKE oprávnění k těmto objektům.

Transact-SQL konvence syntaxe

Syntaxe

Syntaxe pro SQL Server, Azure SQL Database a databázi SQL v 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 pro Azure Synapse Analytics a paralelní datový sklad

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Argumenty

schema_name

Určuje název schématu v databázi.

OWNER_NAME AUTORIZACE

Určuje název objektu zabezpečení na úrovni databáze, který bude vlastnit schéma. Tento objekt zabezpečení může vlastnit jiná schémata a nemusí používat aktuální schéma jako výchozí schéma.

table_definition

Určuje CREATE TABLE příkaz, který vytvoří tabulku v rámci schématu. Objekt zabezpečení, který tento příkaz spouští, musí mít CREATE TABLE oprávnění k aktuální databázi.

view_definition

Určuje CREATE VIEW příkaz, který vytvoří zobrazení v rámci schématu. Objekt zabezpečení, který tento příkaz spouští, musí mít CREATE VIEW oprávnění k aktuální databázi.

grant_statement

Určuje GRANT příkaz, který uděluje oprávnění k jakémukoli zabezpečitelnému s výjimkou nového schématu.

revoke_statement

Určuje REVOKE příkaz, který odvolá oprávnění k jakémukoli zabezpečitelnému s výjimkou nového schématu.

deny_statement

Určuje DENY příkaz, který zakazuje oprávnění k jakémukoli zabezpečitelnému s výjimkou nového schématu.

Poznámky

Příkazy, které obsahují CREATE SCHEMA AUTHORIZATION, ale nezadávají název, jsou povoleny pouze pro zpětnou kompatibilitu. Příkaz nezpůsobí chybu, ale nevytvoří schéma.

CREATE SCHEMAmůže vytvořit schéma, tabulky a zobrazení, které obsahuje, a GRANTREVOKE, nebo DENY oprávnění pro jakékoli zabezpečitelné v jednom příkazu. Tento příkaz musíte spustit jako samostatnou dávku. Objekty vytvořené příkazem CREATE SCHEMA se vytvoří uvnitř schématu, které vytvoříte.

CREATE SCHEMA transakce jsou atomické. Pokud během provádění CREATE SCHEMA příkazu dojde k nějaké chybě, nevytvoře se žádná ze zadaných zabezpečitelných hodnot a nebudou udělena žádná oprávnění.

Můžete vytvořit seznam zabezpečitelných položek v libovolném CREATE SCHEMA pořadí, s výjimkou zobrazení, která odkazují na jiná zobrazení. V takovém případě musí být odkazované zobrazení vytvořeno před zobrazením, které na něj odkazuje.

GRANT Příkaz proto může udělit oprávnění k objektu před vytvořením objektu, nebo CREATE VIEW se příkaz může objevit před CREATE TABLE příkazy, které vytvářejí tabulky odkazované zobrazením. CREATE TABLE Příkazy také mohou deklarovat cizí klíče do tabulek, které jsou definovány později v CREATE SCHEMA příkazu.

Poznámka:

DENY a REVOKE jsou podporovány uvnitř CREATE SCHEMA příkazů. DENY a REVOKE klauzule se provádějí v pořadí, v jakém se zobrazují v CREATE SCHEMA příkazu.

Objekt zabezpečení, který se spustí CREATE SCHEMA , může jako vlastníka vytvořeného schématu zadat jiný objekt databáze. Tato akce vyžaduje další oprávnění, jak je popsáno v části Oprávnění dále v tomto článku.

Nové schéma vlastní jeden z následujících principálů na úrovni databáze: uživatel databáze, role databáze nebo aplikační role. Objekty vytvořené v rámci schématu vlastní vlastník schématu a mají hodnotu null principal_id v sys.objects. Vlastnictví objektů obsažených ve schématu můžete přenést do jakéhokoli objektu zabezpečení na úrovni databáze, ale vlastník schématu vždy uchovává CONTROL oprávnění k objektům v rámci schématu.

Poznámka:

Schémata nejsou ekvivalentní uživatelům databáze. Pomocí zobrazení katalogu systému identifikujte všechny rozdíly mezi uživateli databáze a schématy.

Implicitní schéma a vytváření uživatelů

Poznámka:

Microsoft Entra ID se dříve označovala jako Azure Active Directory (Azure AD).

V některých případech může uživatel použít databázi bez uživatelského účtu databáze (instanční objekt databáze v databázi). K této podmínce může dojít v následujících situacích:

  • Přihlášení má CONTROL SERVER oprávnění.

  • Uživatel Systému Windows nemá individuální databázový uživatelský účet (instanční objekt databáze v databázi), ale přistupuje k databázi jako člen skupiny Windows, která má uživatelský účet databáze (objekt zabezpečení databáze pro skupinu Windows).

  • Uživatel Microsoft Entra nemá individuální uživatelský účet databáze (objekt zabezpečení databáze v databázi), ale přistupuje k databázi jako člen skupiny Microsoft Entra, která má uživatelský účet databáze (objekt zabezpečení databáze pro skupinu Microsoft Entra).

Když uživatel bez databázového uživatelského účtu vytvoří objekt bez zadání existujícího schématu, objekt zabezpečení databáze a výchozí schéma se v databázi vytvoří automaticky pro daného uživatele. Vytvořený objekt databáze a schéma mají stejný název jako název, který uživatel použil při připojování k SQL Serveru (přihlašovací jméno ověřování SYSTÉMU SQL Server nebo uživatelské jméno systému Windows).

Toto chování je nezbytné, aby uživatelé, kteří jsou založeni na skupinách Windows, mohli vytvářet a vlastní objekty. Může však vést k neúmyslnému vytvoření schémat a uživatelů. Abyste se vyhnuli implicitnímu vytváření uživatelů a schémat, kdykoli je to možné, explicitně vytvořte objekty zabezpečení databáze a přiřaďte výchozí schéma. Nebo explicitně uveďte existující schéma při vytváření objektů v databázi pomocí dvou nebo třídílných názvů objektů.

Implicitní vytvoření uživatele Microsoft Entra není možné ve službě SQL Database. Vzhledem k tomu, že vytvoření uživatele Microsoft Entra od externího poskytovatele musí zkontrolovat stav uživatele v MICROSOFT Entra ID, vytvoření uživatele selže s chybou 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. A pak chyba 2759: CREATE SCHEMA failed due to previous errors.

Při pokusu o vytvoření nebo změnu schémat dojde k chybě 15151: Cannot find the user '', because it does not exist or you do not have permission.a za ní následuje chyba 2759. Pokud chcete tyto chyby obejít, vytvořte uživatele Microsoft Entra z externího poskytovatele nebo upravte skupinu Microsoft Entra tak, aby přiřadil výchozí schéma. Pak znovu spusťte příkaz, který vytvoří objekt.

V koncovém bodu SQL Analytics a ve službě Microsoft Fabric nemůžou názvy schémat obsahovat / ani \ končit tečkou ..

Oznámení o vyřazení

CREATE SCHEMA Příkazy, které nezadávají název schématu, se v současné době podporují kvůli zpětné kompatibilitě. Tyto příkazy ve skutečnosti nevytvoří schéma v databázi, ale vytvářejí tabulky a zobrazení a udělují oprávnění. Objekty zabezpečení nepotřebují CREATE SCHEMA oprávnění ke spuštění této dřívější formy CREATE SCHEMA, protože se nevytvoří žádné schéma. Tato funkce bude odebrána z budoucí verze SQL Serveru.

Povolení

Vyžaduje CREATE SCHEMA oprávnění k databázi.

Chcete-li vytvořit objekt zadaný v rámci CREATE SCHEMA příkazu, musí mít uživatel odpovídající CREATE oprávnění.

Chcete-li zadat jiného uživatele jako vlastníka vytvářeného schématu, volající musí mít IMPERSONATE oprávnění k housle. Pokud je jako vlastník zadána role databáze, volající musí mít jednu z následujících možností: členství v roli nebo ALTER oprávnění k této roli.

V případě zpětně kompatibilní syntaxe nejsou kontrolována žádná oprávnění CREATE SCHEMA , protože se nevytvořilo žádné schéma.

Oprávnění v datovém skladu prostředků infrastruktury

Kromě oprávnění musí být uživatel v CREATE SCHEMA Datovém skladu Fabric členem role Správce, Člen nebo Přispěvatel.

Příklady

A. Vytvoření schématu a udělení oprávnění

Následující příklad vytvoří schéma Sprockets vlastněné Annik tím, že obsahuje tabulku NineProngs. Prohlášení uděluje SELECTMandar a odepírá SELECTPrasanna. Sprockets a NineProngs jsou vytvořeny v jednom příkazu.

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

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

B. Vytvoření schématu a tabulky ve schématu

Následující příklad vytvoří schéma Sales a pak vytvoří tabulku Sales.Region v tomto schématu.

CREATE SCHEMA Sales;
GO

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

C. Nastavení vlastníka schématu

Následující příklad vytvoří Production schéma a nastaví Mary jako vlastníka.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO