Compartilhar 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.

Convenções de sintaxe de Transact-SQL

Sintaxe

Sintaxe para 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 Azure Synapse Analytics e Parallel Data Warehouse.

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Argumentos

schema_name

Especifica o nome do esquema no banco de dados.

OWNER_NAME DE AUTORIZAÇÃO

Especifica o nome da entidade de segurança no nível de banco de dados que possuirá o esquema. Essa entidade de segurança pode ter 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 uma 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 no novo esquema.

revoke_statement

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

deny_statement

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

Comentários

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 essa instrução como um lote separado. Os objetos criados pela instrução CREATE SCHEMA 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 por CREATE SCHEMA qualquer ordem, exceto para exibições que fazem referência a outros modos de exibição. Nesse caso, a exibição mencionada deve ser criada antes da exibição que a menciona.

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

Observação

DENY e REVOKE têm suporte em instruções internas CREATE SCHEMA . DENY e REVOKE as cláusulas são executadas na ordem em que aparecem na CREATE SCHEMA instrução.

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

O esquema novo é de propriedade de uma das seguintes entidades de segurança em nível de banco de dados: usuário de banco de dados, função de banco de dados ou função de aplicativo. Os objetos criados em um esquema pertencem ao proprietário do esquema e têm um valor nuloprincipal_id.sys.objects Você pode transferir a propriedade de objetos contidos em 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

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

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

Observação

O Microsoft Entra ID era conhecido como Azure Active 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). Essa condição pode ocorrer nas seguintes situações:

  • Um logon 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 do 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 criada e o esquema têm o mesmo nome que o nome usado pelo usuário 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 usuários com base 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 criar usuários e esquemas implicitamente, sempre que possível crie entidades de banco de dados explicitamente e atribua um esquema padrão. Ou declare explicitamente um esquema existente ao criar objetos em um banco de dados usando nomes de objetos 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 do provedor externo deve verificar o status do usuário na ID do Microsoft Entra, 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.

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 criando 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 \ ou terminar com um ..

Aviso de substituição

CREATE SCHEMA no momento, há suporte para instruções que não especificam um nome de esquema para compatibilidade com versões anteriores. Essas instruções realmente não criam um esquema no banco de dados, mas criam tabelas e exibições e concedem permissões. As entidades de segurança não precisam de CREATE SCHEMA permissão para executar essa forma anterior, CREATE SCHEMAporque nenhum esquema está sendo criado. Essa funcionalidade será removida em versões futuras 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 nesse usuário. Se uma função de banco de dados for especificada como o proprietário, 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 será 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 workspace Administrador, Membro ou Colaborador.

Exemplos

a. Criar um esquema e conceder permissões

O exemplo a seguir cria o esquema Sprockets possuído por Annik que contém a tabela NineProngs. A instrução concede SELECT a Mandar e nega SELECT a Prasanna. Sprockets e NineProngs são criados em uma única instruçã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 e PDW (Analytics Platform System)

B. Criar um esquema e uma tabela no esquema

O exemplo a seguir cria um 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