Udostępnij za pomocą


UTWÓRZ SCHEMAT (Transact-SQL)

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

Tworzy schemat w bieżącej bazie danych. Transakcja CREATE SCHEMA może również tworzyć tabele i widoki w nowym schemacie oraz ustawiać GRANTuprawnienia , DENYlub REVOKE dla tych obiektów.

Transact-SQL konwencje składni

Składnia

Składnia dla programu SQL Server, usługi Azure SQL Database i bazy danych SQL w usłudze 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
    }

Składnia dla usług Azure Synapse Analytics i Parallel Data Warehouse.

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Argumenty (w programowaniu)

schema_name

Określa nazwę schematu w bazie danych.

OWNER_NAME AUTORYZACJI

Określa nazwę podmiotu zabezpieczeń na poziomie bazy danych, który będzie właścicielem schematu. Ten podmiot zabezpieczeń może posiadać inne schematy i może nie używać bieżącego schematu jako domyślnego schematu.

table_definition

Określa instrukcję CREATE TABLE , która tworzy tabelę w schemacie. Podmiot zabezpieczeń wykonujący tę instrukcję musi mieć CREATE TABLE uprawnienia do bieżącej bazy danych.

view_definition

Określa instrukcję CREATE VIEW , która tworzy widok w schemacie. Podmiot zabezpieczeń wykonujący tę instrukcję musi mieć CREATE VIEW uprawnienia do bieżącej bazy danych.

grant_statement

Określa instrukcję GRANT , która przyznaje uprawnienia do każdego zabezpieczanego z wyjątkiem nowego schematu.

revoke_statement

Określa instrukcję REVOKE , która odwołuje uprawnienia do każdego zabezpieczanego z wyjątkiem nowego schematu.

deny_statement

Określa instrukcję DENY , która odmawia uprawnień do wszystkich zabezpieczanych z wyjątkiem nowego schematu.

Uwagi

Instrukcje zawierające instrukcje , CREATE SCHEMA AUTHORIZATIONale nie określają nazwy, są dozwolone tylko w celu zapewnienia zgodności z poprzednimi wersjami. Instrukcja nie powoduje błędu, ale nie tworzy schematu.

CREATE SCHEMA program może utworzyć schemat, tabele i widoki, które zawiera, oraz GRANT, REVOKElub DENY uprawnienia do dowolnego zabezpieczania w jednej instrukcji. Tę instrukcję należy wykonać jako oddzielną partię. Obiekty utworzone przez instrukcję CREATE SCHEMA są tworzone wewnątrz tworzonego schematu.

CREATE SCHEMA transakcje są niepodzielne. Jeśli podczas wykonywania instrukcji CREATE SCHEMA wystąpi jakikolwiek błąd, żaden z określonych zabezpieczanych elementów nie zostanie utworzony i nie zostaną przyznane żadne uprawnienia.

Można wyświetlić listę zabezpieczanych elementów do utworzenia CREATE SCHEMA w dowolnej kolejności, z wyjątkiem widoków odwołujących się do innych widoków. W takim przypadku przed widokiem, do którego się odwołuje, należy utworzyć widok, do którego się odwołuje.

W związku z GRANT tym instrukcja może udzielić uprawnień do obiektu przed utworzeniem samego obiektu lub instrukcja CREATE VIEW może pojawić się przed CREATE TABLE instrukcjami, które tworzą tabele, do których odwołuje się widok. CREATE TABLE Ponadto instrukcje mogą deklarować klucze obce do tabel zdefiniowanych w dalszej części instrukcji CREATE SCHEMA .

Uwaga / Notatka

DENY i REVOKE są obsługiwane wewnątrz CREATE SCHEMA instrukcji. DENY klauzule i REVOKE są wykonywane w kolejności, w której są wyświetlane w instrukcji CREATE SCHEMA .

Podmiot zabezpieczeń, który wykonuje CREATE SCHEMA , może określić innego podmiotu zabezpieczeń bazy danych jako właściciela tworzonego schematu. Ta akcja wymaga dodatkowych uprawnień, zgodnie z opisem w sekcji Uprawnienia w dalszej części tego artykułu.

Nowy schemat jest własnością jednego z następujących podmiotów na poziomie bazy danych: użytkownik bazy danych, rola bazy danych lub rola aplikacji. Obiekty utworzone w schemacie są własnością właściciela schematu i mają wartość null principal_id w sys.objectselem. Własność obiektów zawartych w schemacie można przenieść do dowolnego podmiotu zabezpieczeń na poziomie bazy danych, ale właściciel schematu zawsze zachowuje CONTROL uprawnienia do obiektów w schemacie.

Uwaga / Notatka

Schematy nie są równoważne użytkownikom bazy danych. Użyj widoków wykazu systemu , aby zidentyfikować wszelkie różnice między użytkownikami bazy danych i schematami.

Niejawny schemat i tworzenie użytkownika

Uwaga / Notatka

Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).

