Программирование >>  Понятие sql 

1 ... 60 61 62 [ 63 ] 64 65 66 ... 95


жете иметь их и в представлениях, которые создали, даже если сами эти представления - модифицируемые. Так как внешние ключи не используются в представлениях, привилегия REFERENCES никогда не используется при создании представлений. Все эти ограничения - определяются ANSI. Нестандартные привилегии системы (обсуждаемые позже в этой главе) также могут быть включены. В последующих разделах мы предположим, что создатели представлений которые мы обсуждаем, имеют частные или соответствующие привилегии во всех базовых таблицах.

ОГРАНИЧЕНИЕ ПРИВИЛЕГИИ SELECT ДЛЯ

ОПРЕДЕЛЕННЫХ СТОЛБЦОВ

Предположим, вы хотите дать пользователю Claire способность видеть только столбцы snum и sname таблицы Продавцов. Вы можете сделать это, поместив имена этих столбцов в представление

CREATE VIEW Clairesview AS SELECT snum, sname FROM Salespeople;

и предоставив Claire привилегию SELECT в представлении, аневсамойтаблице Продавцов:

GRANT SELECT On Clairesview to Claire;

Вы можете создать привилегии специально для столбцов наподобии использования других привилегий, но, для команды INSERT, это будет означать вставку значений по умолчанию, а для команды DELETE, ограничение столбца не будет иметь значения. Привелегии REFERENCES и UPDATE, конечно, могут сделать столбцы специфическими не прибегая к представлению.

ОГРАНИЧЕНИЕ ПРИВЕЛЕГИЙ ДЛЯ ОПРЕДЕЛЕННЫХ

СТРОК

Обычно, более полезный способ чтобы фильтровать привилегии с представлениями - это использовать представление чтобы привилегия относилась только к определенным строкам. Вы делаете это, естественно, используя предикат в представлении который определит, какие строки являются включенными. Чтобы предоставить пользователю Adrian, привилегию UPDATE в таблице Заказчиков, для всех заказчиков размещенных в Лондоне, вы можете создать такое представление:

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;

ИСПОЛЬЗОВАНИЕ ПРЕДСТАВЛЕНИЙ В КАЧЕСТВЕ АЛЬТЕРНАТИВЫ К ОГРАНИЧЕНИЯМ

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

CREATE VIEW Curcities AS SELECT *

FROM Salespeople

WHERE city IN (London, Rome, San Jose, Berlin)

WITH CHECK OPTION;

Теперь, вместо того, чтобы предоставить пользователям привилегии модифицирования в таблице Продавцов, вы можете предоставить их в представлении Curcities. Преимущество такого подхода - втом, что если вам нужно сделать изменение, вы можете удалить это представление, создать новое, и предоставить в этом новом представлении привилегии пользователям, что проще, чем изменять ограничения. Недостатком является то, что владелец таблицы Продавцов также должен использовать это представление, если он не хочет, чтобы его собственные команды были отклонены.

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



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

CREATE VIEW Othercities AS SELECT *

FROM Salespeople

WHERE city NOT IN ( London , Rome , San Jose , Berlin ) WITH CHECK OPTION;

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

ДРУГИЕ ТИПЫ ПРИВИЛЕГИЙ

Вы разумеется хотите знать, кто же имеет право первым создать таблицу. Эта область привилегии не относится к ANSI, но не может игнорироваться. Все стандартные привилегии ANSI вытекают из этой привилегии; привилегии создателей таблиц которые могут передавать привилегии объекта. Если все ваши пользователи будут создавать в системе базовые таблицы с разными размерами это приведет к избыточности в них и к неэффетивности системы. Притягивают к себе и другие вопросы:

- Кто имеет право изменять, удалять, или ограничивать таблицы?

- Должны ли права создания базовых таблиц отличаться от прав создания представлений?

- Должен ли быть суперпользователь - пользователь который отвечает за поддержание базы данных и следовательно имеющий наибольшие, или все привилегии, которые не предоставляются индивидуально?

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

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

Кроме того, в системе любого размера всегда имеются некоторые типы суперпользователей - пользователей, которые автоматически имеют большинство или все привилегии,-и которые могут передать свой статус суперпользователя кому-нибудь с помощью привилегии или группы привилегий. Администратор Базы Данных, или DBA, является термином, наиболее часто используемым для такого суперпользователя и для привилегий, которыми он обладает.

ТИПИЧНЫЕ ПРИВИЛЕГИИ СИСТЕМА!

При общем подходе имеется три базовых привилегии системы:



1 ... 60 61 62 [ 63 ] 64 65 66 ... 95

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика