![]() |
Модераторы: Akella |
![]() ![]() ![]() |
|
Akella |
|
||||||||||||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
1. Вначале создаем функцию для чтения контекстных переменных
теперь для записи контекстных переменных
2. создаем саму таблицу журнала
3. Создаем процедуру для чтения глобальной переменной
для записи глобальной переменной
4. Создаем процедуру, которая будет записывать события в таблицу журнала
5. Создаем для КАЖДОЙ таблицы нашей базы данных триггеры такого вида
6. В приложении на форме ввода логина и пароля узнаем id пользователя и записываем USER_ID в контекстную переменную см. строку dm.fibDB.Execute('execute procedure sp_set_global_var(''USER_ID'','+IntToStr(UserData.UserID)+')');
Вот теперь даже если с помощью др. средства манипулировать данными в базе (как то IBExpert), и если UID не запишется, то client_ip точно запишеться. Если в поле client_ip будет запись в виде целого числа (например, 2864), то данными манипулировали по протоколу не IPv4, а по протоколу XNET. Это сообщение отредактировал(а) Akella - 5.2.2007, 17:15 |
||||||||||||||||
|
|||||||||||||||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
С одной стороны так делать не очень хорошо. В идеале нужно работать с системными учётными записями. Но в моем случае у меня в базе своя таблица пользователей, своя таблица групп пользователей и своя таблица прав доступа.
|
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Потом добавляем вьюху
Добавлено @ 12:50 В приложении бросам на форму TQuery, там пишем запрос
В итоге такая картина ![]() |
||||
|
|||||
LostAlly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.2.2007 Репутация: нет Всего: нет |
Добрый день.
Хорошая тема, у меня сейчас стоит примерно такая же задача. Точнее такая же потребность создавать свои таблицы пользователей групп и прав. Тупиком для меня стала задача - где хранить пользователя и пароль для подключения к БД? В принципе у меня была идея использовать пользователей БД но привязывать их к группам и правам в созданных мной таблицах. Но тогда возникает неприятная ситуация - пользователь может напрямую подключиться к БД, а этого я не хочу. Ваш вариант мне полностью подходит, как вы подключаетесь к БД? |
|||
|
||||
Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
здесь 2 варианта 1. По идее правильный, но не всегда возможный - это системные пользователи FireBird, т.е. использовать встроенную безопасность FireBird. Использовать Права и Роли FireBird. 2. Создать в своей БД таблицу USERS, с нужными тебе полями. Например:
Все пользователи работают физически под одним пользователем. Создаешь, кроме SYSDBA ещё одного. Чтобы никто не работал под SYSDBA. Теперь выполняешь подключение к БД. На форме ввода логина и пароля есть 2 основных элемента. Из выпадающего списка выбирается пользователь. Далее вводится пароль. Ты делаешь запрос к своей таблице USERS типа
В своей же таблице ты можешь творить всё, что угодно. Я, например, собираюсь переделать таблицу таким образом, чтобы можно было строить список пользователей и групп в виде дерева (иерархическая структура), как в винде. Это сообщение отредактировал(а) Akella - 9.2.2007, 10:07 |
||||||
|
|||||||
Romkin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 14.11.2006 Где: Москва Репутация: 1 Всего: 5 |
Здесь тоже пользователь может подключиться напрямую к БД, все через SYSDBA ходят.
Или уже нет? ![]() Это сообщение отредактировал(а) Romkin - 9.2.2007, 10:05 |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Romkin, я не пойму, чё ты пристал с этим одним пользователем...?? Моя база - что хочу, то и делаю, за то - больше возможностей.
|
|||
|
||||
Romkin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 14.11.2006 Где: Москва Репутация: 1 Всего: 5 |
Не с одним, а именно с SYSDBA. С одним, у которого минимальные права, я считаю что нормально. Сам, каюсь, грешен иногда, через SYSDBA доступ идет. Стараюсь закрывать, но за всем не уследишь
![]() Добавлено @ 10:19 Кстати, я вижу, что здесь у тебя при обновлении записывается старое значение ключа и новое. У тебя во всех таблицах при обновлении записи она добавляется что-ли? |
|||
|
||||
LostAlly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.2.2007 Репутация: нет Всего: нет |
Это все понятно, не понятно одно, где в программе хранить пользователя БД которому разрешено цеплятся к базе. Ведь чтобы сделать селект пользователей из своей таблицы к базе нужно перед этим подключиться.
И еще при подключении к базе в каком виде передается пароль базы данных. 2Romkin Не обязательно это должен быть пользователь SYSDBA, можно создать другого с нужным набором прав. |
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Нет, не ключа! Зачем? Допустим есть таблица-справочник: ID, NAME, EXP Пользователь сделал изменение записи. Вот при обновлении и видно какое значение поля NAME было, а какое стало. (В данном случае поле NAME - основное) Очень удобно. Конечно, если в таблице 50 полей, то все сохранять - это большая рутина и огромная база. Но если нужно хранить все изменения... то можно сделать дочернюю таблицу, где хранить изменения каждого поля. ID, ID_MASTER, FIELD_NAME, NEW_DATA, OLD_DATA. Добавлено @ 12:53
Это сам решай, можешь шифровать. |
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
С помощью утилиты gsec создай в БД пользователя и работай под ним и подключайся к базе в клиентском приложении под ним. Смотри, коннектишься к базе под системным пользователем, загружаешь в выпадающий список формы-логина из СВОЕЙ таблицы пользователей все имена. Кроме имён пока тебе ничего не нужно. Загрузил и жди пока юзер введет пароль и нажмет ОК. Нажал ОК? проверяй пароль выбранного пользователя. делай запрос вида
если в поле значение "0", то знач пароль неверный. Добавлено @ 13:08 В твоей таблице USERS поле USER_NAME должно иметь только уникальные записи. |
|||
|
||||
LostAlly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.2.2007 Репутация: нет Всего: нет |
Да это все и так понятно, просто боюсь хранить пароль к БД в программе.
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
храни в базе в зашифрованном виде, шифруй без обратимого шифрования, или какой пароль?
|
|||
|
||||
LostAlly |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.2.2007 Репутация: нет Всего: нет |
Пароль для обращения к БД. Допустим путь это будет тот же самый SYSDBA.
Ведь чтобы добраться до самих пользователей(которые в моей таблице хранятся) мне нужно сначала подрубиться к БД. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
храни в программе, а что такого? Если тебе нужна безопасность, то тебе лучше использовать системных пользователей
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Interbase" | |
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |