Захист уявлень

Уявлення створюються для управління доступом до даних Існує декілька параметрів захисту даних і додатків

Захист даних

Параметр WITH CHECK OPTION змушує пропозицію WHERE подання перевіряти вставляються, видобувні або оновлювані дані У цьому сенсі він вставляє в пропозицію WHERE двостороннє обмеження

Цей параметр може виявитися корисним, коли подання має обмежити вставки Щоб зрозуміти сенс використання параметра WITH CHECK OPTION, спочатку важливо усвідомити, як функціонують подання при використанні цього параметра Наступне уявлення генерує список турів для базового табору Cape Hatteras:

ALTER VIEW dbovCapeHatterasTour AS

SELECT TourName, BaseCampID FROM dboTour WHERE BaseCampID = 2 SELECT * FROM dbovCapeHatterasTour

Результат буде наступний:

TourName                          BaseCampID

Outer Banks Lighthouses     2

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

INSERT dbovCapeHatterasTour (TourName, BaseCampID)

VALUES (Blue Ridge Parkway Hike1, 1)

(1 row(s) affected)

Інструкція INSERT спрацює, новий рядок зявиться в базі даних, але вона не буде видимою в поданні, оскільки пропозиція WHERE подання фільтрує рядка Цей феномен відомий як зникаючі рядки:

SELECT * FROM dbovCapeHatterasTour

TourName                          BaseCampID

Outer Banks Lighthouses     2

Якщо метою даного подання було надання користувачам в таборі Сарі Hatteras доступу тільки до власних турам, то це подання некоректно Незважаючи на те що ці користувачі можуть бачити тільки власні тури, вони можуть з таким же успіхом змінювати дані та інших таборів

Параметр WITH CHECK OPTION дозволить уникнути такого казусу Наступний сценарій виконає ті ж дії, але при цьому унеможливить вставку записів, що відносяться до інших таборів Зверніть увагу на те, що на цей раз ми використовуємо параметр WITH CHECK OPTION:

DELETE dbovCapeHatterasTour

WHERE TourName = Blue Ridge Parkway Hike

ALTER VIEW dbovCapeHatterasTour AS

SELECT TourName, BaseCampID FROM dboTour WHERE BaseCampID = 2 WITH CHECK OPTION

INSERT dbovCapeHatterasTour (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 dboTest 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 SysObjectsID = SysCommentsID WHERE Name = vTest

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

Text

CREATE VIEW vTest WITH SCHEMABINDING AS

SELECT [Name] FROM dboTest

Наступна інструкція ALTER перебудовує подання шляхом шифрування:

ALTER VIEW vTest WITH ENCRYPTION AS

SELECT [Name] FROM dboTest

Будьте обережні з використанням цього параметра Як тільки код був зашифрований, аналізатор запитів більше не зможе створити в ньому виправлення замість цього він згенерує повідомлення:

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

До того ж врахуйте, що шифрування впливає на реплікацію Зашифроване подання не може бути опубліковано

Метадані додатки

Користувальницький додаток або рівень доступу до даних в запиті до сервера поряд з даними може запросити інформацію про схему, звану метаданими Зазвичай SQL Server повертає інформацію про відповідні таблицях, однак параметр VIEW_ METADATA вказує серверу повертати інформацію про схему уявлень, а не таблиць, до яких воно звертається Це убезпечить занадто цікавих від вивчення схеми таблиць, що особливо корисно, коли метою створення уявлення було приховування стовпців з конфіденційною інформацією

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*