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

Поведение схем в 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.