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

Изменения: 12 декабря 2006 г.

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

ms190387.note(ru-ru,SQL.90).gifПримечание.
Схемы базы данных отличны от XML-схем. Дополнительные сведения об XML-схемах см. в разделе Управление коллекциями XML-схем на сервере.

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

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

В предыдущих версиях SQL Server пользователи и схемы базы данных являлись по существу одними и теми же объектами. Начиная с SQL Server 2005, пользователи и схемы разделены и схемы служат в качестве контейнеров объектов.

Разделение схем и их владельцев имеет большое значение. Схемы базы данных позволяют лучше контролировать безопасность объектов базы данных благодаря следующим возможностям.

  • Разрешениями на схемы и содержащимися в них защищаемыми объектами можно управлять с большей точностью, чем в более ранних выпусках. Дополнительные сведения см. в разделах GRANT, предоставления разрешения на схему (Transact-SQL) и GRANT, предоставление разрешений на объект (Transact-SQL).
  • Владение схемами и защищаемыми объектами в области схемы можно передать. Дополнительные сведения см. в разделе ALTER AUTHORIZATION (Transact-SQL).
  • Объекты можно перемещать между схемами. Дополнительные сведения см. в разделе ALTER SCHEMA (Transact-SQL).
  • Одна схема может содержать объекты, принадлежащие нескольким пользователям базы данных.
  • Несколько баз данных могут делить одну схему по умолчанию.
  • Схема может принадлежать любому участнику. Это могут быть роли и роли приложений.
  • Пользователь базы данных может быть удален без удаления объектов в соответствующей схеме.

Схемы базы данных предлагают другие важные изменения в обеспечении безопасности по сравнению с предыдущими версиями.

  • Программный код, написанный для предыдущих версий SQL Server, может возвращать неверные результаты, если этот код предусматривает, что схемы эквивалентны пользователям базы данных.
  • Представления каталога, разработанные для ранних выпусков SQL Server, могут возвращать неверные результаты. К таким представлениям относится sysobjects.
  • Цепочки владения и переключение контекста пользователя теперь могут функционировать иначе, поскольку пользователи отныне могут владеть несколькими схемами. Дополнительные сведения о цепочках владения см. в разделах Цепочки владения и Иерархия разрешений. Дополнительные сведения о переключении контекста см. в разделе Контекстное переключение.
  • В SQL Server 2000 объекты базы данных принадлежали пользователям. Состоящая из четырех частей ссылка на объект базы данных в SQL Server 2000 выглядела как [Сервер_базы_данных].[Имя_базы_данных].[Владелец_объекта].[Объект_базы_данных]. Начиная с SQL Server 2005, состоящая из четырех частей ссылка на объект базы данных формируется как [Сервер_базы_данных].[Имя_базы_данных].[Схема_базы_данных].[Объект_базы_данных].

Изменения в принадлежности объектов

Свойство "владелец" следующих объектов ссылается на схему, а не на пользователя:

  • CREATE TABLE
  • ALTER TABLE
  • CREATE VIEW
  • ALTER VIEW
  • CREATE INDEX
  • ALTER INDEX
  • CREATE FUNCTION
  • ALTER FUNCTION
  • DROP FUNCTION
  • VIEW_TABLE_USAGE
  • VIEW_COLUMN_USAGE
  • TABLE_CONSTRAINTS
  • REFERENTIAL_CONSTRAINTS
  • KEY_COLUMN_USAGE
  • CONSTRAINT_TABLE_USAGE
  • CONSTRAINT_COLUMN_USAGE
  • CHECK_CONSTRAINTS
  • COLUMN_DOMAIN_USAGE
  • COLUMNS
  • DOMAIN_CONSTRAINTS
  • ROUTINE_COLUMNS

Дополнительные сведения о том, какими столбцами возвращаются метаданные пользователя, а какими — метаданные схемы, см. в разделе "Представления каталога и функции схем" ниже.

Замена системных таблиц представлениями каталога и функциями

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

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

Системная таблица SQL Server 2000 Представление каталога SQL Server 2005

Sysusers

sys.database_principals (Transact-SQL)

sys.schemas (Transact-SQL)

Syslogins

sys.server_principals (Transact-SQL)

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

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

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

ms190387.note(ru-ru,SQL.90).gifПримечание.
Пользователи, соединяющиеся с помощью группы прошедших проверку подлинности Windows, не будут иметь ассоциации схемы по умолчанию. Если такой пользователь создает объект, в имени которого не указана схема, создается новая схема, в качестве имени которой используется имя текущего пользователя, и в этом новом пространстве имен пользователя создается табличный объект.

Новые инструкции языка 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
ms190387.Caution(ru-ru,SQL.90).gifВнимание!
Необходимо использовать новые представления каталога в базе данных, где была выполнена любая из следующих инструкций DDL: CREATE/ALTER/DROP SCHEMA; CREATE/ALTER/DROP USER; CREATE/ALTER/DROP ROLE; CREATE/ALTER/DROP APPROLE; ALTER AUTHORIZATION.

Представления каталога и функции схем

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

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

Сведения о... Разделы

Общие метаданные схемы

sys.schemas (Transact-SQL)

Представления информационной схемы

Представления информационной схемы (Transact-SQL)

Определения столбцов, возвращаемые представлением INFORMATION_SCHEMA.SCHEMATA

SCHEMATA (Transact-SQL)

Примеры

А. Создание схемы и назначение пользователя владельцем

В следующем примере в базу данных AdventureWorks добавляется имя входа SQL Server, пользователь Marjorie и новая схема Auditing. Пользователь Marjorie назначается владельцем схемы Auditing.

CREATE LOGIN Marjorie
    WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks;
CREATE USER Marjorie FOR LOGIN Marjorie
GO
CREATE SCHEMA Auditing AUTHORIZATION Marjorie;
GO

Б. Предоставление пользователю прав на другую схему

В следующем примере пользователю Marjorie предоставляется разрешение SELECT для схемы Purchasing в базе данных AdventureWorks.

USE AdventureWorks;
GO
GRANT SELECT ON SCHEMA::Purchasing TO Marjorie;
GO

В. Смена владельца схемы

В следующем примере в базе данных AdventureWorks создается новый пользователь Jon. Пользователю Jon предоставляется право владения схемой Auditing в базе данных AdventureWorks. Затем пользователь Marjorie удаляется из базы данных AdventureWorks.

USE AdventureWorks;
GO
/* Create a new user in the database */
CREATE LOGIN Jon
    WITH PASSWORD = '1fdKJl3$nlNv3049jsBB';
USE AdventureWorks;
CREATE USER Jon FOR LOGIN Jon
GO
ALTER AUTHORIZATION ON SCHEMA::Auditing TO Jon;
GO
/* Removes the user from the system */
DROP LOGIN Marjorie;
GO
DROP USER Marjorie;
GO

Д. Отображение владения схемой

В следующем примере отображается владелец схемы Auditing в базе данных AdventureWorks.

USE AdventureWorks;
GO
/* This method uses the INFORMATION_SCHEMA views */
SELECT * 
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'Auditing';
GO

/* This method uses the sys.schemas catalog and links
   the names of the database users and server logins */
SELECT s.name AS 'Schema Name'
, db.name AS 'Database User Name'
, svr.name AS 'SQL Server Login Name'
FROM sys.schemas s
/* Obtains the name of the database user */
   INNER JOIN sys.database_principals db
      ON s.principal_id = db.principal_id
/* Obtains the name of the server login */
      INNER JOIN sys.server_principals svr
         ON db.sid = svr.sid
WHERE s.name = 'Auditing'
ORDER BY s.name

См. также

Основные понятия

Иерархия разрешений
Участники

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

CREATE SCHEMA (Transact-SQL)
ALTER SCHEMA (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
DROP SCHEMA (Transact-SQL)
sys.schemas (Transact-SQL)
CREATE USER (Transact-SQL)
ALTER USER (Transact-SQL)
Внесение изменений схем в базы данных публикаций

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

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

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

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

12 декабря 2006 г.

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

17 июля 2006 г.

Измененное содержимое
  • Существенно реорганизованный раздел.