![]() |
|
![]() ![]() ![]() |
|
santilaas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 322 Регистрация: 28.8.2005 Где: Блага Репутация: нет Всего: нет |
Привет всем! Это снова я.
Вопрос такой: хочу реализовать логирование операций по работе с моей БД (написана с исп-ем Firebird1.5.1), притом хочу хранить все сведения, начиная от попыток подключения к БД до изменения любого поля. При этом хочу для LOG-а создать отдельный файл БД (Log.fdb) - вопрос - насколько это рационально - стоит или нет такое делать (т.е. создавать 2 БД)??? Желательно услышать мнение профессионалов или по крайней мере тех, у кого логирование работает и не тормозит работу всей БД. Может кто предложит свой вариант - и, если можно, поподробнее. -------------------- [ |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Я всё делаю в одной БД.
И не средствами триггеров. Делаю всё в клиентском приложении. Т.к. триггеры не могут зафиксировать доступ, например к форме репликации или доступ к форме настроек программы. Мало того, у меня фсе пользователи работают "для сервера" под одним именем. Опять же, потому что сервер не может контролировать доступ к форме справочников или к форме настроек. Поэтому у меня отдельная своя таблица пользователей, отдельная своя таблица групп и прав доступа. |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
все хорошо, а приходит такой горе пользователь коннектится тем же IBExpert к твоей БД и сносит половину данных и ты потом будешь долго доказывать, что ты не верблюд... Изменение данных в таблицах должно протоколироваться самим сервером и ни как иначе. -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
если у такого горе-пользователя есть доступ к БД, я имею ввиду пароль SYSDBA, то это проблемы админа БД, я предупредил своих.
Alex, где-то я с тобой согласен, но я видел уже в нескольких программах такой подход, как у меня, и даже в достаточно серьезных программах! Везде есть свои плюсы и минусы! Это сообщение отредактировал(а) Akella - 22.1.2007, 16:16 |
|||
|
||||
santilaas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 322 Регистрация: 28.8.2005 Где: Блага Репутация: нет Всего: нет |
Alex, эту классную статейку я уже читал, просто думал спросить, как это реализуют другие люди. А вообще, так как мне нужен вариант, где журналируются все изменения, я сделал "Логирование в базе данных с сохранением информации", - кстати, сразу вопрос - сильно ли это "ударит" по размеру моей БД или нет (при 15 таблицах)??? И потом в любом случае придется еще дополнительно вести лог (текстовый файл- внешнюю таблицу) операций, не связанных с непосредственной вставкой, изменением или удалением данных. - получается так? -------------------- [ |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Лично у меня программа все, что касается непосредственной работы с БД пишет в саму БД точнее пишет сервер, плюс к этому каждая копия программы ведет отдельно лог файл своей работы (этапы запуска, попытки соединения с базой, разрывы соединения с базой, открытие форм, регистрация всех ошибок, которые появляются за время работы программы и т.д.)
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
santilaas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 322 Регистрация: 28.8.2005 Где: Блага Репутация: нет Всего: нет |
этот файл - текстовый? -------------------- [ |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
разумеется, т.к. в него должна попасть даже информация, о не возможности подключения к серверу БД. Вот как примерно он выглядит:
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
цитата из Firebird Release Notes 2.0
Добавлено @ 15:38 обрати внимание на
|
||||
|
|||||
santilaas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 322 Регистрация: 28.8.2005 Где: Блага Репутация: нет Всего: нет |
Alex, Akella, спасибо Вам за советы и примеры - все, что касается БД буду делать в самой базе (с исп-ем IBExpert-а), а что касается программы - буду писать в текстовый файл
-------------------- [ |
|||
|
||||
Akella |
|
||||||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
1. Вначале создаем две функции для чтения и записи контекстных переменных
2. Создаем 2 хранимки, для сохранения и чтения соответственно
Т.К. у нас USER_SESSION (контекст сессии), то при отключении от базы переменная самоуничтожится. Далее. При подключении юзера к базе: вызываем окно авторизации, где узнаем, какой пользователь залогинился и сразу вызываем из приложения хранимку execute procedure sp_set_global_var('USER_ID', :ID_USER); Добавлено @ 13:19 создаем таблицу журнал
|
||||||||||
|
|||||||||||
Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
теперь делаем такой триггер для каждой таблицы
Добавлено @ 14:17 если бы в контексте триггера ещё можно было бы узнать имя таблицы.... Добавлено @ 14:30 А МОЖНО НЕМНОГО ПО ДРУГОМУ РЕАЛИЗОВАТЬ. Создаем хранимую процедуру:
создаем триггер
Это сообщение отредактировал(а) Akella - 5.2.2007, 15:27 |
||||||
|
|||||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
я пишу для FB 2.0
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |