Отделение пользователей от схем
В 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.
См. также