Материал: 2110

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

sql_text:='CREATE USER '|| TRIM(NAME_USER)||' PROFILE "DEFAULT" IDENTIFIED BY '||TRIM(PASSW)||' DEFAULT TABLESPACE '||TRIM(TABLE_SPACE)||' ACCOUNT UNLOCK';

EXECUTE IMMEDIATE sql_text;

sql_text:='GRANT ALTER SESSION TO '||TRIM(NAME_USER); EXECUTE IMMEDIATE sql_text;

sql_text:='GRANT CREATE SESSION TO '||TRIM(NAME_USER); EXECUTE IMMEDIATE sql_text;

Commit;

END;

Вданной процедуре использованы операторы Dynamic SQL.

ВDelphi 7:

1. В проекте из лабораторной работы №7 на форму DM добавим ком- понент ADOStoredProc (название по умолчанию будет ADOStoredProc1).

У компонента ADOStoredProc1 изменить свойства:

Connection на ADOConnection1;

ProcedureName на ADD_USER.

2. У компонента ADOStoredProc1 выбрать Parameters и создать 3 па-

раметра:

для name_user IN varchar2:

Name на name_user;

Datatype на ftString;

Direction на pdInput; Value–Type на OleStr;

для passw IN varchar2:

Name на passw;

Datatype на ftString;

Direction на pdInput; Value–Type на OleStr;

для table_space IN varchar2: Name на table_space;

Datatype на ftString;

Direction на pdInput; Value–Type на OleStr.

Добавить на основной форме (Form1) в меню пункт с названием Ад- министрирование. Создать форму FormAdmin, которая будет запускать- ся из пункта меню Администрирование основной формы.

3. В главной форме, в коде добавить описание формы FormAdmin, для этого после ключевого слова USES в конце списка через запятую до-

95

писать название программного модуля, которое соответствует созданной форме. В созданной форме в коде добавить описание модуля DM, для это- го после ключевого слова USES в конце списка поставить запятую и допи- сать название программного модуля, например UNIT2, который соответст- вует созданной форме DM.

4.На форме FormAdmin расположить три компонента Edit1, Edit2 и DBLookupComboBox1, один компонент Button. Рядом с компонентами ти- па Edit поставить элементы Label, в которых соответственно изменить свойства Caption на «Введите имя нового пользователя» и «Введите па- роль», «Выберите табличное пространство по умолчанию».

5.Для настройки компонента DBLookupComboBox1 на форму DM добавить компонент ADOQuery, переименовать компонент в ADOQuery_ts. У ADOQuery_ts изменить следующие свойства:

Connection на ADOConnection1;

SQL на

select name from sys.ts$

Таблица sys.ts$ содержит информацию о табличных пространствах

Oracle.

Для компонента ADOQuery_ts добавить на форму DM компонент DataSource и присвоить его свойствам следующие значения:

Name на DataSource_ts; DataSet на ADOQuery_ts.

У компонента DBLookupComboBox1 настроить свойства:

ListSource на DM.DataSource_ts;

ListField на NAME; KeyField на NAME.

6. В методе Click созданной кнопки написать:

try

DBLookupComboBox1.Refresh; dm.ADOStoredProc1.Parameters.ParamByName('name_user').Value:= Edit1.Text; dm.ADOStoredProc1.Parameters.ParamByName('passw').Value:= Edit2.Text; dm.ADOStoredProc1.Parameters.ParamByName('table_space').Value:= DBLookupComboBox1.Text;

DM.ADOStoredProc1.ExecProc; ShowMessage('Пользователь добавлен');

except

ShowMessage('Невозможно добавление пользователя');

end; // try

7. В пункте меню Администрирование перед оператором запуска формы FormAdmin добавить оператор, чтобы гарантировать для выпа- дающего списка работоспособность источника данных:

dm.ADOQuery_ts.Open;

96

8. Запустить приложение и проверить работу. Но для создания нового пользователя вы должны запустить приложение от пользователя, обла-

дающего привилегией CREATE USER, GRANT ANY PRIVILEGE.

В SQL *Plus Worksheet:

Создадим процедуру добавления новой привилегии пользователя в табличное пространство DB_Books в разделе Schema – Procedure – ADMIN_BOOKS через утилиту SQL *Plus Worksheet:

CREATE OR REPLACE PROCEDURE admin_books.add_privileg (name_user IN varchar2, privileg IN VARCHAR2, object IN VARCHAR2) IS

sql_text varchar2(200); BEGIN

