Aracılığıyla paylaş


ŞEMA OLUŞTUR (Transact-SQL)

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

Geçerli veritabanında bir şema oluşturur. İşlem CREATE SCHEMA ayrıca yeni şema içinde tablolar ve görünümler oluşturabilir ve bu nesneler üzerinde , GRANTveya DENY izinleri ayarlayabilirREVOKE.

Transact-SQL söz dizimi kuralları

Sözdizimi

Microsoft Fabric'te SQL Server, Azure SQL Veritabanı ve SQL veritabanı için söz dizimi.

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
    }

Azure Synapse Analytics ve Paralel Veri Ambarı söz dizimi.

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Tartışmalar

schema_name

Veritabanındaki şemanın adını belirtir.

YETKILENDIRME owner_name

Şemaya sahip olacak veritabanı düzeyi sorumlusunun adını belirtir. Bu sorumlu başka şemalara sahip olabilir ve geçerli şemayı varsayılan şeması olarak kullanmayabilir.

table_definition

CREATE TABLE Şema içinde tablo oluşturan bir deyimi belirtir. Bu deyimi yürüten sorumlunun geçerli veritabanında izni olmalıdır CREATE TABLE .

view_definition

Şema içinde bir CREATE VIEW görünüm oluşturan bir deyimi belirtir. Bu deyimi yürüten sorumlunun geçerli veritabanında izni olmalıdır CREATE VIEW .

grant_statement

Yeni şema dışında güvenliği sağlanabilir herhangi bir konuda izin veren bir GRANT deyimi belirtir.

revoke_statement

Yeni şema dışında güvenliği sağlanabilir tüm izinleri iptal eden bir REVOKE deyimi belirtir.

deny_statement

Yeni şema dışında güvenliği sağlanabilir herhangi bir konudaki izinleri reddeden bir DENY deyimi belirtir.

Açıklamalar

içeren CREATE SCHEMA AUTHORIZATIONancak ad belirtmeyen deyimlere yalnızca geriye dönük uyumluluk için izin verilir. Deyimi bir hataya neden olmaz, ancak şema oluşturmaz.

CREATE SCHEMA tek bir deyimde güvenliği sağlanabilir herhangi bir şema, içerdiği tablolar ve görünümler ve GRANT, REVOKEveya DENY izinleri oluşturabilir. Bu deyimi ayrı bir toplu iş olarak yürütmeniz gerekir. deyimi tarafından CREATE SCHEMA oluşturulan nesneler, oluşturduğunuz şemanın içinde oluşturulur.

CREATE SCHEMA işlemler atomiktir. Bir deyiminin yürütülmesi sırasında herhangi bir CREATE SCHEMA hata oluşursa, belirtilen güvenli hale getirilebilir öğelerden hiçbiri oluşturulmaz ve hiçbir izin verilmez.

Diğer görünümlere başvuran görünümler dışında, tarafından CREATE SCHEMA oluşturulacak güvenli hale getirilebilir öğeler listeleyebilirsiniz. Bu durumda başvuruda bulunılan görünüm, başvuruda bulunan görünümden önce oluşturulmalıdır.

Bu nedenle, bir GRANT deyimi nesnenin kendisi oluşturulmadan önce nesne üzerinde izin verebilir veya bir CREATE VIEW deyimi, görünüm tarafından başvuruda bulunan tabloları oluşturan deyimlerin önünde CREATE TABLE görüntülenebilir. Ayrıca deyimleri, CREATE TABLE deyiminin ilerleyen CREATE SCHEMA bölümlerinde tanımlanan tablolara yabancı anahtarlar bildirebilir.

Uyarı

DENY ve REVOKE deyimleri içinde CREATE SCHEMA desteklenir. DENY ve REVOKE yan tümceleri deyiminde göründükleri CREATE SCHEMA sırayla yürütülür.

Yürüten CREATE SCHEMA sorumlu, oluşturulan şemanın sahibi olarak başka bir veritabanı sorumlusu belirtebilir. Bu eylem, bu makalenin devamındaki İzinler bölümünde açıklandığı gibi ek izinler gerektirir.

Yeni şema aşağıdaki veritabanı düzeyi sorumlularından birine aittir: veritabanı kullanıcısı, veritabanı rolü veya uygulama rolü. Şema içinde oluşturulan nesneler, şemanın sahibine aittir ve içinde principal_idnull sys.objects değeri vardır. Şema içeren nesnelerin sahipliğini herhangi bir veritabanı düzeyi sorumlusuna aktarabilirsiniz, ancak şema sahibi her zaman şema içindeki nesneler üzerinde izni korur CONTROL .

Uyarı

Şemalar veritabanı kullanıcılarına eşdeğer değildir. Veritabanı kullanıcıları ile şemalar arasındaki farkları belirlemek için Sistem kataloğu görünümlerini kullanın.

Örtük şema ve kullanıcı oluşturma

Uyarı

Microsoft Entra Id daha önce Azure Active Directory (Azure AD) olarak biliniyordu.

