Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Я хочу организовать следующее: при изменении какого-либо поля в какой-либо таблице в клиенте вызывается хранимая процедура, в которую передаются через параметры сведения о имени таблицы, над которой работают, название поля, предыдущее значение, которое передается двумя параметрами: тип и двоичное поле (для возможности хранить данные разных типов), ну и джругую полезную информацию. Целесообразен ли такой механизм или есть более функциональные методы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 15:02 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
AlexG или есть более функциональные методы? или есть - научитесь излагать свои мысли в терминах и определениях предметной области, которой посвящаете свои изыскания... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 15:08 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
YBWили есть Что есть-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 15:22 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
авторЧто есть-то? Есть более функциональные :)) Например на каждую таблицу, которую нужно мониторить, создать копию - но в отдельной базе например, или в этой же, но со спец. именем, чтобы случайно не грохнуть. Потом повесить триггеры, которые и будут отписывать все действия. Ну еще одну таблицу на все, в которой будет писаться, кто и что делал и ссылка на нее из таблицы-дубля, чтобы в каждой не плодить поля "юзер, дата, действие и т.д." Эх, надо сделать отдельным модулем да и выложить мой продукт по мониторингу изменений. Вдруг кому пригодится. В общем, время найду - сделаю и сайтец забабахаю. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:38 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:47 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Andres 1+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами. Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:51 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> В SQL возникнет туева хуча с трудом разгребаемых траблов. Например? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:57 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
дураг с инецеативой Andres 1+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами. Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов. А в чем сие траблы заключатся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:58 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
дураг с инецеативой Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов. Да. Что-то будет проще (например, выбрать данные "всё как было 13 числа" или "как часто Боря менял паспорта и фамилии"), что-то станет сложнее (почти всё остальное:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:58 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> что-то станет сложнее (почти всё остальное:) Что "все остальное"? Примеры - в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 17:05 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> http://www.dbpd.com/vault/9810snod.html Ну и где траблы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 17:36 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
В Informix для этого есть подсистема аудита. То, что вы предлагаете, возможно и будет работать, но ресурсов сожрет немало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 21:11 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
AlexG ну и джругую полезную информацию И кому эта информация будет интересна? А самое главное чем? Логировать кто последний залез в мою чашку с ногами и плюнул в нее? А толку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 23:35 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Laox AlexG ну и джругую полезную информацию И кому эта информация будет интересна? А самое главное чем? Логировать кто последний залез в мою чашку с ногами и плюнул в нее? А толку? Для банка нужно, видимо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 12:08 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
На триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя. В БАС сделали в рабочих таблицах поле DateUser, KodUser, в которые заносятся данные о последних корректировках. Этих данных почти достаточно для выяснения всех спорных систуаций. Но так же нет сведений об удалении. Обходимся путем сравнения с BackUp. Он все равно делается автоматически. Без таких копий все равно работать не прилично. Если уже возникает острая необходимость найти виноватого, то скорее всего шкода такая, что потребуется поднять архивы. Из них видно - что было и что стало. А кто - выясняется в рабочем порядке. А еще каждая хранимая процедура, вызываемая из клиентской машины, имеет параметр KodUser. Если важно то, что она делает, то может занести в журнал работы. На практике тотальная слежка сделана только в одном случае: на рабочем месте кассира по приему платежей от населения, что бы можно было обойтись без кассового аппарата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 19:45 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
PVPНа триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя.кхмм. не подскажете эту чудо-субд, в которой сыршенно невозможно выяснить текущего пользователя? (не важно, раздельна у вас идентификация в субд и в клиенте, или нет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 10:33 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Если валить в одно место логи на редактирование/удаление с разных таблиц, то это будет помойка, в которой черт ногу сломит. Ведь если появилась мысль о логгировании изменений, значит это кому то нужно. А следовательно на эту таблицу с логами надо навершивать интерфейсы для просмотра, всякие фильтры и и отчеты, причем такие, чтобы пользователи понимали об чем речь, собственно говоря. На мой взгляд универсализация в этом месте ни к чему хорошему не приведет. Для каждой таблицы нужно сначала ответить на вопросы: кто может делать edit/delete, кто смотрит логи по этим операциям, надо ли этому товарищу знать предыдущее значение при выполнении редактирования, надо ему ли знать данные удаленной записи. Практика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно". Полное логирование всех изменений требуется очень в ограниченных случаях и там лучше создать хистори для отдельной таблицы и сносить в нее запись целиком (или только некоторые поля) при выполнении определенных действий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 13:39 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
4321 PVPНа триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя.кхмм. не подскажете эту чудо-субд, в которой сыршенно невозможно выяснить текущего пользователя? (не важно, раздельна у вас идентификация в субд и в клиенте, или нет)Это чудо MS SQL 2000. Windows Authentication. Какая функция или глобальная переменная, доступные в триггере, дают информацию о userе, который удалил запись, находящуюся в deleted? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 15:25 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
LaoxДля каждой таблицы нужно сначала ответить на вопросы: кто может делать edit/delete, Это проблемы прав в системе, а не логирования автор кто смотрит логи по этим операциям, надо ли этому товарищу знать предыдущее значение при выполнении редактирования, надо ему ли знать данные удаленной записи. И это тоже. авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно". Вы по-русски уж, а то бред какой-то, особенно про удаление. авторПолное логирование всех изменений требуется очень в ограниченных случаях и там лучше создать хистори для отдельной таблицы и сносить в нее запись целиком (или только некоторые поля) при выполнении определенных действий. А вот это правильно. Так и надо делать. И я так и делаю. :) -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 16:22 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
PVPЭто чудо MS SQL 2000. Windows Authentication. Какая функция или глобальная переменная, доступные в триггере, дают информацию о userе, который удалил запись, находящуюся в deleted?мдя. Мои саболезнования. А что, кстати сказать, вернет SELECT CURRENT_USER в этом случае? (любопытно, простите, - давненько я Т-скуль не ковырял) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 16:41 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
tygra авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно". Вы по-русски уж, а то бред какой-то, особенно про удаление. -- Tygra's -- ИМХО типовая схема типовой подход - и так все понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 17:10 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
YBW tygra авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно". Вы по-русски уж, а то бред какой-то, особенно про удаление. -- Tygra's -- ИМХО типовая схема типовой подход - и так все понятно Ну видимо товарисчу требуетсяч перевод: 1. "Кто папа" - означает "кто последний редактировал запись". В том случае, если имеется n (где n>1) равноправных пользователей, которые могут изменять некоторое поле, неважно знать какое значение было раньше, но важно знать кто последний выполнил апдейт. 2. "Кто накосячил" - означает "кто удалил эту сверхважную запись". В том случае, если имеется n (где n>1) равноправных пользователей которые могут удалять записи, но есть при этом один суперпользователь, который принимает окончательное решение об удалении записи, важно, чтобы случайно не удалили нужную запись. В этом случае простые пользователи ничего не удаляют, а только скидывают в "корзину". А уже суперпользователь выполняет аудит этой корзины и окончательно принимает решение об удалении или восстановлении той или иной записи. К каждой таблице хистори вешать - замучаешься таблицы создавать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 17:58 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
4321А что, кстати сказать, вернет SELECT CURRENT_USER в этом случае?Он вернет dbo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 20:21 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
авторНу видимо товарисчу требуетсяч перевод: Точно! :)) Тока я не вижу смысла в таком виде якобы "логирования". Лучше ничего, чем так. авторК каждой таблице хистори вешать - замучаешься таблицы создавать :) Так хранимую процедуру напишите да и все. Вы что же, руками чтоли создаете? Зачем уж так. У меня все из интерфейса - список таблиц, какую нужно логировать, нажал на кнопочку - все создалось, и таблица истории, и триггеры, и все что нужно. И даже пишется лог, когда и кто запустил/остановил логирование. И можно посмотреть лог изменений по дате. ЗЫ Не, найду время и выложу эту хрень. Пусть кому-то будет легче. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 10:22 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33228631&tid=1545667]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
370ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 688ms |

| 0 / 0 |