sql_text:='GRANT '||TRIM(privileg)|| ' ON '||TRIM(object)|| ' TO '|| TRIM(NAME_USER);

EXECUTE IMMEDIATE sql_text; Commit;

END;

ВDelphi 7:

1.В проекте, который был создан в лабораторной работе №8, на фор- му DM добавим компонент ADOStoredProc (название по умолчанию будет

ADOStoredProc2).

У компонента ADOStoredProc2 изменить свойства:

Connection на ADOConnection1;

ProcedureName на ADD_PRIVILEG.

2. У компонента ADOStoredProc2 выбрать Parameters и создать 3 па-

раметра:

для name_user IN varchar2:

Name на name_user;

Datatype на ftString;

Direction на pdInput; Value–Type на OleStr;

для privileg IN varchar2:

Name на privileg;

Datatype на ftString;

Direction на pdInput; Value–Type на OleStr;

для object IN varchar2:

Name на object;

Datatype на ftString;

Direction на pdInput;

97

Value–Type на OleStr.

3.На форме FormAdmin расположить три компонента типа DBLookupComboBox, один компонент Button. Рядом с компонентами типа DBLookupComboBox поставить элементы Label, в которых соответственно изменить свойства Caption на «Выберите объект, на который добавляется привилегия», «Выберите пользователя» и «Выберите привилегию».

4.Для настройки компонентов DBLookupComboBox на форму DM добавить три компонента ADOTable и три DataSource, переименовать ком- поненты и изменить свойства соответственно:

для ADOTable1:

Name на ADO_all_all_tables; Connection на ADOConnection1; TableName на all_all_tables;

Filter на TABLESPACE_NAME='DB_BOOKS';

Filtered на True;

для DataSource1:

Name на DS_all_all_tables; DataSet на ADO_all_all_tables;

для ADOTable2:

Name на ADO_dba_users; Connection на ADOConnection1; TableName на DBA_users;

Filter на DEFAULT_TABLESPACE='DB_BOOKS';

Filtered на True;

для DataSource2:

Name на DS_dba_users; DataSet на ADO_dba_users;

для ADOTable3:

Name на ADO_Table_privilege_map; Connection на ADOConnection1; TableName на Table_privilege_map;

для DataSource3:

Name на DS_Table_privilege_map; DataSet на ADO_Table_privilege_map;

У компонента DBLookupComboBox2 настроить свойства:

ListSource на DS_all_all_tables; ListField на TABLE_NAME; KeyField на TABLE_NAME.

У компонента DBLookupComboBox3 настроить свойства:

ListSource на DS_dba_users;

98

ListField на USERNAME;

KeyField на USERNAME.

У компонента DBLookupComboBox4 настроить свойства:

ListSource на DS_Table_privilege_map;

ListField на NAME; KeyField на NAME.

5. В методе Click созданной кнопки написать:

try

DBLookupComboBox2.Refresh;

DBLookupComboBox3.Refresh;

DBLookupComboBox4.Refresh; dm.ADOStoredProc2.Parameters.ParamByName('object').Value:= DBLookupComboBox2.Text; dm.ADOStoredProc2.Parameters.ParamByName('name_user').Value:= DBLookupComboBox3.Text; dm.ADOStoredProc2.Parameters.ParamByName('privileg').Value:= DBLookupComboBox4.Text;

DM.ADOStoredProc2.ExecProc; ShowMessage('Пользователь добавлен');

except

ShowMessage('Невозможно добавление пользователя'); end; // try

6. В пункте меню Администрирование перед оператором запуска формы FormAdmin добавить оператор, чтобы гарантировать для выпа- дающих списков работоспособность источников данных:

dm.ADO_all_all_tables.Open; dm.ADO_DBA_USERS.Open;

dm.ADO_Table_privilege_map.Open;

7. Запустить приложение и проверить работу.

Задания к лабораторной работе №8

В вашей индивидуальной базе данных, которая была выдана по вари- антам (из лабораторной работы №1), создать 4 хранимые процедуры, кото- рые будут выполнять операции по добавлению пользователя, удалению пользователя, добавлению разрешения на одну из таблиц, удалению раз- решения на одну из таблиц. В клиентском приложении, которое было соз- дано в лабораторной работе №7 по вашему варианту, добавить на основ- ную форму в меню пункт Администрирование, который будет запускать форму Администрирование. На форме организовать запуск четырех соз- данных хранимых процедур с передачей данных в процедуры на сервере

99