Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
ldfanateА если в бизнес-логику вынести на клиент, то можно двухфазно комитить - сначала сам документ (критичные данные), потом неспеша историю (менее критичные). Сохраняться будет дольше, но зато общая нагрузка на систему будет равномернее, и СУБД не так будет нагружаться.Идея хорошая, но это более сложно, значит, более багоёмко, кроме того, нарушается принцип атомарности - после некоторых видов сбоев или восстановлений, данные могут остаться без истории - тут уж надо смотркеть, допустимо это, или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:04 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Спасибо что многие отозвались. Хотел бы повторить суть проблемы и подвести итог так сказать. по сути было два вопроса 1) какой метод использовать для хранения истории (также с этим связана авторизация чтоб получить имя пользователя) 2) проблема с spid по первому вопросу решил для себя следующее: в идеале использовать свою систему авторизации (свои таблицы с пользователями, группами, правами пользователей...) и в месте с этим использовать историю в виде доп. таблицы (где кроме записи есть поля кто,когда и что делал) для того чтоб использовать триггеры (получить пользователя) нам необходимо использовать "маппинг" для таблицы и по @sspid, дата, пользователь( учетка под которой зашли ) определять своего пользователя пример : create table dbo.SessionToUserMapping ( session_id int constraint PK_SessionToUserMapping primary key, login_name sysname, login_time datetime, custom_user_id int ); --регистрация пользователя merge into dbo.SessionToUserMapping t using ( select session_id, login_name, login_time, @custom_user_id as custom_user_id from sys.dm_exec_session where session_id = @@SPID ) s on t.session_id = s.session_id when not matched then insert (session_id, login_name, login_time, custom_user_id) values (s.session_id, s.login_name, s.login_time, s.custom_user_id) when matched then update set login_name = s.login_name, login_time = s.login_time, custom_user_id = s.custom_user_id; --получение пользователя select m.custom_user_id from dbo.SessionToUserMapping m join sys.dm_exec_sessions s on s.session_id = m.session_id and s.login_name = m.login_name and s.login_time = m.login_time; от сюда появляется проблема так как подключение держать на всем времени работы программы не правильно то login_time будет всегда разное из-за секунд ( если брать только дату то возможны путаницы с пользователем) как можно исправить этот момент ????? -регистрировать пользователя при запуске программы - тащить пользователя при каждом обращении к бд -или использовать еще какието параметры кроме login_time ,login_name ,session_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:24 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
пример подключения к бд SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings["BD"].ConnectionString; SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandText = "PROCEDURE"; cmd.Parameters.AddWithValue("PaRAM", PaRAM); cmd.Parameters.Add("Result", System.Data.SqlDbType.Int); cmd.Parameters["Result"].Direction = System.Data.ParameterDirection.Output; bool res = false; try { conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); id = Convert.ToInt32(cmd.Parameters["Result"].Value); if (id > 0) res = true; ; } catch (Exception ex) { if (conn.State == System.Data.ConnectionState.Open) { conn.Close(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:26 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
вам уже намекали на использование USING , почитайте , поищите примеры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:30 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Konst_One, вы имеете в виду намек это "Если это сервер приложения то нужно писать линк таблицу куда писать соответствие Spid и пользователя и по ней делать сопоставление. Но в некоторых системах это может быть проблематично когда spid меняется и управлять этим нельзя или сложно" согласен именно это и нужно пример подобной реализации в гугле подобного, корректного примера я не нашел в связи с чем и прошу помощи (пример подобного я привел выше ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:34 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
или как правильно назвать такой подход " линк таблицу куда писать соответствие Spid и пользователя" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:36 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
если у вас 1С , то вам ничего не поможет почитайте для начала про CDC из коробки: https://www.red-gate.com/simple-talk/sql/learn-sql-server/introduction-to-change-data-capture-cdc-in-sql-server-2008/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:41 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Konst_One, нет 1С не используется используется c# и MSSQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:43 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Konst_One, "почитайте для начала про CDC из коробки: " интересная статья но не понял как определяется пользователь который сделал изменение как то об этом не рассказывают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:45 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
тогда тем более не понятно, что вы выбираете. вы пишите сейчас систему с нуля? выбираете методы авторизации на уровне сервера базы данных? сейчас современные приложения работают с пулами соединений и как правило в рамках своей роли, контекст безопасности определяется не на уровене базы данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:45 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Konst_One, вы такими вопросами уводите в сторону система с нуля, авторизации на уровне сервера базы данных- авторизация своя (как писал раньше свои таблицы пользователей групп, прав...) причем тут пул соединений ?-- на сколько помню он по умолчанию включен и используется "для скорости подключения к бд" -так очень кратко ( как писал раньше login_time будет всегда разным) я ж это все описал раньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:52 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Kyvaldeniusавторизации на уровне сервера базы данных- авторизация своя (как писал раньше свои таблицы пользователей групп, прав...)Ну вот и задайте вопрос тому, кто принял это решение, как теперь на стороне сервера определять конечного пользоваткля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:53 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
тогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:54 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Kyvaldenius, Не изобретайте велосипед. Изучите данную тему: https://en.wikipedia.org/wiki/Slowly_changing_dimension ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:55 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, хах))) просто лучший ответ тут выше примеры, и описания подходов что говорит о том что это в полне реализуемый подход и в реализации этого подхода столкнулся с проблемой о которой и спрашиваю совета а что посоветуете использовать для авторизации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:56 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
попахивает нетленкой автортогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп ) какэта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:57 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
a_voronin, вы серьезно?? используется "Тип 4: добавить таблицу истории " ( писал об этом 8 сообщений выше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:58 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
TaPaKпопахивает нетленкой автортогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп ) какэта? да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:58 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Konst_OneTaPaKпопахивает нетленкой пропущено... какэта? да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят и по этому будет один spid? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 15:59 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
TaPaKKonst_Oneпропущено... да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят и по этому будет один spid? в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 16:02 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Konst_One, как вы так определили ?? @sspid будет выглядеть так 54 55 56 . . . но так как мы подключились выполнили действие и отключились то sspid не будет висеть постоянно а будет заполнять ся другим подключением получится ситуация подключился пользователь "USER" присвоен 54 user сделал дело и отключился номер 54 освободился и присвоен другому ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 16:02 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Konst_OneTaPaKпропущено... и по этому будет один spid? в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно а зачем вообще использовать spid для логирования, если пользователь уже определён ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 16:03 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
изобретайте дальше свой велосипед, удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 16:04 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
Konst_One, "поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно" по этому используется @sspid, login, time (выше описано) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 16:04 |
|
||
|
Варианты логирования изменения данных
|
|||
|---|---|---|---|
|
#18+
TaPaKKonst_Oneпропущено... в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно а зачем вообще использовать spid для логирования, если пользователь уже определён это к ТС вопрос, я тут не при делах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2019, 16:04 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39799456&tid=1687953]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
131ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 513ms |

| 0 / 0 |
