CREATE SCHEMA (Transact-SQL)

Изменения: 17 июля 2006 г.

Создает схему в текущей базе данных. При помощи транзакции CREATE SCHEMA также можно создавать таблицы и представления в новой схеме и предоставлять разрешения GRANT, DENY или REVOKE на такие объекты.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

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 
    }

Аргументы

  • schema_name
    Имя, по которому схема идентифицируется в данной базе данных.
  • AUTHORIZATION owner_name
    Указывает имя участника уровня базы данных, который является владельцем схемы. Этому участнику могут принадлежать и другие схемы, при этом текущая схема может не использоваться по умолчанию.
  • table_definition
    Указывает инструкцию CREATE TABLE, которая создает таблицу внутри схемы. У участника, выполняющего эту инструкцию, должно быть разрешение CREATE TABLE в текущей базе данных.
  • view_definition
    Указывает инструкцию CREATE VIEW, которая создает представление внутри схемы. У участника, выполняющего эту инструкцию, должно быть разрешение CREATE TABLE в текущей базе данных.
  • grant_statement
    Указывает инструкцию GRANT, которая предоставляет разрешения на любой защищаемый объект, за исключением новой схемы.
  • revoke_statement
    Указывает инструкцию REVOKE, которая отменяет разрешения на любой защищаемый объект, за исключением новой схемы.
  • deny_statement
    Указывает инструкцию DENY, которая запрещает разрешения на любой защищаемый объект, за исключением новой схемы.

Замечания

ms189462.note(ru-ru,SQL.90).gifПримечание.
Инструкции, которые содержат CREATE SCHEMA AUTHORIZATION, но не указывают имя, разрешены только для обратной совместимости.

Инструкция CREATE SCHEMA создает схему, содержащиеся в ней таблицы и представления, а также разрешения GRANT, REVOKE или DENY на любой защищаемый объект в одной инструкции. Эта инструкция должна выполняться как отдельный пакет. При помощи инструкции CREATE SCHEMA объекты создаются внутри создаваемой схемы.

Транзакции CREATE SCHEMA являются атомарными. Если в процессе выполнения инструкции CREATE SCHEMA возникают ошибки, ни один из указанных защищаемых объектов не создается, и ни одно разрешение не предоставляется.

Защищаемые объекты, которые необходимо создать при помощи инструкции CREATE SCHEMA, могут быть перечислены в любом порядке, за исключением представлений, ссылающихся на другие представления. В этом случае ссылающееся представление должно быть создано после того представления, на которое оно ссылается.

Таким образом, при помощи инструкции GRANT можно предоставлять разрешения на объект еще до того, как он будет создан, а инструкция CREATE VIEW может появляться раньше инструкций CREATE TABLE, создающих таблицы, на которые ссылается представление. Кроме того, инструкции CREATE TABLE могут декларировать внешние ключи к таблицам, определенным позже в инструкции CREATE SCHEMA.

ms189462.note(ru-ru,SQL.90).gifПримечание.
В SQL Server 2005 в инструкциях CREATE SCHEMA поддерживаются DENY и REVOKE. Предложения DENY и REVOKE будут исполняться в той последовательности, в которой они появляются в инструкции CREATE SCHEMA.

Участник, выполняющий инструкцию CREATE SCHEMA, может указать другого участника базы данных в качестве владельца создаваемой схемы. Для этого необходимы дополнительные разрешения, описанные в подразделе «Разрешения» далее в этом разделе.

Владельцем схемы является один из следующих участников уровня базы данных: пользователь базы данных, роль базы данных, роль приложения. Объекты, создаваемые в схеме, принадлежат владельцу схемы и имеют значение NULL для principal_id в sys.objects. Владение объектами, содержащимися в схеме, можно передать любому участнику уровня базы данных, однако у владельца схемы всегда остается разрешение CONTROL на объекты в схеме.

ms189462.Caution(ru-ru,SQL.90).gifВнимание!
В SQL Server 2005 поведение схем отличается от предыдущих версий SQL Server. Код, в котором предполагается, что схемы эквивалентны пользователям базы данных, может возвращать неверные результаты. Старые представления каталога содержат таблицу sysobjects, которая не может быть использована в базе данных, в которой когда-либо выполнялась любая из следующих инструкций DDL: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. В базе данных, где была выполнена любая из этих инструкций, необходимо использовать новые представления каталога. Новые представления каталога учитывают разделение участников и схем, появившееся в SQL Server 2005. Дополнительные сведения о представлениях каталога см. в разделе Представления каталога (Transact-SQL).

Уведомление об устаревании

Инструкции CREATE SCHEMA, не указывающие имя схемы, поддерживаются в данный момент только для обратной совместимости. Такие инструкции на самом деле не создают схему внутри базы данных, а создают таблицы и представления, а также предоставляют разрешения. Участникам не нужны разрешения CREATE SCHEMA для выполнения этой более ранней формы инструкции CREATE SCHEMA, поскольку схема не создается. Эта функция не будет включена в последующие выпуски SQL Server.

Разрешения

Требует разрешения CREATE SCHEMA в базе данных.

Чтобы создать объект, указанный в инструкции CREATE SCHEMA, у пользователя должно быть соответствующее разрешение CREATE.

Чтобы назначить другого пользователя владельцем создаваемой схемы, у участника должно быть разрешение IMPERSONATE на этого пользователя. Если в качестве владельца указана роль базы данных, у участника должно быть одно из нижеследующих разрешений: членство в роли или разрешение ALTER на эту роль.

ms189462.note(ru-ru,SQL.90).gifПримечание.
Для синтаксиса обратной совместимости разрешения на CREATE SCHEMA не проверяются, поскольку схема не создается.

Примеры

В следующем примере создается схема Sprockets, принадлежащая Annik, которая содержит таблицу NineProngs. Инструкция предоставляет разрешение SELECT для Mandar и запрещает SELECT для Prasanna. Обратите внимание на то, что Sprockets и NineProngs создаются в одной инструкции.

USE AdventureWorks;
CREATE SCHEMA Sprockets AUTHORIZATION Annik
    CREATE TABLE NineProngs (source int, cost int, partnumber int)
    GRANT SELECT TO Mandar
    DENY SELECT TO Prasanna;
GO 

См. также

Справочник

ALTER SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
Инструкция GRANT (Transact-SQL)
DENY (Transact-SQL)
REVOKE (Transact-SQL)
CREATE VIEW (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.schemas (Transact-SQL)

Другие ресурсы

Отделение пользователей от схем

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 июля 2006 г.

Измененное содержимое
  • Исправлен синтаксис.