Рис. 2.3. Пример созданных форм в Access для ввода данных в таблицы Oracle
Для контроля ввода значений в отдельные столбцы таблиц можно ис- пользовать специальные объекты Domain и Sequence.
Создание и использование последовательностей
Последовательность (SEQUENCE) – это объект, обеспечивающий ге- нерацию уникальных последовательностей в условиях многопользователь- ского асинхиронного режима доступа.
Пример создания последовательности:
CREATE SEQUENCE "ADMIN_BOOKS"."ID_AUTHOR_SEQ" INCREMENT BY 1 START WITH 1 MAXVALUE 99999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;
Для обращения к значениям последовательности используют следую- щие операторы:
sequence_name.CURRVAL sequence_name.NEXTVAL
Пример использования последовательности:
INSERT INTO "ADMIN_BOOKS"."AUTHORS" ("CODE_AUTHOR",
"NAME_AUTHOR", "BIRTHDAY") VALUES (ADMIN_BOOKS.ID_AUTHOR_SEQ.NextVal, 'Лермонтов', TO_DATE('12-
05-1810') );
Варианты заданий к лабораторной работе №2
В утилите SQL *Plus Worksheet по вашим вариантам баз данных, ко- торые были реализованы в лабораторной работе №1, создать для полей ти- па Primary Key последовательности c помощью оператора CREATE
SEQUENCE.
В утилите SQL *Plus Worksheet создать файл, в котором написать по- следовательность операторов Insert для заполнения таблиц данными (по 10 операторов на каждую из таблиц).
Сохранить все операторы CREATE SEQUENCE и INSERT в файле программы с названием ФамилияСтудента_ЛАб_2_№варианта.
25
Лабораторная работа №3
УПРАВЛЕНИЕ ПРАВАМИ ДОСТУПА И РАЗРЕШЕНИЯМИ К СОЗДАВАЕМЫМ ОБЪЕКТАМ БД В ORACLE 9i
Цель работы – научиться создавать профили пользователей и ролей для разграничения прав доступа к объектам создаваемой БД, а также извлекать системную информацию о пользоватях и объектах для последующего ис- пользования в удаленном управлении правми доступа к объектам экземп- ляра БД.
Содержание работы:
1.Познакомиться с назначением системных таблиц и представлений, выполнить примеры.
2.С помощью операторов и действий, описанных в лабораторной ра- боте, создать роли и пользователей.
3.Выполнить самостоятельное задание к лабораторной работе по вари- антам.
Пояснения к выполнению работы
Инсталляция сервера заканчивается созданием начального экземпляра БД и набором встроенных ролей и пользователей, из всех пользователей незаблокированными являются SYSTEM (manager) и SYS (change_in_install), которые могут выполнять административные функции.
Для анализа ролей, системных привилегий и привилегий по доступу к объектам экземпляра БД, которыми наделены пользователи, необходимо зайти в утилите Enterprise Manager Console в раздел Security – Users и
дважды щелкнуть по имени пользователя.
Для обеспечения безопасности работы экземпляра БД необходимо по- сле инсталляции программного продукта проверить состав пользователей и их статус (в утилите Enterprise Manager Console в раздел Security – Users в правой части экрана колонка Account Status). Если необходимо заблокировать какого-либо пользователя, то выберите его двойным щелч- ком, в появившемся окне в разделе Status выбрать режим Locked.
В табличном пространстве SYSTEM в схеме SYS хранятся таблицы, из которых можно извлечь информацию о правах доступа к системе, а также о структуре объектов. Такая информация полезна для выполнения функ- ций администрирования удаленно или через внешнее приложение. В табл. 3.1 дан краткий список объектов, которые используются в данной работе.
26
|
|
Таблица 3.1 |
Описание системных таблиц и представлений |
||
|
|
|
Объект схемы SYS |
Тип |
Назначение |
|
объекта |
|
User$ |
Table |
Справочник пользователей, объявленных в эк- |
|
|
земпляре БД |
Sysauth$ |
Table |
Список назначенных привилегий пользователям |
System_privilege_map |
Table |
Справочник системных привилегий, которые |
|
|
могут быть использованы |
Table_privilege_map |
Table |
Справочник привилегий доступа к объектам, |
|
|
которые могут быть использованы |
Dba_role_privs |
View |
Представление привилегий созданных ролей, |
|
|
которые могут быть использованы |
Dba_sys_privs |
View |
Представление системных привилегий, которые |
|
|
могут быть использованы |
Sys.obj$ |
Table |
Справочник объектов, существующих в экземп- |
|
|
ляре БД |
ALL_ALL_TABLES |
View |
Представление c описанием всех таблиц, кото- |
|
|
рые могут быть использованы |
DBA_USERS |
View |
Представление со списком пользователей, кото- |
|
|
рые могут быть использованы |
Для просмотра информации о пользователе можно воспользоваться оператором:
SELECT username, user_id, password, account_status, default_tablespace, temporary_tablespace, profile
FROM dba_users
WHERE username = 'SYSTEM';
Следующий пример позволяет определить список привилегий на рабо- ту с объектами:
SELECT sysauth$.*, table_privilege_map.name, user$.name FROM sysauth$,table_privilege_map, user$
WHERE sysauth$.grantee#=user$.user# and table_privilege_map.privilege = sysauth$.privilege# and user$.name='ADMIN_BOOKS';
или, используя представление SYS.dba_sys_privs:
SELECT * FROM sys.dba_sys_privs WHERE grantee='ADMIN_BOOKS';
Следующий пример позволяет определить список системных привиле- гий введенного пользователя:
SELECT sysauth$.*, system_privilege_map.name, user$.name FROM sysauth$, system_privilege_map, user$
27
WHERE sysauth$.grantee#=user$.user# and system_privilege_map.privilege = sysauth$.privilege# and user$.name='ADMIN_BOOKS';
Следующий пример позволяет определить список присвоенных ролей введенного пользователя:
SELECT * FROM dba_role_privs WHERE grantee = 'ADMIN_BOOKS';
Результат: |
|
|
GRANTEE |
GRANTED_ROLE |
ADM DEF |
----------------------- |
------------------------------ |
--- --- |
ADMIN_BOOKS |
CONNECT |
YES YES |
ADMIN_BOOKS |
DBA |
YES YES |
ADMIN_BOOKS |
EXP_FULL_DATABASE |
YES YES |
Для определения списка таблиц, собственником которых является кон- кретный пользователь, необходимо выполнить следующий SQL запрос:
SELECT table_name FROM all_all_tables WHERE owner = 'ADMIN_BOOKS';
Результат: TABLE_NAME
------------------------------
AUTHORS
BOOKS DELIVERIES PUBLISHING_HOUSE PURCHASES
Для прямого получения информации о пользователе можно обратиться к системной таблице SYS.USER$, например:
SELECT * FROM sys.user$ WHERE name = 'ADMIN_BOOKS';
Например, необходимо определить список всех объектов пользователя, собственником которых он является, для этого:
Определим код пользователя (колонка USER# в таблице SYS.USER$): SELECT user#, name FROM sys.user$ WHERE name = 'ADMIN_BOOKS';
Результат: USER# NAME
---------- ------------------------------
67 ADMIN_BOOKS
Далее определим перечень объектов, собственником которых является пользователь:
SELECT OBJ#, NAME FROM SYS.OBJ$ WHERE OWNER# = 67;
где 67 – идентификатор пользователя ADMIN_BOOKS, определенный по предыдущему запросу.
28
Результат:
OBJ# |
NAME |
---------- |
------------------------------ |
32127 |
AUTHORS |
32135 |
BOOKS |
32177 |
BOOKS_ALL |
32162 |
CHECKNAME |
32157 |
COUNT_BOOKS |
32161 |
COUNT_BOOKS_ITOGO |
32159 |
COUNT_BOOKS_PAGES |
32160 |
COUNT_BOOKS_TITLE |
32166 |
COUNT_PURCHASES |
32129 |
DELIVERIES |
32128 |
ID_AUTHOR |
32136 |
ID_BOOK1 |
32147 |
ID_BOOK_SEQ |
32130 |
ID_DELIVERY |
32132 |
ID_PUBLISH |
32138 |
ID_PURCHASE |
32131 |
PUBLISHING_HOUSE |
32137 |
PURCHASES |
32165 |
UPDATE_PROC |
32167 |
UPDATE_PROC2 |
20 строк выбрано.
Можно просмотреть состав каждого объекта-таблицы, например таблицы AUTHORS, используя ее идентификационный номер, который определили в предыдущем запросе:
SELECT name, type# FROM sys.col$ WHERE obj# = '32127';
Результат: |
|
NAME |
TYPE# |
------------------------------ |
---------- |
CODE_AUTHOR |
2 |
NAME_AUTHOR |
96 |
BIRTHDAY |
12 |
SYS_C00004_07073100:07:39$ |
1 |
или, используя имя объекта:
SELECT c.name, c.type# FROM sys.col$ c INNER JOIN sys.obj$ o ON c.obj#= o.obj# WHERE o.name = 'AUTHORS';
Создание ролей
Для упрощения управления правами доступа в системе создаются ро- ли, которые затем можно назначать группе пользователей.
Создадим для нашего примера роли библиотекаря (LIBRAR) и читате-
ля (READER).
29