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

В SQL Server 2005 изменился порядок работы схем. Схемы теперь не эквивалентны пользователям базы данных; сейчас каждая схема — отдельное пространство имен, существующее независимо от пользователя базы данных, создавшего ее. Другими словами, схема — это просто контейнер объектов. Схема может принадлежать любому пользователю, и владение может передаваться.

Новые возможности

Разделение владения схемами имеет большое значение.

  • Владение схемами и защищаемыми объектами в области схемы можно передать. Дополнительные сведения см. в разделе ALTER AUTHORIZATION (Transact-SQL).

  • Объекты можно перемещать между схемами. Дополнительные сведения см. в разделе ALTER SCHEMA (Transact-SQL).

  • Одна схема может содержать объекты, принадлежащие нескольким пользователям базы данных.

  • Несколько баз данных могут делить одну схему по умолчанию.

  • Разрешениями на схемы и содержащимися в них защищаемыми объектами можно управлять с большей точностью, чем в более ранних выпусках. Дополнительные сведения см. в разделах GRANT, предоставления разрешения на схему (Transact-SQL) и GRANT, предоставление разрешений на объект (Transact-SQL).

  • Схема может принадлежать любому участнику базы данных. Это могут быть роли и роли приложений.

  • Пользователь базы данных может быть удален без удаления объектов в соответствующей схеме.

  • Программный код, написанный для ранних выпусков SQL Server, может возвращать неверные результаты, если он предполагает, что схемы эквивалентны пользователям базы данных.

  • Представления каталога, разработанные для предыдущих версий SQL Server, могут возвращать неверные результаты. в том числе и sysobjects.

  • Если при создании объекта базы данных указать допустимого участника домена (пользователя или группу) в качестве владельца объекта, то этот участник будет добавлен в базу данных в качестве схемы. Новая схема будет принадлежать этому участнику домена.

Новые представления каталогов

Начиная с версии SQL Server 2005, схемы — это явные сущности, отраженные в метаданных. Поэтому они могут иметь только одного владельца, но один пользователь может владеть несколькими схемами. Эти сложные связи не отражаются в системных таблицах SQL Server 2000, поэтому SQL Server 2005 предоставляет новые представления каталога, которые точно отражают новые метаданные.

В следующей таблице перечислены системные таблицы SQL Server 2000 и более поздних версий и соответствующие им представления каталога SQL Server 2005.

Системная таблица SQL Server 2000

Представление каталога SQL Server 2005 и более поздних версий

sysusers

sys.database_principals

sys.schemas

syslogins

sys.server_principals

В SQL Server 2005 появилось более 250 новых представлений каталога. Для доступа к метаданным настоятельно рекомендуется использовать новые представления каталога. Дополнительные сведения см. в разделе Представления каталога (Transact-SQL).

Новые инструкции DDL могут внести сложности в системные метаданные, которые точно не отражены в старых представлениях каталога, например sysobjects. В следующем примере представление sysobjects возвращает идентификатор пользователя и имя схемы, которые не синхронизированы и не отражают различие между пользователем и схемой, появившееся в SQL Server 2005.

USE tempdb
GO
CREATE LOGIN u1 WITH PASSWORD = 'Mdfjd$sakj943857l7sdfh##30'
CREATE USER u1 WITH DEFAULT_SCHEMA = u1
GO
GRANT CREATE TABLE to u1 
GO
CREATE SCHEMA sch1
GO
CREATE SCHEMA u1 AUTHORIZATION u1
GO
EXECUTE AS user = 'u1'
GO
CREATE TABLE t1(c1 int)
GO
revert
GO
SELECT user_name(uid) , * FROM sysobjects WHERE name = 't1'
GO
ПредупреждениеВнимание!

Необходимо использовать новые представления каталога в базе данных, где была выполнена любая из следующих инструкций DDL: CREATE/ALTER/DROP SCHEMA; CREATE/ALTER/DROP USER; CREATE/ALTER/DROP ROLE; CREATE/ALTER/DROP APPROLE; ALTER AUTHORIZATION.

Схемы по умолчанию

Для разрешения неполных имен защищаемых объектов в SQL Server 2000 используется разрешение имен, проверяющее схему, владельцем которой является вызывающий пользователь базы данных, и схему, владельцем которой является dbo.

Начиная с версии SQL Server 2005, у каждого пользователя есть схема по умолчанию. Схему по умолчанию можно задать с помощью параметра DEFAULT_SCHEMA инструкций CREATE USER и ALTER USER. Если параметр DEFAULT_SCHEMA не определен, схемой по умолчанию для пользователя базы данных будет dbo.