Главная » Microsoft SQL Server, Базы данных » Защита представлений

0

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

Защита данных

Параметр WITH CHECK OPTION заставляет предложение WHERE представления проверять вставляемые, извлекаемые или обновляемые данные. В этом смысле он вставляет в предложение WHERE двустороннее ограничение.

Этот параметр может оказаться полезным, когда представление должно ограничить вставки. Чтобы понять смысл использования параметра WITH CHECK OPTION, вначале важно уяснить, как функционируют представления при использовании этого параметра. Следующее представление генерирует список туров для базового лагеря Cape Hatteras:

ALTER VIEW dbo.vCapeHatterasTour AS

SELECT TourName, BaseCampID FROM dbo.Tour WHERE BaseCampID = 2 SELECT * FROM dbo.vCapeHatterasTour

Результат будет следующий:

TourName                          BaseCampID

Outer Banks Lighthouses     2

Если базовый лагерь Ashville добавит тур Blue Ride Parkway Hike и вставит его в представление без параметра CHECK OPTION, вставка будет разрешена:

INSERT dbo.vCapeHatterasTour (TourName, BaseCampID)

VALUES (‘Blue Ridge Parkway Hike1, 1)

(1 row(s) affected)

Инструкция INSERT сработает, новая строка появится в базе данных, но она не будет видимой в представлении, поскольку предложение WHERE представления фильтрует строки. Этот феномен известен как исчезающие строки:

SELECT * FROM dbo.vCapeHatterasTour

TourName                          BaseCampID

Outer Banks Lighthouses     2

Если целью данного представления было предоставление пользователям в лагере Саре Hatteras доступа только к собственным турам, то это представление некорректно. Несмотря на то что эти пользователи могут видеть только собственные туры, они могут с таким же успехом изменять данные и других лагерей.

Параметр WITH CHECK OPTION позволит избежать такого казуса. Следующий сценарий выполнит те же действия, но при этом сделает невозможной вставку записей, относящихся к другим лагерям. Обратите внимание на то, что на этот раз мы используем параметр WITH CHECK OPTION:

DELETE dbo.vCapeHatterasTour

WHERE TourName = ‘Blue Ridge Parkway Hike’

ALTER VIEW dbo.vCapeHatterasTour AS

SELECT TourName, BaseCampID FROM dbo.Tour WHERE BaseCampID = 2 WITH CHECK OPTION

INSERT dbo.vCapeHatterasTour (TourName, BaseCampID)

VALUES (‘Blue Ridge Parkway Hike’, 1)

Server: Msg 550, Level 16, State 1, Line 1

The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from

the operation did not qualify under the CHECK OPTION constraint.

The statement has been terminated.

На этот раз инструкция INSERT не была выполнена, а сообщение об ошибке указывало на наличие в представлен™ параметра WITH CHECK OPTIONS, которое, собственно, позволило получить желаемый эффект.

Некоторые разработчики используют представления с параметром WITH CHECK OPTION как средство реализации системы безопасности на уровне строк. Такая методика называется горизонтально позиционированными представлениями. Как в продемонстрированном примере с базовыми лагерями, такие представления должны создаваться для каждого подразделения или отрасли, и они обеспечивают доступ пользователей только к относящимся к ним данным. Несмотря на то что этот метод помогает достичь нужного уровня безопасности, его обслуживание требует больших затрат.

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

В конструкторе представлений утилиты Management Studio параметр WITH CHECK OPTION можно увидеть на странице View Properties.

Три параметра защищают представления от изменения схемы и посторонних любопытных глаз. Эти параметры просто добавляются в инструкцию CREATE и применяются к представлению практически так же, как и WITH CHECK OPTION.

Изменения схемы

Код базы данных очень хрупкий и имеет тенденцию к разрушению при изменении структуры данных. Так как представления — это не что иное, как хранимые запросы SELECT, то изменения, внесенные в таблицы, к которым обращается инструкция, способны разрушить представление — даже в случае добавления новых столбцов.

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

CREATE TABLE Test (

[Name] NVARCHAR(50)

)

go

CREATE VIEW vTest WITH SCHEMABINDING AS

SELECT [Name] FROM dbo.Test Go

ALTER TABLE Test

ALTER COLUMN [Name] NVARCHAR(100)

Server: Msg 4922, Level 16, State 1, Line 1

ALTER TABLE ALTER COLUMN Name failed

because one or more objects access this column.

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

В конструкторе запросов утилиты Management Studio параметр WITH SCHEMABINDING может быть активизирован на странице View Properties.

Шифрование инструкции select представления

Параметр WITH ENCRYPTION — еще одно связанное средство защиты. Когда создаются представления или хранимые процедуры, их текст сохраняется в системной таблице SysComments. Таким образом, текст доступен для просмотра. Представление при этом может содержать предложение WHERE, которое желательно скрыть от посторонних глаз; могут существовать и другие причины шифрования кода. Параметр WITH ENCRYPTION шифрует код в таблице SysComments, таким образом, предохраняя его от чужих глаз.

В следующем примере текст представления проверяется в таблице SysComments, затем выполняется шифрование, после чего происходит повторная проверка кода. Как и ожидается, в конце концов инструкцию SELECT приложения прочитать больше невозможно:

SELECT Text FROM SysComments JOIN SysObjects

ON SysObjects.ID = SysComments.ID WHERE Name = ‘vTest’

Результатом выполнения инструкции является текст представления vTest:

Text

CREATE VIEW vTest WITH SCHEMABINDING AS

SELECT [Name] FROM dbo.Test

Следующая инструкция ALTER перестраивает представление путем шифрования:

ALTER VIEW vTest WITH ENCRYPTION AS

SELECT [Name] FROM dbo.Test

Будьте осторожны с использованием этого параметра. Как только код был зашифрован, анализатор запросов больше не сможет создать в нем исправления; вместо этого он сгенерирует сообщение:

/****** Encrypted object is not transferable, and script cannot be generated. ******/

К тому же учтите, что шифрование влияет на репликацию. Зашифрованное представление не может быть опубликовано.

Метаданные приложения

Пользовательское приложение или уровень доступа к данным в запросе к серверу наряду с данными может запросить информацию о схеме, называемую метаданными. Обычно SQL Server возвращает информацию о соответствующих таблицах, однако параметр VIEW_ METADATA указывает серверу возвращать информацию о схеме представлений, а не таблиц, к которым оно обращается. Это оградит слишком любопытных от изучения схемы таблиц, что особенно полезно, когда целью создания представления являлось сокрытие столбцов с конфиденциальной информацией.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии