Partilhar via


CRIAR ESQUEMA (Transact-SQL)

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

Cria um esquema no banco de dados atual. A CREATE SCHEMA transação também pode criar tabelas e exibições dentro do novo esquema e definir GRANT, DENYou REVOKE permissões nesses objetos.

Transact-SQL convenções de sintaxe

Sintaxe

Sintaxe do SQL Server, Banco de Dados SQL do Azure e Banco de Dados SQL no 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
    }

Sintaxe para o Azure Synapse Analytics e o Parallel Data Warehouse.

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Argumentos

schema_name

Especifica o nome do esquema dentro do banco de dados.

AUTORIZAÇÃO owner_name

Especifica o nome da entidade de segurança no nível de banco de dados que será proprietária do esquema. Essa entidade de segurança pode possuir outros esquemas e pode não usar o esquema atual como seu esquema padrão.

table_definition

Especifica uma CREATE TABLE instrução que cria uma tabela dentro do esquema. A entidade de segurança que executa essa instrução deve ter CREATE TABLE permissão no banco de dados atual.

view_definition

Especifica uma CREATE VIEW instrução que cria um modo de exibição dentro do esquema. A entidade de segurança que executa essa instrução deve ter CREATE VIEW permissão no banco de dados atual.

grant_statement

Especifica uma GRANT instrução que concede permissões em qualquer protegível, exceto o novo esquema.

revoke_statement

Especifica uma REVOKE instrução que revoga permissões em qualquer protegível, exceto o novo esquema.

deny_statement

Especifica uma DENY instrução que nega permissões em qualquer protegível, exceto o novo esquema.

Observações

As instruções que contêm CREATE SCHEMA AUTHORIZATION, mas não especificam um nome, só são permitidas para compatibilidade com versões anteriores. A instrução não causa um erro, mas não cria um esquema.

CREATE SCHEMA pode criar um esquema, as tabelas e exibições que ele contém, e GRANT, REVOKEou DENY permissões em qualquer protegível em uma única instrução. Você deve executar esta instrução como um lote separado. Os objetos criados pela CREATE SCHEMA instrução são criados dentro do esquema que você cria.

CREATE SCHEMA as transações são atómicas. Se ocorrer algum erro durante a execução de uma CREATE SCHEMA instrução, nenhum dos protegíveis especificados será criado e nenhuma permissão será concedida.

Você pode listar protegíveis a serem criados em CREATE SCHEMA qualquer ordem, exceto para modos de exibição que fazem referência a outros modos de exibição. Nesse caso, o modo de exibição referenciado deve ser criado antes do modo de exibição que faz referência a ele.

Portanto, uma GRANT instrução pode conceder permissão em um objeto antes que o próprio objeto seja criado, ou uma CREATE VIEW instrução pode aparecer antes das CREATE TABLE instruções que criam as tabelas referenciadas pelo modo de exibição. Além disso, CREATE TABLE as CREATE SCHEMA instruções podem declarar chaves estrangeiras para tabelas que são definidas posteriormente na instrução.

Observação

DENY e REVOKE são suportados por declarações internas CREATE SCHEMA . DENY e REVOKE as cláusulas são executadas na ordem em que aparecem na CREATE SCHEMA declaração.

A entidade de segurança executada CREATE SCHEMA pode especificar outra entidade de banco de dados como proprietária do esquema que está sendo criado. Essa ação requer permissões extras, conforme descrito na seção Permissões , mais adiante neste artigo.

O novo esquema pertence a uma das seguintes entidades de segurança no nível de banco de dados: usuário do banco de dados, função do banco de dados ou função do aplicativo. Os objetos criados dentro de um esquema são de propriedade do proprietário do esquema e têm um null principal_id em sys.objects. Você pode transferir a propriedade de objetos contidos no esquema para qualquer entidade de segurança no nível do banco de dados, mas o proprietário do esquema sempre mantém CONTROL a permissão em objetos dentro do esquema.

Observação

Os esquemas não são equivalentes aos usuários do banco de dados. Use as exibições do catálogo do sistema para identificar quaisquer diferenças entre os usuários e esquemas do banco de dados.

Esquema implícito e criação de usuários

Observação

O Microsoft Entra ID era conhecido anteriormente como Azure Ative Directory (Azure AD).

