5. ОРГАНИЗАЦИЯ ДОСТУПА К ДАННЫМ

Задача. Создать пользователя - «клиента», имеющего доступ к данным таблиц базы данных только на чтение.

1) Создать пользователя с именем clientl, установив табличное пространство по умолчанию USERS и временное табличное пространство TEMP. Квоты на табличные пространства не устанавливать. Предоставить роль CONNECT.

• Соединиться с базой данных от имени пользователя system

SQL> connect system/manager

• Создать пользователя

CREATE USER client1  IDENTIFIED BY client1 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; GRANT connect TO client1;

2) Выдать привилегии на чтение данных из таблиц пользователя kadry2 пользователю clientl, используя следующий синтаксис команды GRANT.

GRANT object_privilege ON object_name

TO user   |   role   |   PUBLIC   [WITH GRANT OPTION];

GRANT SELECT ON люди TO client1; GRANT SELECT ON должности TO client1; GRANT SELECT ON отделы TO client1; GRANT SELECT ON сотрудники TO client1;

3) Получить всю информацию о привилегиях выданных пользователем/выданных пользователю через обращение к представлению

USER_TAB_PRIVS.

SQL> select *  from user_tab_privs;

4) Сравнить результаты запросов выполненных от пользователя-владельца объектов и от пользователя клиента.

SQL> SELECT *  FROM kadry1.отделы;

5) Для большей гибкости и удобства работы с данными, находящимися в схеме другого пользователя, создать PUBLIC-синонимы. После этого при обращении к объектам, находящимся в другой схеме, не будет требоваться указание имени этой схемы.

• Соединиться с базой данных от имени пользователя system

SQL> connect system/manager

• Предоставить пользователю kadry2 системную привилегию CREATE PUBLIC SYNONYM

GRANT CREATE PUBLIC SYNONYM TO kadry2;

• Соединиться с базой данных от имени пользователя kadry2

SQL> connect kadry2/kadry2

• Создать PUBLIC-синонимы, используя следующий синтаксис команды

CREATE PUBLIC SYNONYM synonym_name FOR  [schema.]   object_name ;

CREATE PUBLIC SYNONYM люди FOR люди;

CREATE PUBLIC SYNONYM отделы FOR отделы;

CREATE PUBLIC SYNONYM должности FOR должности;

CREATE PUBLIC SYNONYM сотрудники FOR сотрудники;

• Проверить правильность произведенных действий, выполнив тестовые запросы по обращению к таблицам пользователя kadry2 от пользователя clientl . Возможно выполнить следующие запросы от имени пользователя clientl :

SELECT * FROM отделы; SELECT COUNT(*) FROM люди;