Формирование системы безопасности. Визуализация пользователей и объектов. Перевод в команды SQL, их последующая трансляция и сохранение в системном каталоге
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
пользователей (PUBLIC),
отнимаются также у всех пользователей (PUBLIC).
.Структуры данных и алгоритмы
При реализации использовались следующие основные структуры данных:
) table_c:integer - количество таблиц в базе данных;
2) table_n:array[1..50] of string - названия таблиц;
3) user_c:integer - количество пользователей;
) user_n:array[1..10] of string - имена пользователей;
) user_p:array[1..10] of string - пароли пользователей;
) num_user:integer - номер текущего пользователя.
Основной процедурой данной программы является процедура формирования sql-кода. Рассмотрим ее реализацию:
procedure TForm3.BitBtn1Click(Sender: TObject);
i,j:integer;
f:boolean;
f:=true;
for i:=1 to table_c do
begin
for j:=1 to 5 do
begin
if (Sg.Cells[i,j]='+') and (f=false) then
begin
Form4.Memo1.Lines.Add('grand '+Sg.Cells[0,j]+' on '+Sg.Cells[i,0]+' to '+user_n[num_user]);
Form4.Memo1.Lines.Add('');
end;
if (Sg.Cells[i,j]='+') and (f=true) then
begin
Form4.Memo1.Lines.Add('grand '+Sg.Cells[0,j]+' on '+Sg.Cells[i,0]+' to '+user_n[num_user]+' identified by '+user_p[num_user]);
Form4.Memo1.Lines.Add('');
f:=false;
end;
end;
end;
inc(num_user);
if num_user>user_c then begin Hide; Form4.show; end
else begin Hide; Show; end;;
В цикле для каждой таблицы, имеющейся в базе данных, просматриваются все возможные права доступа. Для тех, которые в StringGrid выделены знаком + необходимо создать sql-команды. В случаи, если пользователь встречается первый раз (это свойство отслеживается при помощи переменной flag), то его формируется полный вариант grand: 'grand '+Sg.Cells[0,j]+' on '+Sg.Cells[i,0]+' to '+user_n[num_user]+' identified by '+user_p[num_user]. В противном случаи, используем более короткий вариант: 'grand '+Sg.Cells[0,j]+' on '+Sg.Cells[i,0]+' to '+user_n[num_user].
3 Описание работы программы
Работа написанной программы состоит из четырех шагов.
На первом шаге пользователь должен указать названия таблиц, которые существуют в базе данных (Рисунок 1):
пользователь программа доступ
Рисунок 1 - Создание таблиц
На данном шаге осуществляется контроль корректности вводимых данных, их уникальность, и обязательность присутствия хотя бы одной таблицы.
На втором шаге создаются пользователи (Рисунок 2). Пользователю необходимо указать имя пользователя и пароль, которые будут использоваться для подключения к базе данных. На данном шаге также осуществляется контроль вводимых значений. Имя пользователя должно быть уникально и корректно. Необходимо создать хотя бы одного пользователя.
Рисунок 2 - Создание пользователей
На третьем шаге задаются права созданных пользователей. Для нашего примеры предоставляемых прав указаны на Рисунке 3 (для пользователя admin) и на Рисунке 4 (для пользователя user). Процесс реализован в виде таблицы, в которой ячейка c[i,j] (i-строка, j-столбец) содержит +, если пользователь обладает правом i на таблицу j или - - в противном случаи.
Рисунок 3 - Создание прав администратора
Рисунок 4 - Создание прав пользователя
Наконец, на последнем шаге пользователь программы получает SQL-код, для создания указанных пользователей с необходимыми правами. Данный код может быть использован в СУБД (например MySQL или InterBase).
Рисунок 5 - SQL-код
Заключение
В ходе написания курсовой работы было реализовано приложение, позволяющее формировать систему безопасности.
Список использованной литературы
1.Крёнке Д. Теория и практика построения баз данных. 8-е изд./ Д. Крёнке. - Спб.: Питер, 2003. - 800 с. - ISBN 5-94723-275-8
. П. Зегжда, Теория и практика. Обеспечение информационной безопасности. - Москва, 1996.
. Вьюкова Н.И., Галатенко В.А. Информационная безопасность систем управления базами данных 1996 - статья в электронном журнале.
. Громов В.И., Васильев Г.А "Энциклопедия компьютерной безопасности" (электронный сборник 1999 год)
Приложение А (обязательное) Листинг программы
unit Unit1;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
TForm1 = class(TForm)
ListBox1: TListBox;
Edit1: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Form1: TForm1;
table_c:integer;
table_n:array[1..50] of string;
user_c:integer;
user_n:array[1..10] of string;
user_p:array[1..10] of string;
num_user:integer;Unit2;
{$R *.dfm}TForm1.BitBtn2Click(Sender: TObject);
i:integer;
flag:boolean;
if Edit1.Text<>'' then
begin
flag:=true;
for i:=0 to ListBox1.Items.Count-1 do
if Edit1.Text=listbox1.Items[i] then flag:=false;
if flag=true then ListBox1.Items.Add(Edit1.Text)
else showmessage('Такая таблица уже есть');
end else showmessage('Не введено название таблицы');
Edit1.Text:='';;TForm1.BitBtn3Click(Sender: TObject);
i:integer;
id:integer;
id:=-1;
for i:=0 to ListBox1.Items.Count-1 do
if listBox1.Selected[i] then id:=i;
if id<>-1 then ListBox1.Items.Delete(id) else
showmessage('Нет выделенных элементов'); ;
procedure TForm1.BitBtn1Click(Sender: TObject);
i:integer;
if ListBox1.Items.Count>0 then
begin
table_c:=ListBox1.Items.Count;
for i:=1 to table_c do
table_n[i]:=ListBox1.Items[i-1];
Hide;
Form2.show;
end else
showmessage('Создайте хотя бы одну таблицу!');;.Unit2;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
TForm2 = class(TForm)
ListBox1: TListBox;
Edit1: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
ListBox2: TListBox;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
Form2: TForm2;Unit3, Unit1;
{$R *.dfm}TForm2.BitBtn2Click(Sender: TObject);
i:integer;
flag:boolean;
if (Edit1.Text'') then
begin
flag:=true;
for i:=0 to ListBox1.Items.Count-1 do
if Edit1.Text=listbox1.Items[i] then flag:=fal