Em alguns casos, um usuário pode usar um banco de dados sem ter uma conta de usuário de banco de dados (uma entidade de banco de dados no banco de dados). Esta condição pode acontecer nas seguintes situações:

  • Um login tem CONTROL SERVER privilégios.

  • Um usuário do Windows não tem uma conta de usuário de banco de dados individual (uma entidade de banco de dados no banco de dados), mas acessa um banco de dados como membro de um grupo do Windows que tem uma conta de usuário de banco de dados (uma entidade de banco de dados para o grupo Windows).

  • Um usuário do Microsoft Entra não tem uma conta de usuário de banco de dados individual (uma entidade de banco de dados no banco de dados), mas acessa um banco de dados como membro de um grupo do Microsoft Entra que tem uma conta de usuário de banco de dados (uma entidade de banco de dados para o grupo Microsoft Entra).

Quando um usuário sem uma conta de usuário de banco de dados cria um objeto sem especificar um esquema existente, uma entidade de banco de dados e um esquema padrão são criados no banco de dados automaticamente para esse usuário. A entidade de banco de dados e o esquema criados têm o mesmo nome que o usuário usou ao se conectar ao SQL Server (o nome de logon de autenticação do SQL Server ou o nome de usuário do Windows).

Esse comportamento é necessário para permitir que os usuários baseados em grupos do Windows criem e possuam objetos. No entanto, isso pode resultar na criação não intencional de esquemas e usuários. Para evitar a criação implícita de usuários e esquemas, sempre que possível, crie explicitamente entidades de banco de dados e atribua um esquema padrão. Ou declare explicitamente um esquema existente ao criar objetos em um banco de dados, usando nomes de objeto de duas ou três partes.

A criação implícita de um usuário do Microsoft Entra não é possível no Banco de dados SQL. Como a criação de um usuário do Microsoft Entra a partir de um provedor externo deve verificar o status do usuário no Microsoft Entra ID, a criação do usuário falha com o erro 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. E, em seguida, o erro 2759: CREATE SCHEMA failed due to previous errors.

As tentativas de criar ou alterar esquemas resultam no erro 15151: Cannot find the user '', because it does not exist or you do not have permission., também seguido pelo erro 2759. Para contornar esses erros, crie o usuário do Microsoft Entra de um provedor externo ou altere o grupo do Microsoft Entra para atribuir um esquema padrão. Em seguida, execute novamente a instrução que cria o objeto.

No ponto de extremidade de análise SQL e no Warehouse no Microsoft Fabric, os nomes de esquema não podem conter / ou \ terminar com um .arquivo .

Aviso de preterição

CREATE SCHEMA instruções que não especificam um nome de esquema são atualmente suportadas para compatibilidade com versões anteriores. Na verdade, essas instruções não criam um esquema no banco de dados, mas criam tabelas e exibições e concedem permissões. Os principais não precisam CREATE SCHEMA de permissão para executar essa forma anterior do CREATE SCHEMA, porque nenhum esquema está sendo criado. Essa funcionalidade será removida de uma versão futura do SQL Server.

Permissões

Requer permissão CREATE SCHEMA no banco de dados.

Para criar um objeto especificado na CREATE SCHEMA instrução, o usuário deve ter a permissão correspondente CREATE .

Para especificar outro usuário como o proprietário do esquema que está sendo criado, o chamador deve ter IMPERSONATE permissão sobre esse usuário. Se uma função de banco de dados for especificada como proprietária, o chamador deverá ter uma das seguintes opções: associação à função ou ALTER permissão na função.

Para a sintaxe compatível com versões anteriores, nenhuma permissão é CREATE SCHEMA verificada porque nenhum esquema está sendo criado.

Permissões no Fabric Data Warehouse

No Fabric Data Warehouse, além da CREATE SCHEMA permissão, o usuário deve ser membro da função de espaço de trabalho Administrador, Membro ou Colaborador.

Exemplos

Um. Criar um esquema e conceder permissões

O exemplo a seguir cria o esquema Sprockets de propriedade de Annik que contém a tabela NineProngs. A declaração concede SELECTMandar e nega SELECT a Prasanna. Sprockets e NineProngs são criados em uma única declaração.

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

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

B. Criar um esquema e uma tabela no esquema

O exemplo a seguir cria o esquema Sales e, em seguida, cria uma tabela Sales.Region nesse esquema.

CREATE SCHEMA Sales;
GO

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

C. Definir o proprietário de um esquema

O exemplo a seguir cria um Production esquema e define Mary como o proprietário.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO