- •Віртуальні таблиці (візії) Визначення візії
- •Перейменування атрибутів візії
- •Модифікація змісту візій
- •Тема 14. Обмеження та тригери в sql Активні елементи
- •Ключі відношень Види ключів і обмеження
- •Оголошення первинного ключа
- •Ключі та індекси
- •Оголошення зовнішнього ключа
- •Стратегії забезпечення посилальної цілісності
- •Обмеження рівня атрибутів та кортежів
- •Обмеження not null
- •Обмеження check рівня атрибуту
- •Обмеження check рівня кортежу
- •Модифікація обмежень
- •Тригери в sql Тригери як правила „подія-умова-дія”
- •Тригери instead of
- •Тригери у Transact sql
- •Безпека
- •Категорії збережених процедур Системні збережені процедури
- •Локальні збережені процедури
- •Тимчасові збережені процедури
- •Розширені збережені процедури
- •Основи програмування у Transact-sql
- •Блоки операторів
- •Умовне виконання
- •Використання збережених процедур Виклик збереженої процедури
- •Створення збереженої процедури
- •Безпека даних
- •1.2. Реєстрація користувачів
- •Керування правами доступу
- •Кому надаються права доступу
- •Умови надання прав доступу
- •1.3.3. Об’єкти, на які поширюються права доступу
- •Операції, щодо яких специфікуються права доступу
- •Можливість передавання прав доступу іншим особам
- •Специфікація повноважень
- •Обов’язкові методи захисту
- •Ведення журналів доступу
- •Обхід системи захисту
- •Використання представлень для фільтрації повноважень
- •Хто може створювати представлення?
Використання представлень для фільтрації повноважень
Вы можете сделать действия привилегий более точными, используя представления. Всякий раз, когда вы передаете привилегию в базовой таблице пользователю, она автоматически распространяется на все строки, а при использовании возможных исключений UPDATE и REFERENCES, на все столбцы таблицы. Создавая представление которое ссылается на основную таблицу и затем переносит привилегию на представление, а не на таблицу, вы можете ограничивать эти привилегии любыми выражениями в запросе содержащимся в представлении. Это значительно улучшает базисные возможности команды GRANT.
Хто може створювати представлення?
Чтобы создавать представление, вы должны иметь привилегию SELECT во всех таблицах на которые вы ссылаетесь в представлении. Если представление - модифицируемое, любая привилегия INSERT, UPDATE, и DELETE которые вы имеете в базовой таблице, будут автоматически передаваться представлению. Если вы испытываете недостаток в привилегиях на модификацию в базовых таблицах, вы не сможете иметь их и в представлениях которые создали, даже если сами эти представления - модифицируемые. Так как внешние ключи не используются в представлениях, привилегия REFERENCES никогда не используется при создании представлений.
Обмеження повноваження SELECT для певних стовпців
Предположим вы хотите дать пользователю Claire способность видеть только столбцы snum и sname таблицы Salespeople. Вы можете сделать это, поместив имена этих столбцов в представление
CREATE VIEW Clairesview
AS SELECT snum, sname
FROM Salespeople;
и предоставить Claire привилегию SELECT в представлении, а не в самой таблице Продавцов:
GRANT SELECT On Clairesview to Claire;
Вы можете создать привилегии специально для столбцов наподобие использования других привилегий, но, для команды INSERT, это будет означать вставку значений по умолчанию, а для команды DELETE, ограничение столбца не будет иметь значения. Привилегии REFERENCES и UPDATE, конечно, могут сделать столбцы специфическими не прибегая к представлению.
Обмеження повноважень для певних рядків
Обычно, более полезный способ чтобы фильтровать привилегии с представлениями - это использовать представление чтобы привилегия относилась только к определенным строкам. Вы делаете это, естественно, используя предикат в представлении который определит, какие строки являются включенными. Чтобы предоставить пользователю Adrian, привилегию UPDATE в таблице Customers, для всех заказчиков размещенных в Лондоне, вы можете создать такое представление:
CREATE VIEW Londoncust
AS SELECT *
FROM Customers
WHERE city = 'London'
WITH CHECK OPTION;
Затем Вы должны передать привилегию UPDATE в этой таблице для Adrian:
GRANT UPDATE ON Londoncust TO Adrian;
В этом отличие привилегии для определенных строк от привилегии UPDATE для определенных столбцов, которая распространена на все столбцы таблицы Заказчиков, но не на строки, среди которых строки со значением пол city иным чем London не будут учитываться. Предложение WITH CHECK OPTION предохраняет Adrian от замены значения пол city на любое значение кроме London.
Надання доступу тільки до вибраних даних
Друга возможность состоит в том, чтобы предлагать пользователям доступ к уже извлеченным данным, а не к фактическим значением в таблице. Агрегатные функции, могут быть весьма удобными в применении такого способа. Вы можете создавать представление которое дает счет, среднее, и общее количество для порядков на каждый день порядка:
CREATE VIEW Datetotals
AS SELECT odate, COUNT (*), SUM (amt), AVG (amt)
FROM Orders
GROUP BY odate;
Теперь вы передаете пользователю Diane - привилегию SELECT в представлении Datetotals:
GRANT SELECT ON Datetotals TO Diane;
