296
Рис. 11.2 ERD диаграмма предметной области (English)
Для обеспечения возможности повторного выполнения скриптов удаляем объекты (если они существуют), команда создания которых приведена ниже:
Connect system/system@orcl DROP USER ch_cert CASCADE; DROP USER licns_mgr CASCADE; DROP USER certif_mgr CASCADE; DROP USER lic_clerc CASCADE; DROP ROLE licns_mgr_role; DROP ROLE lic_clerc_role;
DROP ROLE certif_mgr_role; DROP PUBLIC SYNONYM cclic; DROP PUBLIC SYNONYM certcntr; DROP PUBLIC SYNONYM certifct; DROP PUBLIC SYNONYM islicns;
DROP PUBLIC SYNONYM issubjects; DROP PUBLIC SYNONYM item; DROP PUBLIC SYNONYM liccenter; DROP PUBLIC SYNONYM manufctr;
DROP PUBLIC SYNONYM manufctr_audit; DROP PUBLIC SYNONYM manulic; DROP PUBLIC SYNONYM signlic;
DROP PUBLIC SYNONYM standart; DROP PUBLIC SYNONYM testlab; DROP PUBLIC SYNONYM tllic;
Создаем пользователя – администратора приложения:
Connect system/system@orcl
CREATE USER ch_CERT IDENTIFIED BY ch_cert DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp QUOTA 1m on users;
GRANT connect, resource TO ch_cert; GRANT create user,alter user TO ch_cert;
Наделяем администратора приложения группой привилегий:
GRANT connect, resource TO ch_cert; GRANT create user,alter user TO ch_cert;
297
Соединяемся с базой данных администратором приложения: connect ch_cert/ch_cert@orcl
Создание базы данных сертификации продукции. Поместим в папку c:\tmp скрипт test1a_new.sql (надо скопировать sql текст из приложения 6 и поместить его в текстовый файл с именем test1a_new.sql). В окне SQL*Plus вводим команду:
@c:\tmp\test1a_new.sql
База данных сертификации продукции создана и заполнена данными. Теперь пользователь CH_CERT, который является администратором (решающим, в числе прочих, и вопросы разграничения полномочий между другими пользователями), создает менеджера licns_mgr. Licns_mgr, который будет обладать всеми правами на таблицы ISLicns, LicCenter, ManuLic, ISSubjects, Manufctr (обве-
дены на диаграмме БД-English.doc линией синего цвета). Администратор приложения создает первого пользователя
своего приложения:
CREATE USER licns_mgr IDENTIFIED BY licns_mgr DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp QUOTA 1m on users;
АБД наделяет администратора приложения недостающими привилегиями:
connect system/system@orcl GRANT create role TO ch_cert;
Администратор приложения продолжает свою работу по созданию ролей и привилегий:
connect ch_cert/ch_cert@orcl
Создаем роль licns_mgr_role:
CREATE ROLE licns_mgr_role;
Даем этой роли привилегии на работы с пятью из 13 вышеназванных таблиц:
GRANT select,insert,update,delete ON issubjects TO licns_mgr_role; GRANT select,insert,update,delete ON manufctr TO licns_mgr_role; GRANT select,insert,update,delete ON islicns TO licns_mgr_role;
298
GRANT select,insert,update,delete ON manulic TO licns_mgr_role;
GRANT select,insert,update,delete ON liccenter TO licns_mgr_role;
Наделяем ролью licns_mgr_role пользователя licns_mgr:
GRANT licns_mgr_role TO licns_mgr;
Привилегия соединяться с базой данных пользователю LICNS_MGR еще не предоставлена.
АБД наделяет пользователя приложения привилегией, которую не может дать администратор приложения:
connect system/system@orcl GRANT create session TO licns_mgr;
Пользователь приложения соединяется с базой данных: connect licns_mgr/licns_mgr@orcl
SELECT table_name FROM user_tables;
Так как все таблицы создавались в схеме ch_cert , пользователь licns_mgr не может их увидеть без указания владельца.
SELECT * FROM issubjects; SELECT * FROM ch_cert.issubjects;
при таком запросе строки выведены --Обращаться к таблицам, набирая имя владельца - неудобно,
--поэтому владелец таблиц ch_cert создает на них public synonym:
Администратор приложения соединяется с базой данных для создания нужных объектов:
connect ch_cert/ch_cert@orcl CREATE PUBLIC SYNONYM standart FOR ch_cert.standart;
--команда эта не будет выполнена, так как --привилегия создавать public synonym пользователю --ch_cert не предоставлялась.
Администратор базы данных добавляет администратору приложения дополнительную привилегию:
connect system/system@orcl
GRANT create public synonym TO ch_cert;
299
Администратор приложения вновь соединяется с базой данных для создания нужных объектов:
connect ch_cert/ch_cert@orcl
--Создаются public synonym на все таблицы базы данных.
CREATE PUBLIC SYNONYM standart FOR ch_cert.standart; CREATE PUBLIC SYNONYM cclic FOR ch_cert.cclic; CREATE PUBLIC SYNONYM certcntr FOR ch_cert.certcntr; CREATE PUBLIC SYNONYM certifct FOR ch_cert.certifct; CREATE PUBLIC SYNONYM islicns FOR ch_cert.islicns; CREATE PUBLIC SYNONYM issubjects FOR ch_cert.issubjects; CREATE PUBLIC SYNONYM item FOR ch_cert.item;
CREATE PUBLIC SYNONYM liccenter FOR ch_cert.liccenter; CREATE PUBLIC SYNONYM manufctr FOR ch_cert.manufctr; CREATE PUBLIC SYNONYM manulic FOR ch_cert.manulic; CREATE PUBLIC SYNONYM signlic FOR ch_cert.signlic; CREATE PUBLIC SYNONYM testlab FOR ch_cert.testlab; CREATE PUBLIC SYNONYM tllic FOR ch_cert. tllic;
Пользователь базы данных соединяется с ней для проверки своих привилегий:
connect licns_mgr/licns_mgr@orcl
--Проверим работу синонимов:
SELECT * FROM manufctr;
--теперь не надо указывать имя владельца таблицы --предыдущий запрос вывел строки таблицы, а нижеследующий
запрос
--показывает, что таблиц в схеме «licns_mgr» нет
SELECT table_name FROM user_tables;
SELECT * FROM manulic;
--А вот с другими, помимо вышеназванных для licns_mgr пяти --таблиц, ему работать не разрешено:
SELECT * FROM certifct;
--пользователю licns_mgr не дано право работать
--с таблицей CERTIFCT
SELECT * FROM standart;
--пользователю licns_mgr не дано право работать
--с таблицей standart
--А с таблицей ISSUBJECTS пользователю licns_mgr
300