|
|
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
Добрый день. База данных в Firebird 2.5, необходим механизм подписывания записи в системе электронного документооборота.После подписывания документа запись "не может изменяться" ни программными средствами, ни сторонними средствами. На программном уровне это запретить можно, но сторонними - сомнительно. Хотелось бы добавить расчёт контрольной суммы записи и проверять позднее при открытии документов, выводя предупреждение, что запись была изменена. Однако, записи содержат много связанных блобов в других таблицах, их тоже надо обязательно считать. Сталкивались с таким, может есть другое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 07:27:18 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
DFilushin, я использовал триггеры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 07:46:16 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
DFilushin но сторонними - сомнительно. триггеры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 07:47:43 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
DFilushin, и еще как правило в одной строке с данными часть данных может участвовать в подписи, а часть может являться вспомогательными и не участвующими в ЭЦП, что нибудь для отображения документа или бог знает что еще, так же надо учесть что программа развивается и возможно изменение структуры данных и т.д. и т.п. тут только триггеры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 07:52:05 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
В триггерах подсчитывать контр. сумму или контролировать изменение данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 08:12:58 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
так и есть, надо было б считать не по всем полям, есть вспомогательные, их игнорировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 08:13:35 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
DFilushinВ триггерах подсчитывать контр. сумму или контролировать изменение данных? Запрещать изменения, зы. И если я правильно понял то если сработал триггер, то значит "изменения" были, так что контролировать изменения данных смысла не имеет никакого и неважно были-ли на самом деле изменены значения полей или нет достаточно контролировать значения флага "запись не может изменяться" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 08:20:29 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
я еще дополнительно к данным храню саму копию документа с данными, так как гарантировать, что что то не измениться, справочник или бог знает что еще, не возможно, лучше на всякий случай иметь копию документа, так же иногда сам документ меняется, колонки, подписи и т.д. очень сложно за всем уследить, так что копия самого документа не помешает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 10:00:20 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
Триггеры здесь не очень красиво смотрятся.DFilushinнадо было б считать не по всем полям, есть вспомогательные, их игнорироватьНа каждое изменение таких вспомогательных полей будет вызываться триггер, делающий неслабый обсчет контрольной суммы или как минимум проверку изменения нужных полей. А если, как ты говоришь, объекты разбросаны по разным таблицам. Это ж какие триггеры будут… Допустим, есть таблицы A, B, C. Объект «Накладная» хранит данные в таблице А и С. Объект «Служебная записка» хранит данные в таблице В и С. При изменении таблицы С, триггер должен выяснить с каким объектом он связан (придется добавить ключик принадлежности, или (о ужас!) искать через FK таблиц A и B) и продолжать проверку. А если данные объекта размазаны более чем по двум таблицам, то очень тяжело представить логику таких триггеров. Либо она будет многократно дублироваться, либо придется писать хитрую процедуру, которая в начале своей работы будет разбираться кто и в связи с чем ее вызвал. Если реализовать DML-операции через процедуры, как было отмечено в прошлом топике, то проверка будет в том месте, где ей надо быть. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Делай подобные DML процедуры и закрывай прямой доступ на insert/update/delete. Процедурам которые меняют вспомогательные поля доступ на update даешь, это нормальная практика. Сторонними средствами (если не знать пароля SYSDBA) ничего не получится изменить! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 10:23:15 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
да, тогда и црц не потребуется считать поставили - закрыто - закрыли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 10:36:23 |
|
||
|
Проверка записи на изменение
|
|||
|---|---|---|---|
|
#18+
Верно! И подумай какая красота будет в программе. В свойстве UpdateSQL пишешь просто: Код: sql 1. 2. 3. Аналогичное и для InsertSQL и DeleteSQL Для тех, кто любит ООП, это есть инкапсуляция. Что там творится внутри DML_Invoice_Update вызывающей программе не интересно. Может со временем появится таблица D. Ты добавишь ее обработку в процедуре, а в программе ничего менять не нужно, разве что SelectSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 10:56:10 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38574916&tid=1563843]: |
0ms |
get settings: |
8ms |
get forum list: |
24ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
227ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 572ms |

| 0 / 0 |
