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