W niektórych przypadkach użytkownik może użyć bazy danych bez konta użytkownika bazy danych (podmiot zabezpieczeń bazy danych w bazie danych). Ten warunek może wystąpić w następujących sytuacjach:

  • Logowanie ma CONTROL SERVER uprawnienia.

  • Użytkownik systemu Windows nie ma indywidualnego konta użytkownika bazy danych (podmiotu zabezpieczeń bazy danych w bazie danych), ale uzyskuje dostęp do bazy danych jako członek grupy systemu Windows, która ma konto użytkownika bazy danych (podmiot zabezpieczeń bazy danych dla grupy systemu Windows).

  • Użytkownik firmy Microsoft Entra nie ma indywidualnego konta użytkownika bazy danych (podmiotu zabezpieczeń bazy danych w bazie danych), ale uzyskuje dostęp do bazy danych jako członek grupy Microsoft Entra, która ma konto użytkownika bazy danych (podmiot zabezpieczeń bazy danych dla grupy Microsoft Entra).

Gdy użytkownik bez konta użytkownika bazy danych tworzy obiekt bez określania istniejącego schematu, jednostka bazy danych i domyślny schemat są tworzone automatycznie w bazie danych dla tego użytkownika. Utworzona jednostka bazy danych i schemat mają taką samą nazwę jak nazwa użytkownika używana podczas nawiązywania połączenia z programem SQL Server (nazwa logowania uwierzytelniania programu SQL Server lub nazwa użytkownika systemu Windows).

To zachowanie jest konieczne, aby umożliwić użytkownikom opartym na grupach systemu Windows tworzenie i tworzenie własnych obiektów. Może to jednak spowodować niezamierzone utworzenie schematów i użytkowników. Aby uniknąć niejawnego tworzenia użytkowników i schematów, zawsze, gdy jest to możliwe, jawnie utwórz podmioty zabezpieczeń bazy danych i przypisz domyślny schemat. Lub jawnie podaj istniejący schemat podczas tworzenia obiektów w bazie danych przy użyciu dwóch lub trzech części nazw obiektów.

Niejawne tworzenie użytkownika Microsoft Entra nie jest możliwe w usłudze SQL Database. Ponieważ utworzenie użytkownika entra firmy Microsoft od dostawcy zewnętrznego musi sprawdzić stan użytkownika w identyfikatorze Entra firmy Microsoft, utworzenie użytkownika kończy się niepowodzeniem z błędem 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. A następnie błąd 2759: CREATE SCHEMA failed due to previous errors.

Próby utworzenia lub zmiany schematów powodują błąd 15151: Cannot find the user '', because it does not exist or you do not have permission., po którym następuje również błąd 2759. Aby obejść te błędy, utwórz użytkownika Microsoft Entra od dostawcy zewnętrznego lub zmień grupę Microsoft Entra w celu przypisania domyślnego schematu. Następnie ponownie uruchom instrukcję tworzącą obiekt.

W punkcie końcowym analizy SQL i magazynie w usłudze Microsoft Fabric nazwy schematów nie mogą zawierać / ani \ kończyć się wartością ..

Powiadomienie o wycofaniu

CREATE SCHEMA instrukcje, które nie określają nazwy schematu, są obecnie obsługiwane w celu zapewnienia zgodności z poprzednimi wersjami. Te instrukcje nie tworzą schematu w bazie danych, ale tworzą tabele i widoki oraz udzielają uprawnień. Podmioty zabezpieczeń nie muszą mieć CREATE SCHEMA uprawnień do wykonywania tej wcześniejszej CREATE SCHEMAformy elementu , ponieważ nie jest tworzony żaden schemat. Ta funkcja zostanie usunięta z przyszłej wersji programu SQL Server.

Uprawnienia

Wymaga uprawnienia CREATE SCHEMA do bazy danych.

Aby utworzyć obiekt określony w instrukcji CREATE SCHEMA , użytkownik musi mieć odpowiednie CREATE uprawnienia.

Aby określić innego użytkownika jako właściciela tworzonego schematu, obiekt wywołujący musi mieć IMPERSONATE uprawnienia do tego użytkownika. Jeśli rola bazy danych jest określona jako właściciel, obiekt wywołujący musi mieć jedną z następujących opcji: członkostwo w roli lub ALTER uprawnienia roli.

W przypadku składni zgodnej z poprzednimi wersjami żadne uprawnienia nie CREATE SCHEMA są sprawdzane, ponieważ nie jest tworzony żaden schemat.

Uprawnienia w magazynie danych sieci szkieletowej

W usłudze Fabric Data Warehouse oprócz CREATE SCHEMA uprawnień użytkownik musi być członkiem roli obszaru roboczego Administrator, Członek lub Współautor.

Przykłady

Odp. Tworzenie schematu i udzielanie uprawnień

Poniższy przykład obejmuje tworzenie schematu Sprockets należącego do Annik tabeli zawierającej tabelę NineProngs. Oświadczenie przyznaje SELECT dla Mandar i odmawia SELECT dla Prasanna. Sprockets i NineProngs są tworzone w jednej instrukcji.

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

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

B. Tworzenie schematu i tabeli w schemacie

Poniższy przykład tworzy schemat Sales , a następnie tworzy tabelę Sales.Region w tym schemacie.

CREATE SCHEMA Sales;
GO

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

C. Ustawianie właściciela schematu

Poniższy przykład tworzy Production schemat i ustawia Mary go jako właściciela.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO