Поделиться через


Владение и отделение пользователей от схем в SQL Server (ADO.NET)

Обновлен: November 2007

Основным принципом безопасности SQL Server является то, что владельцы объектов имеют неотзываемые разрешения на их администрирование. Нельзя удалять права доступа у владельцев объектов. Также нельзя удалять пользователей из базы данных, если они владеют в ней объектами. В SQL 2000, если пользователь создает объект, не задавая его владельца, он становится владельцем этого объекта. Владелец объекта имеет неотзываемые разрешения на их администрирование, что приводит к проблемам, если объекты принадлежат нескольким пользователям. Если владельцем всех объектов в базе данных будет один пользователь, пользующийся преимуществами цепочек владения, это упростит управление разрешениями в SQL Server 2000, как объясняется в разделе Авторизация и разрешения в SQL Server (ADO.NET).

Bb669061.alert_note(ru-ru,VS.90).gifПримечание.

Члены предопределенной роли сервера sysadmin и предопределенной роли базы данных db_owner также имеют неотзываемые разрешения владельца на все объекты базы данных.

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

Server.Database.ObjectOwner.DatabaseObject

Если оба пользователя базы данных, Боб и Сью, создают таблицу Table1, необходимо указывать ее полное имя. Если системный администратор или владелец базы данных создает объект, он принадлежит учетной записи dbo, а не отдельному пользователю.

SELECT col1 FROM Bob.Table1
SELECT col1 FROM Sue.Table1
SELECT col1 FROM dbo.Table1
Bb669061.alert_note(ru-ru,VS.90).gifПримечание.

При ссылке на объект, принадлежащий dbo, не обязательно использовать синтаксис ObjectOwner.DatabaseObject, хотя он более эффективен. Если владелец базы данных не задан, SQL Server 2000 вначале проверяет, существует ли объект с именем текущего пользователя, затем проверяет, принадлежит ли этот объект учетной записи dbo. Двухкомпонентное имя позволяет избежать лишнего шага.

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

SQL Server 2005 ввел отделение пользователей от схем, которое обеспечивает большую гибкость в управлении разрешениями на объекты базы данных. Схема представляет собой именованный контейнер для объектов базы данных, позволяющий группировать объекты по отдельным пространствам имен. Например, образец базы данных AdventureWorks содержит схемы для Production, Sales и HumanResources.

Четырехкомпонентный синтаксис ссылок на объекты указывает имя схемы.

Server.Database.DatabaseSchema.DatabaseObject

Владельцы схемы и разрешения

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

По умолчанию, если разработчик создает объект в схеме, он принадлежит участнику безопасности, являющемуся владельцем схемы, а не разработчику. Владение объектом можно передать с помощью инструкции Transact-SQL ALTER AUTHORIZATION. Схема может также содержать объекты, принадлежащие другим пользователям и иметь более детализированные разрешения, чем назначенные схеме, хотя это не рекомендуется из-за увеличения сложности управления разрешениями. Объекты можно перемещать из одной схемы в другую, а принадлежность схемы передавать от одного участника другому. Пользователей базы данных можно удалять, не влияя этим на схемы.

Встроенные схемы

SQL Server поставляется с десятью предварительно определенными схемами, имеющими одинаковое имя со встроенными пользователями и ролями базы данных. Они существуют главным образом ради обратной совместимости. Схемы, имеющие одинаковые имена с предопределенными ролями базы данных, можно удалить, если они не нужны. Можно удалить следующие схемы.

  • dbo

  • guest

  • sys

  • INFORMATION_SCHEMA

Если их удалить из модели базы данных, эти схемы не появятся в новых базах данных.

Bb669061.alert_note(ru-ru,VS.90).gifПримечание.

Схемы sys и INFORMATION_SCHEMA зарезервированы для системных объектов. В этих схемах нельзя создавать и удалять объекты.

Схема dbo

Схема dbo представляет собой схему по умолчанию для вновь созданной базы данных. Владельцем схемы dbo является учетная запись пользователя dbo. Схемой по умолчанию для пользователей, созданных с помощью команды Transact-SQL CREATE USER, является dbo.

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

Bb669061.alert_note(ru-ru,VS.90).gifПримечание.

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

Внешние ресурсы

Дополнительные сведения о принадлежности объектов и схемах см. в следующих документах.

Ресурс

Описание

Отделение пользователей от схем в электронной документации по SQL Server 2008

Описывает изменения, возникшие из-за отделения пользователей от схем. Сюда входит новое поведение, его влияние на владение, представления каталогов и разрешения.

Отделение пользователей от схем в электронной документации по SQL Server 2005

Описывает изменения, возникшие из-за отделения пользователей от схем. Сюда входит новое поведение, его влияние на владение, представления каталогов и разрешения.

Использование цепочек владения в электронной документации по SQL Server 2000

Описывает способы наследования пользователями разрешений от владельцев объекта.

См. также

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

Сценарии защиты приложений в SQL Server (ADO.NET)

Проверка подлинности в SQL Server (ADO.NET)

Серверные роли и роли базы данных в SQL Server (ADO.NET)

Авторизация и разрешения в SQL Server (ADO.NET)

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

Защита приложений ADO.NET