Лабораторная работа 3

ПОЛНОМОЧИЯ НА ИСПОЛЬЗОВАНИЕ СХЕМЫ БЫЗЫ ДАННЫХ. РАБОТА С ВНЕШНИМИ СХЕМАМИ БАЗЫ ДАННЫХ

Цель работы

Ознакомиться со средствами предоставления полномочий на использование схем и баз данных и таблиц и основами работы с внешними базами данных.

Содержание работы и методические указания к ее выполнению

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

Представление прав реализуется оператором Grant. Оператор Grant в форме

Grant usage on schema schema-name to {public/<список users>/Group group-name }

предоставляет права указанным категориям на доступ к объектам схемы schema-name базы данных.

Hазначение опций следующее:

public - пользователи группы public;

<список users>- перечень пользователей на уровене Unix, например, sb01, sb02 и т.д.

Group group-name - пользователи группы group-name;

Оператор Grant в форме

Grant {all/insert/delete/select/update}

on {имя_таблицы/view/synonym}

to {public/<список users>}

предоставляет права на уровне отдельной таблицы. Hазначение опций следующее:

insert, delete, select, update - права на выполнение указанной операции с таблицей;

insert, delete, select, update - права на выполнение всех операций

имя таблицы, view, synonym - идентификация таблицы, представлений, синонимов.

Отнятие прав реализуется оператором Revoke. Оператор Revoke в форме

Revoke usage on schema schema-name from {public/<список users>/Group group-name }

отбтрает права у указанной категории на доступ к объектам схемы schema-name базы данных.

Оператор Revoke в форме

Revoke {all/insert/delete/select/update}

on {имя_таблицы/view/synonym}

from {public/<список users>}

отнимает права на уровне отдельной таблицы.

Та схема, имя которой зафиксировано в окне редактора SQL программы phpPgAdmin (Schema search path) является текущей. Любая другая схема базы данных называется внешней. Для ссылки на таблицу во внешней схеме базы данных (при условии, что Вам даны такие полномочия владельцем) необходимо указать имя этой схемы базы данных как часть имени таблицы, например, schema.table, где schema - имя схемы базы данных, table - имя таблицы.

Возможна и более общая форма записи:

database.schema.table

где database - имя базы данных. Однако в качестве имени базы данных может выступать только текущая база данных (та, к которой осуществлен connect). СУБД PostgreSQL не поддерживает работу с внешними базами данных.

Замечание. Ряд СУБД (например, Informix, DB2) поддерживают работу с внешними базами данных, в том числе распределенными. Текущей базой данных является база данных, к которой осуществлен connect. Любая другая база данных называется внешней. Для ссылки на таблицу во внешней базе данных необходимо указать имя этой базы данных как часть имени таблицы, например, salesdb:contracts, где salesdb - имя внешней базы данных, contracts - имя таблицы. К имени базы данных можно добавить имя сервера, т.е. сетевой машины, где запущен еще один сервер баз данных баз данных, и таким образом в случае распределенной базы данных обращение к таблице contracts базы данных salesdb, размещенной на сервере central, будет выглядеть следующим образом: salesdb@central:contracts.

Последовательность выполнения лабораторной работы:

1. Используя программу phpPgAdmin занести в таблицу поставщиков S строки с фамилиями членов бригады.

2. Занести произвольным образом в таблицу поставок SPJ несколько строк (3-5 строк) о поставках, связанных с занесенными фамилиями.

3. Выполнить два запроса к базе данных согласно номеру Вашего варианта. При выполнении запроса данные должны выбираться из таблиц Вашей собственной схемы базы данных.

4. Повторить задание п. 3 с той разницей, что сведения о номенклатуре деталей и изделий (таблицы P и J) должна браться из собственной схемы базы данных, а сведения о поставщиках и поставках (таблицы S и SPJ) должны браться из схемы базы данных соседней бригады. Предварительно необходимо узнать имя этой схемы базы данных. Убедитесь в невозможности выполнения задания.

5. Обеспечьте, чтобы владелец используемой Вами внешней схемы базы данных предоставил Вам полномочия на просмотр используемых Вами таблиц в его схеме базы данных, дав соответственно ему такие же полномочия для выполнения аналогичных действий.

6. Повторите задание п. 4. Сравните результаты с результатами, полученными в п. 3.

7. Сделайте попытку изменить информацию о поставщиках-владельцах схемы базы данных (город, рейтинг и т.д.) в таблице S внешней схемы базы данных. Убедитесь в невозможности выполнения задания.

8. Обеспечьте, чтобы владелец внешней используемой Вами схемы базы данных предоставил Вам полномочия на модификацию данных из используемых Вами таблиц в его схеме базы данных, дав соответственно ему такие же полномочия для выполнения аналогичных действий.

9. Повторите задание п. 7. Проверьте успешность выполнения действий.

10. Дождавшись, когда владелец внешней схемы базы данных закончит выполнение п. 9, сделайте попытку удалить из таблицы S используемой Вами внешней схемы базы данных поставщиков с именами, принадлежащими владельцам схемы базы данных, и связанные с ними поставки из таблицы SPJ. Убедитесь в невозможности выполнения задания.

11. Обеспечьте, чтобы владелец используемой Вами внешней схемы базы данных предоставил Вам полномочия на удаление из используемых Вами таблиц в его схеме базы данных, дав соответственно ему такие же полномочия для выполнения аналогичных действий.

12. Повторите задание п. 10. Проверьте успешность выполнения действий.

13. Отнимите предоставленные Вами права на пользование Вашей схемы базы данных.

Варианты заданий

Вариант 1.

1. Выдать список всех поставок, в которых количество деталей находится в диапазоне от 300 до 750 включительно.

2. Получить номера изделий, использующих по крайней мере одну деталь, поставляемую поставщиком S6.

Вариант 2.

1. Выдать цвета деталей, поставляемых поставщиком S6.

2. Получить номера и фамилии поставщиков, поставляющих деталь Р1 для какого-либо изделия в количестве, большем среднего объема поставок детали Р1 для этого изделия.

Вариант 3.

1. Выдать названия изделий, для которых поставляются детали поставщиком S6.

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

Вариант 4.

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

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

Вариант 5.

1. Выдать номера и фамилии поставщиков, поставляющих детали для какого-либо изделия с деталью P1 в количестве, большем, чем средний объем поставок детали P1 для этого изделия.

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

Вариант 6.

1. Выдать общее число изделий, для которых поставляет детали поставщик S6.

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

Вариант 7.

1. Выдать общее количество деталей P1, поставляемых поставщиком S6.

2. Получить номера и фамилии поставщиков, поставляющих по крайней мере одну деталь, поставляемую по крайней мере одним поставщиком, который поставляет по крайней мере одну красную деталь.

Контрольные вопросы

  1. Кто является владельцем базы данных?
  2. Кто является владельцем схемы базы данных?
  3. Какими правами обладают другие пользователи по отношению к Вашей схеме базы данных?
  4. Какими правами обладает администратор базы данных по отношению к Вашей базе данных?
  5. Каким образом предоставляются права на пользование схемой базы данных и отдельными ее таблицами?
  6. Каким образом изымаются права на пользование схемой базы данных и отдельными ее таблицами?
  7. Что такое внешняя база данных?
  8. Что такое внешняя схема базы данных?
  9. Как идентифицируется таблица внешней схемы базы данных?
  10. Как идентифицируется таблица внешней распределенной базы данных?