Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Система безопасности Database Engine 2011.doc
Скачиваний:
11
Добавлен:
26.08.2019
Размер:
1.06 Mб
Скачать

Управление доступом к схемам

Схемы - это контейнеры объектов, которые позволяют группировать объекты базы данных.

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

<Server>.<Database>.<Schema>.<Object>

Схемы базы данных можно создавать при помощи инструкции CREATE SCHEMA.

Создавая схему, можно создать объекты базы данных и назначить разрешения в пределах одной транзакции, которая вызывается инструкцией CREATE SCHEMA.

Пример: создает схему с именем Accounting, назначает пользователя Peter владельцем схемы и создает таблицу с именем Invoices. Также предоставляется разрешение select роли базы данных public. Обратите внимание на двухкомпонентное имя, которое используется для обращения к таблице в текущей базе данных.

USE AdventureWorks;

GO

--Создаем схему Accounting с владельцем Peter.

CREATE SCHEMA Accounting

AUTHORIZATION Peter;

GO

--Создаем таблицу Invoices в схеме Accounting.

CREATE TABLE Accounting.Invoices (

InvoiceID int,

InvoiceDate smalldatetime,

ClientID int);

GO

--Предоставляем разрешение SELECT на новую таблицу роли public.

GRANT SELECT ON Accounting.Invoices

TO public; GO

--Добавляем строку данных в новую таблицу.

INSERT INTO Accounting.Invoices

VALUES (101,getdate(),102);

Информацию о схемах можно получить, выполнив запрос к представлению каталога sys.schemas:

SELECT * FROM sys.schemas;

Удалить схему можно при помощи инструкции DROP SCHEMA. В SQL Server 2005 не допускается удаление схемы, если в схеме есть объекты.

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

USE AdventureWorks;

GO

--Извлекаем информацию о схеме Accounting.

SELECT s.name AS ‘Schema’, o.name AS ‘Object’

FROM sys.schemas AS s INNER JOIN sys.objects AS o ON s.schema_id=o.schema_id WHERE s.name='Accounting';

GO

--Удаляем таблицу Invoices из схемы Accounting.

DROP TABLE Accounting.Invoices;

GO

--Удаляем схему Accounting.

DROP SCHEMA Accounting;

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

Пример демонстрирует, как создать схему и назначить ее в качестве схемы по умолчанию для пользователя.

--Создаем имя входа SQL Server в данном экземпляре SQL Server.

CREATE LOGIN Viktor

WITH PASSWORD='22061946'; GO

--Изменяем контекст соединения на базу данных AdventureWorks.

USE AdventureWorks;

GO

--Создаем пользователя Viktor в базе данных AdventureWorks и сопоставляем этого пользователя имени входа Viktor

CREATE USER Viktor

FOR LOGIN Viktor;

GO

--Создаем схему Marketing5

CREATE SCHEMA Marketing5

GO

--Создаем таблицу Campaigns в только что созданной схеме.

CREATE TABLE Marketing.Campaigns (

CampaignID int, CampaignDate smalldatetime, Description varchar (max)); GO

--Предоставляем разрешение SELECT пользователю Viktor на новую таблицу.

GRANT SELECT ON Marketing.Campaigns TO Viktor;

GO

--Объявляем схему Marketing схемой по умолчанию для пользователя Viktor

ALTER USER Viktor

WITH DEFAULT_SCHEMA=Marketing;

Если войти под именем Viktor в SQL Server и пытаться добавить запись, то выдается ошибка (пользователю Viktor предоставлено разрешение SELECT на таблицу Marketing.Campaigns).