Отделение пользователей от схем
Изменения: 12 декабря 2006 г.
Начиная с SQL Server 2005, каждый объект принадлежит к схеме базы данных. Схема базы данных — это отдельное пространство имен, существующее независимо от пользователя базы данных. Можно рассматривать схему как контейнер объектов. Схемы можно создавать и изменять в базе данных; пользователям может быть предоставлен доступ к схеме. Схема может принадлежать любому пользователю, и право владения схемой можно передавать.
Примечание. |
---|
Схемы базы данных отличны от 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 |
|
Syslogins |
Схемы по умолчанию
Чтобы разрешить неполные имена защищаемых объектов, в SQL Server 2000 использовалось разрешение имен для проверки схемы, принадлежащей вызывающему пользователю базы данных, и схемы, принадлежащей dbo.
В SQL Server 2005 каждому пользователю может быть назначена схема по умолчанию. Схему по умолчанию можно задать с помощью параметра DEFAULT_SCHEMA инструкций CREATE USER и ALTER USER. Если параметр DEFAULT_SCHEMA не определен, SQL Server 2005 рассматривает схему dbo как схему по умолчанию.
Примечание. |
---|
Пользователи, соединяющиеся с помощью группы прошедших проверку подлинности 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
Внимание! |
---|
Необходимо использовать новые представления каталога в базе данных, где была выполнена любая из следующих инструкций 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.
Сведения о... | Разделы |
---|---|
Общие метаданные схемы |
|
Представления информационной схемы |
|
Определения столбцов, возвращаемые представлением INFORMATION_SCHEMA.SCHEMATA |
Примеры
А. Создание схемы и назначение пользователя владельцем
В следующем примере в базу данных 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 г. |
|