
10. Лекція
ТЕМА: Уявлення
МЕТА: Дати поняття уявлень. Визначити роль уявлень в питаннях безпеки даних. Описати процес управління уявленнями: створення, зміна, вживання, видалення уявлень.
ПЛАН
1 Визначення уявлення
2 Оновлення даних в уявленнях
3 Переваги використаня уявлень
4 Недоліки використання уявлень
1 Визначення уявлення
Уявлення, або перегляди (VIEW), є тимчасовими, похідними (інакше - віртуальними) таблицями і є об'єктами бази даних, інформація в яких не зберігається постійно, як в базових таблицях, а формується динамічно при зверненні до них. Звичайні таблиці відносяться до базових, тобто таких, що містять дані і постійно знаходиться на пристрої зберігання інформації. Уявлення не може існувати саме по собі, а визначається тільки в рамках однієї або декількох таблиць. Вживання уявлень дозволяє розробнику бази даних забезпечити кожному користувачу або групі користувачів відповідні способи роботи з даними, що вирішує проблему простоти їх використовування і безпеки. Вміст уявлень вибирається з інших таблиць за допомогою виконання запиту, причому при зміні значень в таблицях дані в уявленні автоматично міняються.
Уявлення - це фактично той же запит, який виконується всякий раз при участі в якій-небудь команді. Результат виконання цього запиту в кожний момент часу стає змістом уявлення. У користувача створюється враження, що він працює із справжньою, реально існуючою таблицею.
У СУБД є дві можливості реалізації уявлень. Якщо його визначення просте, то система формує кожний запис уявлення в міру необхідності, поступово прочитуючи початкові дані з базових таблиць. У разі складного визначення СУБД доводиться спочатку виконати таку операцію, як матеріалізація уявлення, тобто зберегти інформацію, з якої складається уявлення, в тимчасовій таблиці. Потім система приступає до виконання призначеної для користувача команди і формування її результатів, після чого тимчасова таблиця віддаляється.
Уявлення - це виконаний запит, що зберігається в базі даних, який виглядає подібно звичайній таблиці і не вимагає для свого зберігання дискової пам'яті. Для зберігання уявлення використовується тільки оперативна пам'ять. На відміну від інших об'єктів бази даних уявлення не займає дискової пам'яті за винятком пам'яті, необхідної для зберігання визначення самого уявлення.
Створення і зміни уявлень в стандарті язика і реалізації в MS SQL Server співпадають і представлені наступною командою:
<визначення_уявлення> ::=
{ CREATE| ALTER} VIEW імя_уявлення
[(імя_столбца [,...n])] [WITH ENCRYPTION] AS SELECT_оператор [WITH CHECK OPTION]
Розглянемо призначення основних параметрів.
За умовчанням імена стовпців в уявленні відповідають іменам стовпців в початкових таблицях. Явна вказівка імені стовпця потрібна для обчислюваних стовпців або при об'єднанні декількох таблиць, що мають стовпці з однаковими іменами. Імена стовпців перераховуються через кому, відповідно до порядку їх проходження в уявленні.
Параметр WITH ENCRYPTION наказує серверу шифрувати SQL-код запиту, що гарантує неможливість його несанкціонованого перегляду і використовування. Якщо при визначенні уявлення необхідно приховати імена початкових таблиць і стовпців, а також алгоритм об'єднання даних, необхідно застосувати цей аргумент.
Параметр WITH CHECK OPTION наказує серверу виконувати перевірку змін, вироблюваних через уявлення, на відповідність критеріям, визначеним в операторі SELECT. Це означає, що не допускається виконання змін, які приведуть до зникнення рядка з уявлення. Таке трапляється, якщо для уявлення встановлений горизонтальний фільтр і зміна даних приводить до невідповідності рядка встановленим фільтрам. Використовування аргументу WITH CHECK OPTION гарантує, що зроблені зміни будуть відображені в уявленні. Якщо користувач намагається виконати зміни, що приводять до виключення рядка з уявлення, при заданому аргументі WITH CHECK OPTION сервер видасть повідомлення про помилку і всі зміни відхилюватимуть.
Приклад 10.1. Показати в уявленні клієнтів з Москви.
Створення уявлення:
CREATE VIEW view1 AS
SELECT КодКлієнта, Прізвище, МістоКлієнта
FROM Клієнт
WHERE МістоКлієнта='Москва'
Приклад 10.1. Представлення клієнтів з Москви.
Вибірка даних з уявлення:
SELECT * FROM view1
Звернення до уявлення здійснюється за допомогою оператора SELECT як до звичайної таблиці.
Уявлення можна використовувати в команді так само, як і будь-яку іншу таблицю. До уявлення можна будувати запит, модифікувати його (якщо воно відповідає певним вимогам), обєднувати з іншими таблицями. Зміст уявлення не фіксований і обновляється кожного разу, коли на нього посилаються в команді. Уявлення значно розширюють можливості управління даними. Зокрема, це прекрасний спосіб дозволити доступ до інформації в таблиці, приховавши частину даних.
Так, в прикладі 10.1 уявлення просто обмежує доступ користувача до даних таблиці Клієнт, дозволяючи бачити тільки частину значень.
Виконаємо команду:
INSERT INTO view1 VALUES (12,'Петров', 'Самара')
Це допустима команда в уявленні, і рядок буде доданий за допомогою представлення view1 в таблицю Клієнт. Проте, коли інформація буде додана, рядок зникне з уявлення, оскільки назва міста відмінна від Москви. Іноді такий підхід може стати проблемою, оскільки дані вже знаходяться в таблиці, але користувач їх не бачить і не в змозі виконати їх видалення або модифікацію. Для виключення подібних моментів служить WITH CHECK OPTION у визначенні уявлення. Фраза розміщується у визначенні уявлення, і всі команди модифікації піддаватимуться перевірці.
ALTER VIEW view1
SELECT КодКлієнта, Прізвище, МістоКлієнта
FROM Клієнт
WHERE МістоКлієнта='Москва'
WITH CHECK OPTION
Приклад 10.2. Створення уявлення з перевіркою команд модифікації.
Для такого уявлення вищезазначена вставка значень відхилюватиметься системою.
Таким чином, уявлення може змінюватися командами модифікації DML, але фактично модифікація впливає не на саме уявлення, а на базову таблицю.
Уявлення видаляється командою:
DROP VIEW імя_уявлення [,...n]