Bazı durumlarda, bir kullanıcı veritabanı kullanıcı hesabına (veritabanında bir veritabanı sorumlusu) sahip olmadan veritabanını kullanabilir. Bu koşul aşağıdaki durumlarda oluşabilir:

  • Oturum açmanın ayrıcalıkları vardır CONTROL SERVER .

  • Bir Windows kullanıcısının tek bir veritabanı kullanıcı hesabı (veritabanında veritabanı sorumlusu) yoktur, ancak veritabanı kullanıcı hesabına (Windows grubu için veritabanı sorumlusu) sahip bir Windows grubunun üyesi olarak veritabanına erişir.

  • Microsoft Entra kullanıcısının tek bir veritabanı kullanıcı hesabı (veritabanında veritabanı sorumlusu) yoktur, ancak veritabanı kullanıcı hesabı (Microsoft Entra grubunun veritabanı sorumlusu) olan bir Microsoft Entra grubunun üyesi olarak bir veritabanına erişir.

Veritabanı kullanıcı hesabı olmayan bir kullanıcı var olan bir şema belirtmeden bir nesne oluşturduğunda, veritabanında bu kullanıcı için otomatik olarak bir veritabanı sorumlusu ve varsayılan şema oluşturulur. Oluşturulan veritabanı sorumlusu ve şeması, kullanıcının SQL Server'a bağlanırken kullandığı adla (SQL Server kimlik doğrulaması oturum açma adı veya Windows kullanıcı adı) aynı ada sahiptir.

Bu davranış, Windows gruplarını temel alan kullanıcıların nesneleri oluşturmasına ve sahip olmasını sağlamak için gereklidir. Ancak, şemaların ve kullanıcıların istemeden oluşturulmasına neden olabilir. Örtük olarak kullanıcı ve şema oluşturmaktan kaçınmak için, mümkün olduğunda açıkça veritabanı sorumluları oluşturun ve varsayılan bir şema atayın. Ya da iki veya üç parçalı nesne adlarını kullanarak veritabanında nesne oluştururken var olan bir şemayı açıkça belirtebilirsiniz.

MICROSOFT Entra kullanıcısının örtük olarak oluşturulması SQL Veritabanı'nda mümkün değildir. Dış sağlayıcıdan bir Microsoft Entra kullanıcısı oluşturma işleminin kullanıcının Microsoft Entra Id'deki durumunu denetlemesi gerektiğinden, kullanıcı oluşturma işlemi 2760 hatasıyla başarısız oluyor: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. Ve hata 2759: CREATE SCHEMA failed due to previous errors.

Şema oluşturma veya değiştirme girişimleri 15151: Cannot find the user '', because it does not exist or you do not have permission.hatasını ve ardından 2759 hatasını alır. Bu hataları geçici olarak çözmek için bir dış sağlayıcıdan Microsoft Entra kullanıcısını oluşturun veya Microsoft Entra grubunu değiştirerek varsayılan şemayı atayın. Ardından nesnesini oluşturan deyimini yeniden çalıştırın.

Microsoft Fabric'teki SQL analiz uç noktasında ve Ambar'da şema adları içeremez /\veya . ile bitemez.

Kullanımdan kaldırma bildirimi

CREATE SCHEMA şema adı belirtmeyen deyimler şu anda geriye dönük uyumluluk için desteklenmektedir. Bu deyimler aslında veritabanında şema oluşturmaz, ancak tablolar ve görünümler oluşturur ve izinler verir. Hiçbir şema oluşturulmadığından, sorumluların bu önceki biçimini yürütmek için izne CREATE SCHEMAihtiyacı CREATE SCHEMA yoktur. Bu işlev, SQL Server'ın gelecekteki bir sürümünden kaldırılacaktır.

İzinler

Veritabanı üzerinde CREATE SCHEMA izni gereklidir.

deyiminde CREATE SCHEMA belirtilen bir nesne oluşturmak için kullanıcının ilgili CREATE izne sahip olması gerekir.

Oluşturulan şemanın sahibi olarak başka bir kullanıcı belirtmek için çağıranın bu kullanıcı üzerinde izni olmalıdır IMPERSONATE . Bir veritabanı rolü sahip olarak belirtilirse, çağıranın aşağıdakilerden birine sahip olması gerekir: rolde üyelik veya ALTER rol üzerindeki izin.

Geriye dönük uyumlu söz dizimi için CREATE SCHEMA , şema oluşturulmadığından hiçbir izin denetlenemiyor.

Doku Veri Ambarı'ndaki İzinler

Doku Veri Ambarı'nda, izinlere CREATE SCHEMA ek olarak kullanıcının Yönetici, Üye veya Katkıda Bulunan çalışma alanı rolünün üyesi olması gerekir.

Örnekler

A. Şema oluşturma ve izinler verme

Aşağıdaki örnek, tablosunu Sprocketsiçeren sahip olduğu Annik şemayı NineProngs oluşturur. deyimi için verir ve öğesini reddeder SELECTMandar.SELECTPrasanna Sprockets ve NineProngs tek bir deyimde oluşturulur.

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

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

B. Şemada şema ve tablo oluşturma

Aşağıdaki örnek şema Sales oluşturur ve ardından bu şemada bir tablo Sales.Region oluşturur.

CREATE SCHEMA Sales;
GO

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

C. Şemanın sahibini ayarlama

Aşağıdaki örnek bir Production şema oluşturur ve sahip olarak ayarlar Mary .

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO