Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
 Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
День добрый.
Прошу разъяснения, статьи, примера, совета.

Краткая задача:"Необходимо сделать историю изменений данных которая хранит сами данные действие время и пользователь который совершил действие"

Проблема состоит в следующем какой подход использовать: (опишу решения которые знаю и их достоинства не достатки )


Способы которые знаю:
1)Создать собственные таблицы для управления авторизацией ( пользователи/ группы/ объекты) и продумать действия по работе сними ( шифрование пароля/ разделение прав/объектов)

+ все в твоих руках
- не понятно как быть с логированием данных: а именно с логином пользователя
то есть стандартные функции mssql будут показывать учетку / или имя входа в MS sql
приходится делать промежуточные таблицы где есть свои проблемы (Лог изменений данных)


2) способ использовать AD то есть (microsoft authorization)
тогда логика выглядит так мы в настройках сервера SQL подключаем группу пользователей которая может подключаться к серверу бд и храним логин ( работа по шифрованию пароля / изменения ложиться на AD)

в приложении (строка подключения) прописываем авторизацию microsoft

+ меньше работы с паролем, также можно совместить с (1) указав свои группы/права/объекты
так же логирование данных будет проходить корректно так как логин пользователя= его учетке которая вызывается стандартными функциями/запросами к системным таблицам

- не всегда есть AD, ули не все пользователи занесены в домен либо еще что то связанное с администрированием

3) Авторизация с помощью sql
ни разу не пробовал если есть хорошие статьи с примерами киньте
Представления в общих чертах на подобие работы с (2) но на практике ни разу не видел
-как добавлять CRUD пользователей как быть с паролем и тд....


Лучшим считаю 1 способ но в нем возникает проблема-как на основе триггеров получить информацию о пользователе который совершил изменение (все пользователи подключаются к бд под одинаковым лог/паролем)????
9 апр 19, 15:46    [21857315]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
МуМу
Member

Откуда:
Сообщений: 1072
Вы смешали два вопроса. Вопрос авторизации и вопрос способов хранения и предоставления данных. По первому вопросу нужно исходить из того что это за система. Если это сервер приложения то нужно писать линк таблицу куда писать соответствие Spid и пользователя и по ней делать сопоставление. Но в некоторых системах это может быть проблематично когда spid меняется и управлять этим нельзя или сложно(например 1С).
Второй вопрос хранения и представления. Вы можете писать триггерами чего угодно но это приведет к хранению избыточных данных(их будет много) и доп. нагрузке на систему. К тому же таблицы меняют свою структуру и нужно думать о вопросах удобного отображения истории изменений.

На практике все об системе логирования кричат когда что то важное кто то поменял, включается режим паранои и т.п. Но со временем истерия утихает а вопрос нафига столько(и где) исторических данных хранить остается. Поэтому как правило определяются с минимальным набором данных и их логируют. Системы тотального лоигрования как правило не взлетают а точнее живут недолго.
9 апр 19, 16:16    [21857365]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
МуМу
Member

Откуда:
Сообщений: 1072
Писали коммерческие системы по логированию(для 1С) спрос не оправдал ожиданий. Точнее говорят об этом много а покупают мало.:) Исходя из этого делюсь своим опытом. А так то например динамик SQL по автогенерации триггеров и вперед!
9 апр 19, 16:20    [21857374]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
МуМу,
вы как раз попали в самую точку
"spid меняется и управлять этим нельзя или сложно(например 1С). " столкнулся с такой проблемой но на MSSQL , не знаю как обойти или использовать другой подход например добавить поле с именем пользователя который редактировал
9 апр 19, 16:28    [21857390]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
МуМу,

"spid меняется и управлять этим нельзя или сложно. " есть ли примеры как с ним работать или подходы по проектированию


( для моей задачи что бы точно определить пользователя не хватает одного параметра spid , пытался использовать еще время и логин учетки тоже есть проблемы)
9 апр 19, 16:50    [21857430]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 31739
Блог
Темпоральные таблицы
9 апр 19, 17:04    [21857454]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
МуМу
Member

Откуда:
Сообщений: 1072
Ну как вариант , создавайте временную таблицу в начале сеанса и пишите имя пользователя.(будет spid,время, пользователь). Надеюсь вы помните что триггеры после реструктуризации будут слетать, в случае корявой архитектуры могут пойти блокировки и просадка производительности. А лучше пишите средствами 1С осознанно что нужно - куда нужно.(ну да обработки, тоже нужно учитывать) Попомните мои слова - все остальное не взлетит. Точнее не будет стоить результат потраченного времени и будет со временем на полке пылиться.
9 апр 19, 17:30    [21857497]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6532
Kyvaldenius,

лучшее решение - темпоральные таблицы.
9 апр 19, 17:49    [21857554]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Владислав Колосов,

темпоральные таблицы используются в SQL Server (начиная с 2016) как быть с более ранними версиями ?
10 апр 19, 10:33    [21858030]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Kyvaldenius
Владислав Колосов,

темпоральные таблицы используются в SQL Server (начиная с 2016) как быть с более ранними версиями ?

cdc
10 апр 19, 10:33    [21858032]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
TaPaK
Kyvaldenius
Владислав Колосов,

темпоральные таблицы используются в SQL Server (начиная с 2016) как быть с более ранними версиями ?

cdc

cdc - что это?
10 апр 19, 10:38    [21858038]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Kyvaldenius
TaPaK
пропущено...

cdc

cdc - что это?

у гугла спросите
10 апр 19, 10:39    [21858041]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
TaPaK,
гугл отвечает:
1)Centers for Disease Control and Prevention
2)Славянские Домашние Сети: Главная
3)Центры по контролю и профилактике заболеваний США - Википедия
4)Работа в CDC - вакансии CDC 3118969 | Rabota.ua
10 апр 19, 10:42    [21858047]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Kyvaldenius
TaPaK,
гугл отвечает:
1)Centers for Disease Control and Prevention
2)Славянские Домашние Сети: Главная
3)Центры по контролю и профилактике заболеваний США - Википедия
4)Работа в CDC - вакансии CDC 3118969 | Rabota.ua

беда с этими аграриями...
"sql cdc"
10 апр 19, 10:44    [21858050]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
TaPaK,

"sql cdc" -спасибо за совет но это кардинально другой подход от имеющегося

есть ли примеры /статьи по том как коректно использовать spid (имеется в виду в вязке с несколькими значениями )
10 апр 19, 11:22    [21858092]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
.Евгений
Member

Откуда:
Сообщений: 493
Я не специалист по 1С, поэтому высказываюсь с предположительной интонацией: слышал, что в ней есть механизмы интеграции с шиной. В принципе поймать и сохранить сообщение (или его часть) в лог (любой формы) - дело нехитрое.
10 апр 19, 11:56    [21858120]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
.Евгений,

столкнулся с такой проблемой но на MSSQL ( 1с не используется )
10 апр 19, 12:56    [21858199]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6532
Kyvaldenius,

создаете дополнительную таблицу, в которую триггером из основной таблицы сохраняете любые параметры - время, пользователя, хост, SPID что угодно. Включаете на эту таблицу механизм отслеживания, как и на основную. Затем, при разборе CDC данных связываете по LSN. Дополнительную таблицу необходимо периодически чистить.
10 апр 19, 13:04    [21858218]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
ldfanate
Member

Откуда:
Сообщений: 84
Возможно не следует накапливать "историю всего подряд" средствами чисто СУБД?
Ведь та задача, которую вкратце озвучил автор, зачастую означает журналирование только тех полей, которые пользователь ручками ведёт, - чтобы получить объективные доказательства действий в системе.
Т.е. если в таблице только 3 поля вводятся с экранной форме, а остальные 20 - технические или вычисляемые поля, то наверное для общей производительности системы будет лучше, если на бизнес-логику приложения возложить обязанности корректно заполнять таблицы истории адресно (при сохранении бизнес-документа).
10 апр 19, 13:21    [21858247]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
uaggster
Member

Откуда:
Сообщений: 619
ldfanate
Возможно не следует накапливать "историю всего подряд" средствами чисто СУБД?
Ведь та задача, которую вкратце озвучил автор, зачастую означает журналирование только тех полей, которые пользователь ручками ведёт, - чтобы получить объективные доказательства действий в системе.
Т.е. если в таблице только 3 поля вводятся с экранной форме, а остальные 20 - технические или вычисляемые поля, то наверное для общей производительности системы будет лучше, если на бизнес-логику приложения возложить обязанности корректно заполнять таблицы истории адресно (при сохранении бизнес-документа).

Выделите изменяемые поля в отдельную таблицу со связью 1 к 1, а потом CDC или темпоральные таблицы :-)
10 апр 19, 13:46    [21858279]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3668
Может не в тему, или я отстал от жизни, но разве вставка записей в лог таблицу через триггер в случае отката транзакции не будет отменена?
10 апр 19, 14:06    [21858311]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
ldfanate
Возможно не следует накапливать "историю всего подряд" средствами чисто СУБД?
Ведь та задача, которую вкратце озвучил автор, зачастую означает журналирование только тех полей, которые пользователь ручками ведёт, - чтобы получить объективные доказательства действий в системе.
Т.е. если в таблице только 3 поля вводятся с экранной форме, а остальные 20 - технические или вычисляемые поля, то наверное для общей производительности системы будет лучше, если на бизнес-логику приложения возложить обязанности корректно заполнять таблицы истории адресно (при сохранении бизнес-документа).
Средствами чисто СУБД можно логировать и не "всё подряд".
Это определяется бизнес-требованиями.
Однако, ИМХО лучше логировать именно всё подряд, потому что так проще разбирать, что там и как поменялось внутри системы, а не только что делал пользователь.
Arm79
Может не в тему, или я отстал от жизни, но разве вставка записей в лог таблицу через триггер в случае отката транзакции не будет отменена?
Будет, но речь же о логировании изменений в системе.
Если надо логировать действия пользователя в клиенте, независимо от работы с базой, лучше это делать в самом клиенте, локально.
Но это нужно только для технарей из поддержки, т.к. обычно важны именно изменения в БД.
10 апр 19, 14:22    [21858328]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
ldfanate
Member

Откуда:
Сообщений: 84
Выделите изменяемые поля в отдельную таблицу со связью 1 к 1, а потом CDC или темпоральные таблицы :-)

Это понятно. Просто при коммите триггером бизнес-документа будет вместо N записей (заголовок + позиции + хзчегоещё) в одной транзакции коммитится N+M записей истории (где M можеть быть велико, если желают много критичных полей отслеживать).
Т.е. нагрузка на СУБД из расчёта на 1 комит возрастёт.

А если в бизнес-логику вынести на клиент, то можно двухфазно комитить - сначала сам документ (критичные данные), потом неспеша историю (менее критичные). Сохраняться будет дольше, но зато общая нагрузка на систему будет равномернее, и СУБД не так будет нагружаться. Чтото подобное в промышленных ERP (SAP например) применяется, как способ разгрузки СУБД, когда в ней много клиентов толкутся.
10 апр 19, 14:35    [21858355]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
invm
Member

Откуда: Москва
Сообщений: 8661
ldfanate
Т.е. нагрузка на СУБД из расчёта на 1 комит возрастёт.
commit не создает нагрузки.
10 апр 19, 14:42    [21858368]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
ldfanate
Это понятно. Просто при коммите триггером бизнес-документа будет вместо N записей (заголовок + позиции + хзчегоещё) в одной транзакции коммитится N+M записей истории (где M можеть быть велико, если желают много критичных полей отслеживать).
Нет, такой схемы не надо делать.
Нужно на одно изменение строки записывать одну строку истории.
Таблица логирования делается как копия логируемой таблицы (точнее, те поля, которые вы решили логировать), плюс метаданные (кто, когда)
То есть триггер всегда такой (псевдокод):
insert Table_log(login, date, fields...)
select @current_login, @current_date, fields...
from inserted
И всё.
Нагрузка нулевая.
10 апр 19, 14:59    [21858391]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
ldfanate
А если в бизнес-логику вынести на клиент, то можно двухфазно комитить - сначала сам документ (критичные данные), потом неспеша историю (менее критичные). Сохраняться будет дольше, но зато общая нагрузка на систему будет равномернее, и СУБД не так будет нагружаться.
Идея хорошая, но это более сложно, значит, более багоёмко, кроме того, нарушается принцип атомарности - после некоторых видов сбоев или восстановлений, данные могут остаться без истории - тут уж надо смотркеть, допустимо это, или нет.
10 апр 19, 15:04    [21858398]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Спасибо что многие отозвались.

Хотел бы повторить суть проблемы и подвести итог так сказать.

по сути было два вопроса 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 апр 19, 15:24    [21858428]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
пример подключения к бд

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 апр 19, 15:26    [21858430]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
вам уже намекали на использование USING, почитайте , поищите примеры
10 апр 19, 15:30    [21858435]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,
вы имеете в виду намек это

"Если это сервер приложения то нужно писать линк таблицу куда писать соответствие Spid и пользователя и по ней делать сопоставление. Но в некоторых системах это может быть проблематично когда spid меняется и управлять этим нельзя или сложно"


согласен именно это и нужно пример подобной реализации в гугле подобного, корректного примера я не нашел в связи с чем и прошу помощи

(пример подобного я привел выше )
10 апр 19, 15:34    [21858442]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
или как правильно назвать такой подход " линк таблицу куда писать соответствие Spid и пользователя"
10 апр 19, 15:36    [21858445]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
если у вас 1С , то вам ничего не поможет

почитайте для начала про CDC из коробки:
https://www.red-gate.com/simple-talk/sql/learn-sql-server/introduction-to-change-data-capture-cdc-in-sql-server-2008/
10 апр 19, 15:41    [21858456]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,

нет 1С не используется


используется c# и MSSQL
10 апр 19, 15:43    [21858461]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,

"почитайте для начала про CDC из коробки: " интересная статья но не понял как определяется пользователь который сделал изменение как то об этом не рассказывают
10 апр 19, 15:45    [21858469]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
тогда тем более не понятно, что вы выбираете. вы пишите сейчас систему с нуля? выбираете методы авторизации на уровне сервера базы данных? сейчас современные приложения работают с пулами соединений и как правило в рамках своей роли, контекст безопасности определяется не на уровене базы данных
10 апр 19, 15:45    [21858470]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,
вы такими вопросами уводите в сторону

система с нуля,
авторизации на уровне сервера базы данных- авторизация своя (как писал раньше свои таблицы пользователей групп, прав...)
причем тут пул соединений ?-- на сколько помню он по умолчанию включен и используется "для скорости подключения к бд" -так очень кратко ( как писал раньше login_time будет всегда разным)
я ж это все описал раньше
10 апр 19, 15:52    [21858479]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36269
Kyvaldenius
авторизации на уровне сервера базы данных- авторизация своя (как писал раньше свои таблицы пользователей групп, прав...)
Ну вот и задайте вопрос тому, кто принял это решение, как теперь на стороне сервера определять конечного пользоваткля.
10 апр 19, 15:53    [21858483]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
тогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп )
10 апр 19, 15:54    [21858484]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3926
Kyvaldenius,

Не изобретайте велосипед. Изучите данную тему:

https://en.wikipedia.org/wiki/Slowly_changing_dimension
10 апр 19, 15:55    [21858487]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Гавриленко Сергей Алексеевич,

хах)))
просто лучший ответ

тут выше примеры, и описания подходов что говорит о том что это в полне реализуемый подход и в реализации этого подхода столкнулся с проблемой о которой и спрашиваю совета

а что посоветуете использовать для авторизации?
10 апр 19, 15:56    [21858488]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
попахивает нетленкой

автор
тогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп )

какэта?
10 апр 19, 15:57    [21858490]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
a_voronin,

вы серьезно??

используется "Тип 4: добавить таблицу истории " ( писал об этом 8 сообщений выше)
10 апр 19, 15:58    [21858491]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
TaPaK
попахивает нетленкой

автор
тогда что вы всё время про spid речь тут ведёте, у вас вообще один spid всегда будет вашего апп-сервера (webapi/wcf и тп )

какэта?


да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят
10 апр 19, 15:58    [21858492]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Konst_One
TaPaK
попахивает нетленкой

пропущено...

какэта?


да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят

и по этому будет один spid?
10 апр 19, 15:59    [21858495]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
TaPaK
Konst_One
пропущено...


да я про текущий контекст выполнения, у него пользователи свои через один сервис все ходят

и по этому будет один spid?


в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно
10 апр 19, 16:02    [21858500]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,
как вы так определили ??

@sspid будет выглядеть так

54
55
56
.
.
.
но так как мы подключились выполнили действие и отключились то sspid не будет висеть постоянно а будет заполнять ся другим подключением
получится ситуация

подключился пользователь "USER" присвоен 54 user сделал дело и отключился номер 54 освободился и присвоен другому
10 апр 19, 16:02    [21858502]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Konst_One
TaPaK
пропущено...

и по этому будет один spid?


в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно

а зачем вообще использовать spid для логирования, если пользователь уже определён
10 апр 19, 16:03    [21858504]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
изобретайте дальше свой велосипед, удачи
10 апр 19, 16:04    [21858506]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,

"поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно" по этому используется
@sspid, login, time (выше описано)
10 апр 19, 16:04    [21858507]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
TaPaK
Konst_One
пропущено...


в один момент времени под одним spid может быть совершенно разный пользователь с точки зрения его системы авторизации, поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно

а зачем вообще использовать spid для логирования, если пользователь уже определён


это к ТС вопрос, я тут не при делах.
10 апр 19, 16:04    [21858508]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One,

ну что вы тогда можете посоветовать ?
скажите например использовать windows authorization споров нет это легче или другие примеры ?
10 апр 19, 16:05    [21858509]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
Kyvaldenius
Konst_One,

ну что вы тогда можете посоветовать ?
скажите например использовать windows authorization споров нет это легче или другие примеры ?


что у вас за приложение ASP.NET? используйте стандартный механизм identity
10 апр 19, 16:06    [21858512]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
TaPaK
пропущено...

а зачем вообще использовать spid для логирования, если пользователь уже определён


это к ТС вопрос, я тут не при делах.


по тому что хочу историю писать на тригерах, так как мы не можем в триггер передать параметр значит он должен быть уже определен для выборки в бд

другой вариант не использовать тригер а передавать параметр пользователя но не хочется таскать его везде
10 апр 19, 16:07    [21858514]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
Kyvaldenius
Konst_One,

ну что вы тогда можете посоветовать ?
скажите например использовать windows authorization споров нет это легче или другие примеры ?


что у вас за приложение ASP.NET? используйте стандартный механизм identity


win forms
10 апр 19, 16:09    [21858516]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
ну что вы тогда можете посоветовать ?
По исходной задаче:

Kyvaldenius
Краткая задача:"Необходимо сделать историю изменений данных которая хранит сами данные действие время и пользователь который совершил действие"
Можно посоветовать: пишите историю изменения данных, с указанием информации, кто, когда и где их поменял.

У вас же далее следуют какие то странные вопросы, spid, Windows, при чём тут это?

Просто пишите инфу в лог, и всё.
Kyvaldenius
"поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно" по этому используется
@sspid, login, time (выше описано)
sspid зачем?
Непонятно, как он относится к исходной задаче?
10 апр 19, 16:09    [21858517]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3926
Kyvaldenius,

Можете поставить Вертику, там все по умолчанию темпорально. Или посмотреть, что такое якорная модель или data vault.
10 апр 19, 16:11    [21858521]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
другой вариант не использовать тригер а передавать параметр пользователя но не хочется таскать его везде
Пишите его всегда при коннекте в CONTEXT_INFO
10 апр 19, 16:11    [21858522]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
alexeyvg
Kyvaldenius
ну что вы тогда можете посоветовать ?
По исходной задаче:

Kyvaldenius
Краткая задача:"Необходимо сделать историю изменений данных которая хранит сами данные действие время и пользователь который совершил действие"
Можно посоветовать: пишите историю изменения данных, с указанием информации, кто, когда и где их поменял.

У вас же далее следуют какие то странные вопросы, spid, Windows, при чём тут это?

Просто пишите инфу в лог, и всё.
Kyvaldenius
"поэтому использовать spid для логирования истории изменений конкретным юзером бессмысленно" по этому используется
@sspid, login, time (выше описано)
sspid зачем?
Непонятно, как он относится к исходной задаче?


пишите историю изменения данных, с указанием информации, кто, когда и где их поменял.-- хорошо сказано


как это реализовать ?
1 способ по средствам передачи параметров пользователя .... и запис этих данных в отдельную таблицу
2 способ на основе триггеров тогда гораздо меньше кода но появляется проблема как в триггере определить пользователя который совершил изменение

так как в триггер мы не можем передать параметр нам надо его выбрать из какойто сужествующей таблицы по средствам сравнения
@sspid ( и доп полей в чем как раз и проблема) пытаюсь определить текущего пользователя
10 апр 19, 16:13    [21858526]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
Kyvaldenius
Konst_One
пропущено...


что у вас за приложение ASP.NET? используйте стандартный механизм identity


win forms


https://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/
https://docs.microsoft.com/en-us/dotnet/framework/wcf/how-to-restrict-access-with-the-principalpermissionattribute-class

вы реально решили делать десктопные старые приложения на WindowsForms?
10 апр 19, 16:17    [21858536]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
пишите историю изменения данных, с указанием информации, кто, когда и где их поменял.-- хорошо сказано


как это реализовать ?
1 способ по средствам передачи параметров пользователя .... и запис этих данных в отдельную таблицу
2 способ на основе триггеров тогда гораздо меньше кода но появляется проблема как в триггере определить пользователя который совершил изменение

так как в триггер мы не можем передать параметр нам надо его выбрать из какойто сужествующей таблицы по средствам сравнения
@sspid ( и доп полей в чем как раз и проблема) пытаюсь определить текущего пользователя
У вас вопрос в передаче прользователя из сервера прилоджений в сиквел (потому что пользователи разные, а колннект к сиквелу под одним), а вы в начальном посте начинаете рассуждения про таблицы авторизации, домены и виндоус.

Я только в конце понял, что вам надо.

Используйте CONTEXT_INFO
10 апр 19, 16:18    [21858538]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
alexeyvg
Kyvaldenius
другой вариант не использовать тригер а передавать параметр пользователя но не хочется таскать его везде
Пишите его всегда при коннекте в CONTEXT_INFO


интересный вариант,
"значение context_info, установленное для текущего сеанса или пакета либо полученное с помощью инструкции SET CONTEXT_INFO"


то есть при подключении к бд как писал выше к действию который делает пользователь (например update) добавлять еще одно действие а именно запись значения в CONTEXT_INFO а в тригерре это значение получать ?


правильно я понял?
10 апр 19, 16:19    [21858542]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
win forms
То есть у вас обычное виндовое приложение?
Коннект с логином и паролем зашит в код приложения, что ли?
10 апр 19, 16:20    [21858543]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
Kyvaldenius
пропущено...


win forms


https://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/
https://docs.microsoft.com/en-us/dotnet/framework/wcf/how-to-restrict-access-with-the-principalpermissionattribute-class

вы реально решили делать десктопные старые приложения на WindowsForms?



а в чем проблема ? чем они плохи ?
10 апр 19, 16:20    [21858545]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
а в чем проблема ? чем они плохи ?
Проблема в том, что вы не говорите, что делаете, но спрашиваете совета.
10 апр 19, 16:21    [21858546]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
a_voronin
Kyvaldenius,

Можете поставить Вертику, там все по умолчанию темпорально. Или посмотреть, что такое якорная модель или data vault.



в место решения конкретной возникшей задачи вы предлагаете полностью поменять СУБД , или архитектуру бд ?
10 апр 19, 16:22    [21858549]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
Konst_One
вы реально решили делать десктопные старые приложения на WindowsForms?

а в чем проблема ? чем они плохи ?
Для десктопных приложений используют Windows - авторизацию, другое использовать глупо.

И тогда логирование решается просто, как я написал - "просто пишите записи в лог".
10 апр 19, 16:23    [21858550]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
alexeyvg
Kyvaldenius
а в чем проблема ? чем они плохи ?

То есть у вас обычное виндовое приложение?
Коннект с логином и паролем зашит в код приложения, что ли?Проблема в том, что вы не говорите, что делаете, но спрашиваете совета.



нет коннект не зашит в приложение.

как не говорю когда только об этом говорю и примеры кода скинул
10 апр 19, 16:24    [21858555]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
Kyvaldenius
Konst_One
пропущено...


https://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/
https://docs.microsoft.com/en-us/dotnet/framework/wcf/how-to-restrict-access-with-the-principalpermissionattribute-class

вы реально решили делать десктопные старые приложения на WindowsForms?



а в чем проблема ? чем они плохи ?


вызывайте методы логирования по факту внутри своего приложения, которые уже будут записывать требуемую инфу сразу в структуру логирования в вашу базу/файл/почту/смс и тп
10 апр 19, 16:24    [21858556]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
Kyvaldenius
пропущено...



а в чем проблема ? чем они плохи ?


вызывайте методы логирования по факту внутри своего приложения, которые уже будут записывать требуемую инфу сразу в структуру логирования в вашу базу/файл/почту/смс и тп



правильно я вас понял это то очем я говорил как передавать параметр при соверешении действия ?

а чем win forms плохо ?
10 апр 19, 16:27    [21858562]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
сейчас лучше делать WEB-приложения , клиенты пишутся на любом доступном вам языке. backend делайте хоть на .NET Core 2
10 апр 19, 16:29    [21858567]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6532
ldfanate,

автор
А если в бизнес-логику вынести на клиент, то можно двухфазно комитить - сначала сам документ (критичные данные), потом неспеша историю (менее критичные).


Причем здесь клиент? Заставьте себя все же изучить механику работы CDC.
10 апр 19, 16:30    [21858572]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
сейчас лучше делать WEB-приложения , клиенты пишутся на любом доступном вам языке. backend делайте хоть на .NET Core 2


мне интересно ваше мнение,
давайте определимся в понятиях

"Веб-приложение — клиент-серверное приложение, в котором клиент взаимодействует с сервером при помощи браузера, а за сервер отвечает веб-сервер. Логика веб-приложения распределена между сервером и клиентом, хранение данных осуществляется, преимущественно, на сервере, обмен информацией происходит по сети. "


то есть есть ли смысл для "не большого ПО" использовать TSQL, asp.net,razor, разметку страyицы, CSS, javascript
или только TSQL и С#
10 апр 19, 16:33    [21858576]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
alexeyvg
Kyvaldenius
пропущено...

а в чем проблема ? чем они плохи ?
Для десктопных приложений используют Windows - авторизацию, другое использовать глупо.

И тогда логирование решается просто, как я написал - "просто пишите записи в лог".



но тогда есть зависимость от AD отдельно группу выделять для тех кто работает с БД , как быть с пользователями которые нет в сети например у них Linux стоит начинаются тогда уже проблемы администрирования
10 апр 19, 16:36    [21858584]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
alexeyvg
пропущено...

То есть у вас обычное виндовое приложение?
Коннект с логином и паролем зашит в код приложения, что ли?
нет коннект не зашит в приложение.
Тогда в чём проблема?
Записываете при логировании логин, под которым пользователь залогинился в виндах.
Передавать его никуда не надо, он всегда доступен из SQL
10 апр 19, 16:40    [21858591]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
alexeyvg
Kyvaldenius
пропущено...
нет коннект не зашит в приложение.
Тогда в чём проблема?
Записываете при логировании логин, под которым пользователь залогинился в виндах.
Передавать его никуда не надо, он всегда доступен из SQL



тогда это используется SQL авторизация


так точка входа у всех одинаковая.
10 апр 19, 16:43    [21858598]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
alexeyvg
пропущено...
Для десктопных приложений используют Windows - авторизацию, другое использовать глупо.

И тогда логирование решается просто, как я написал - "просто пишите записи в лог".

но тогда есть зависимость от AD отдельно группу выделять для тех кто работает с БД , как быть с пользователями которые нет в сети например у них Linux стоит начинаются тогда уже проблемы администрирования
Вы же писали, что логин не зашит, то есть используется Win авторизация.

Впрочем, неважно, раз у вас чудесное WinForms приложение, работающее из Линукса...

Если вы используете Windows авторизацию, то используйте для логирования тот логин, под которым пользователь авторизовался.
Если вы не используете Windows авторизацию, то используйте для логирования CONTEXT_INFO
10 апр 19, 16:44    [21858599]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
alexeyvg
пропущено...
Тогда в чём проблема?
Записываете при логировании логин, под которым пользователь залогинился в виндах.
Передавать его никуда не надо, он всегда доступен из SQL
тогда это используется SQL авторизация

так точка входа у всех одинаковая.
Это и называется "логин зашит в код приложения". Даже если он зашит в конфиг или как то ещё.

Тогда только CONTEXT_INFO
10 апр 19, 16:45    [21858601]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
alexeyvg
Kyvaldenius
пропущено...
тогда это используется SQL авторизация

так точка входа у всех одинаковая.
Это и называется "логин зашит в код приложения". Даже если он зашит в конфиг или как то ещё.

Тогда только CONTEXT_INFO


Спасибо,
буду разбираться с CONTEXT_INFO я правильно он принимает значения вида

SET CONTEXT_INFO 0x01010101;

то есть записать "Admin" не получится только использовать тип binary или varbinary
10 апр 19, 16:52    [21858606]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
МуМу
Member

Откуда:
Сообщений: 1072
Вот воды налил автор топика. Вам уже все разжевали. Может windows NT аторизацию использовать , можете пользователя SQL создавать для каждого пользователя(есть еще апликейшин роли но вам это вряд ли понадобиться), можете в сервере приложения или чего там у вас писать в линковочную таблицу соответствие актуальное SPID - Пользователь каждый раз при смене контекста. В 1С например пишется в справочник(сами создайте) Пользователь с помощью ПриНачалеРаботыСистемы а в доп. поле @@spid прописывается автоматом, только еще времянку таблицу надо создавать что бы 1С контекст не переключала. В самописной системе я не знаю чего как у вас реализовано.
10 апр 19, 16:53    [21858607]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
то есть записать "Admin" не получится только использовать тип binary или varbinary
По разному молжно делать
Вообще, у вас же пользователи авторизованы, пусть и по-своему, значит, нужно писать их ID, а не имя.
Но можно и имя, строка прекрасно конвертится в varbinary и обратно
10 апр 19, 16:56    [21858613]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
МуМу
Вот воды налил автор топика. Вам уже все разжевали. Может windows NT аторизацию использовать , можете пользователя SQL создавать для каждого пользователя(есть еще апликейшин роли но вам это вряд ли понадобиться), можете в сервере приложения или чего там у вас писать в линковочную таблицу соответствие актуальное SPID - Пользователь каждый раз при смене контекста. В 1С например пишется в справочник(сами создайте) Пользователь с помощью ПриНачалеРаботыСистемы а в доп. поле @@spid прописывается автоматом, только еще времянку таблицу надо создавать что бы 1С контекст не переключала. В самописной системе я не знаю чего как у вас реализовано.


Вам уже все разжевали. Может windows NT аторизацию использовать , можете пользователя SQL создавать для каждого пользователя(есть еще апликейшин роли но вам это вряд ли понадобиться),--- это я описал в первом сообщении )

линковочную таблицу соответствие актуальное SPID - Пользователь каждый раз при смене контекста-- вот по этому и были/есть вопросы

например пишется в справочник(сами создайте) --- примеры кода скинул



Пользователь с помощью ПриНачалеРаботыСистемы а в доп. поле @@spid прописывается автоматом, только еще времянку таблицу надо создавать что бы 1С контекст не переключала..-----вот по большому мне это и надо но как это реализовать ? пример а не текст)


В самописной системе я не знаю чего как у вас реализовано -- я говорил что пишется с нуля по это му такой подход интересен и как его реализовывать конкретно ( тоесть по каким полям сверять надо, в какой момент....) а не просто текст )
10 апр 19, 16:58    [21858617]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
МуМу
Member

Откуда:
Сообщений: 1072
Ну не ленитесь - напишите. Будут конкретные вопросы - задавайте. Мне например лениво для вас код писать.(к тому же я не знаю какая там система, апликейшен сервер или чего там, к тому же на c# я читатель а не писатель) Но я вам рассказываю как уже делали и как работает.
10 апр 19, 17:09    [21858632]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3926
Kyvaldenius
a_voronin
Kyvaldenius,

Можете поставить Вертику, там все по умолчанию темпорально. Или посмотреть, что такое якорная модель или data vault.



в место решения конкретной возникшей задачи вы предлагаете полностью поменять СУБД , или архитектуру бд ?


Здесь нет конкретной задачи. Здесь стоит задача перехода на темпорал, прочем не локально, а непонятно в каком объеме.

"Необходимо сделать историю изменений данных которая хранит сами данные действие время и пользователь который совершил действие"

Это явно переход на Хранилище Данных и здесь напрашивается смена архитектуры. И после попыток "решить конкретную задачу" она рано или поздно произойдет.
10 апр 19, 18:44    [21858694]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
a_voronin
Здесь нет конкретной задачи. Здесь стоит задача перехода на темпорал, прочем не локально, а непонятно в каком объеме.
По моему, тут не "тепорал", а логировангие на всякий случай в общих чертах, причём "если не запишется, ну и ладно".
10 апр 19, 19:01    [21858709]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
iap
Member

Откуда: Москва
Сообщений: 46774
Эту статью с нашего форума читал кто-нибудь?
Нет? Эх вы! Молодёжь...
10 апр 19, 20:43    [21858790]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
МуМу
Ну не ленитесь - напишите. Будут конкретные вопросы - задавайте. Мне например лениво для вас код писать.(к тому же я не знаю какая там система, апликейшен сервер или чего там, к тому же на c# я читатель а не писатель) Но я вам рассказываю как уже делали и как работает.


Ну не ленитесь - напишите. не понял к чему это ?
11 апр 19, 09:19    [21858948]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
МуМу
Ну не ленитесь - напишите. Будут конкретные вопросы - задавайте. Мне например лениво для вас код писать.(к тому же я не знаю какая там система, апликейшен сервер или чего там, к тому же на c# я читатель а не писатель) Но я вам рассказываю как уже делали и как работает.


можете по подробней рассказать про "писать в линковочную таблицу соответствие актуальное SPID - Пользователь каждый раз при смене контекста"
11 апр 19, 09:25    [21858955]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
ldfanate
Member

Откуда:
Сообщений: 84
автор
Эту статью с нашего форума читал кто-нибудь?

О, самый ценный ответ!
11 апр 19, 09:29    [21858956]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
invm
Member

Откуда: Москва
Сообщений: 8661
Kyvaldenius,

Вам ранее уже все было разжевано на другом форуме. Но, видимо, не доходит...

Для автоматического ведения журнала на стороне сервера должно быть известно соответствие сессии вашему псевдопользователю.
Не важно как будет это соответствие реализовано - через CONTEXT_INFO или через таблицу соответствий.
Важно, что актуализировать соответствие нужно каждый раз, когда SqlConnection переходит в состояние Opened.
И, опять же, не важно как это будет реализовано в вашем, уж простите за прямоту, говнокоде.

В конечно итоге, при вашем подходе и после реализации вышеописанного, получите выполнение этой актуализации при каждом чихе в сторону БД...
11 апр 19, 10:19    [21858996]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
invm
Kyvaldenius,

Вам ранее уже все было разжевано на другом форуме. Но, видимо, не доходит...

Для автоматического ведения журнала на стороне сервера должно быть известно соответствие сессии вашему псевдопользователю.
Не важно как будет это соответствие реализовано - через CONTEXT_INFO или через таблицу соответствий.
Важно, что актуализировать соответствие нужно каждый раз, когда SqlConnection переходит в состояние Opened.
И, опять же, не важно как это будет реализовано в вашем, уж простите за прямоту, говнокоде.

В конечно итоге, при вашем подходе и после реализации вышеописанного, получите выполнение этой актуализации при каждом чихе в сторону БД...


спасибо за комментарий

сильно сказано "говнокоде" можете подсказать пример/ссылку/статью о правильном коде ?? )
15 апр 19, 16:13    [21862723]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
от себя хочу добавить, заметил интересную особенность как отвечают на вопрос в подобных форумах хочу ими поделиться так как накипело

1) предлагать изменить язык программирования/ субд/ архитектуру приложения
2) изменить подход в данном случае к авторизации ( что интересно в другой ветке форума где спрашивал какой метод авторизации лучше использовать советовали "самописный" )
3) самое главное не читать ответы от создателя вопроса
4) описывать механизмы работы без какого либо материала ( так в голове придумывается сферический конь с которым все прекрасно работает)


отдельно спасибо alexeyvg и iap за самые адекватные ответы и ссылки на статьи
15 апр 19, 16:22    [21862745]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36269
Kyvaldenius,

Ну да, адекватные люди на вопрос "как и чем посильнее расшибить голову" обычно не кидаются советовать как именно и чем именно: все таки людям чаще свойственна эмпатия.
15 апр 19, 16:30    [21862772]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
я не понимаю чем вызван мой вопрос "Варианты логирования изменения данных " такими бурными эмоциями

порой мне кажется что кол-во сообщений составляется из подобных ответов и ни какой конкретики

Гавриленко Сергей Алексеевич
Kyvaldenius,

Ну да, адекватные люди на вопрос "как и чем посильнее расшибить голову" обычно не кидаются советовать как именно и чем именно: все таки людям чаще свойственна эмпатия.
15 апр 19, 16:34    [21862780]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Kyvaldenius
от себя хочу добавить, заметил интересную особенность как отвечают на вопрос в подобных форумах хочу ими поделиться так как накипело

1) предлагать изменить язык программирования/ субд/ архитектуру приложения
2) изменить подход в данном случае к авторизации ( что интересно в другой ветке форума где спрашивал какой метод авторизации лучше использовать советовали "самописный" )
3) самое главное не читать ответы от создателя вопроса
4) описывать механизмы работы без какого либо материала ( так в голове придумывается сферический конь с которым все прекрасно работает)


отдельно спасибо alexeyvg и iap за самые адекватные ответы и ссылки на статьи

каждый кто приходит со своей нетленкой в итоге оставляет подобный перечень
15 апр 19, 16:36    [21862785]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
TaPaK
Kyvaldenius
от себя хочу добавить, заметил интересную особенность как отвечают на вопрос в подобных форумах хочу ими поделиться так как накипело

1) предлагать изменить язык программирования/ субд/ архитектуру приложения
2) изменить подход в данном случае к авторизации ( что интересно в другой ветке форума где спрашивал какой метод авторизации лучше использовать советовали "самописный" )
3) самое главное не читать ответы от создателя вопроса
4) описывать механизмы работы без какого либо материала ( так в голове придумывается сферический конь с которым все прекрасно работает)


отдельно спасибо alexeyvg и iap за самые адекватные ответы и ссылки на статьи

каждый кто приходит со своей нетленкой в итоге оставляет подобный перечень



наоборот мне казалось что это обычный вопрос и тут сидят великие гуру которые точно делали подобное и подскажут как правильно построить данный механизм а в место этого

1) предлагать изменить язык программирования/ субд/ архитектуру приложения .....
15 апр 19, 16:38    [21862789]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
invm
Member

Откуда: Москва
Сообщений: 8661
Kyvaldenius
сильно сказано "говнокоде"
Вещи названы своими именами.

1. Про using вам уже писали.
2. Помедитируйте над тем, как вы узнаете об ошибке, если таковая случится при выполнении cmd.ExecuteNonQuery(). Также поразмышляйте зачем, наряду с catch, есть еще и finally.
15 апр 19, 16:54    [21862812]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
мне казалось что это обычный вопрос и тут сидят великие гуру которые точно делали подобное и подскажут как правильно построить данный механизм
Тут на самом деле попадаются люди, которые за несколько десятилетий много раз делали такую функциональность.
Но, во первых, исходная формулировка немного непонятна. То ли про темпоральные данные, то ли про логирование, то ли про авторизацию для коннекта к сиквелу, то ли про систему управления правами своих объектов...
Во вторых, так как есть частные вопросы, то на них даются ответы. Хотя эти вопросы (и, получается, ответы) не имеют отношения к топику. Это следствие п.1
В третьих, нету одного шаблона, высеченного в граните, такие задачи можно решать по разному. Поэтому разные советы. Впрочем, совет концептуально получился один - прямо передавать нужные данные (в данном случае идентификатор пользователя). Без всяких там "сопоставлений spid". Как передавать - от контекта, до обязательного параметра в процедурах, это у всех по разному.
invm
2. Помедитируйте над тем, как вы узнаете об ошибке, если таковая случится при выполнении cmd.ExecuteNonQuery(). Также поразмышляйте зачем, наряду с catch, есть еще и finally.
О, ужас, поубивал бы всех, кто тупо гасит ошибки!!!
15 апр 19, 17:38    [21862873]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
invm
Kyvaldenius
сильно сказано "говнокоде"
Вещи названы своими именами.

1. Про using вам уже писали.
2. Помедитируйте над тем, как вы узнаете об ошибке, если таковая случится при выполнении cmd.ExecuteNonQuery(). Также поразмышляйте зачем, наряду с catch, есть еще и finally.




1. Про using вам уже писали.- то что conn.Close(); вручную а не само по средствам using?
2. не совсем понятно , ошибка попадает в блок catch записывается в логи и сообщает пользователю не понятно зачем finally или
не понимаю что в этом критичного, если можно по подробней
16 апр 19, 10:07    [21863323]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
Kyvaldenius
2. не совсем понятно , ошибка попадает в блок catch записывается в логи и сообщает пользователю не понятно зачем finally или
не понимаю что в этом критичного, если можно по подробней
invm написал про этот код:
catch (Exception ex)
{
    if (conn.State == System.Data.ConnectionState.Open)
    {
        conn.Close();
    }
}
Код кривой, ничего он не сообщает, а просто молча гасит ошибку.

Даже если у вас где то будет обработка по res = false, всё равно это только констатация факта ошибки, но инфа о ней будет потеряна.

Конечно, может, вы просто не приводили полный код, но смотрят же на тот, который есть.
16 апр 19, 10:18    [21863337]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
alexeyvg
Kyvaldenius
мне казалось что это обычный вопрос и тут сидят великие гуру которые точно делали подобное и подскажут как правильно построить данный механизм
Тут на самом деле попадаются люди, которые за несколько десятилетий много раз делали такую функциональность.
Но, во первых, исходная формулировка немного непонятна. То ли про темпоральные данные, то ли про логирование, то ли про авторизацию для коннекта к сиквелу, то ли про систему управления правами своих объектов...
Во вторых, так как есть частные вопросы, то на них даются ответы. Хотя эти вопросы (и, получается, ответы) не имеют отношения к топику. Это следствие п.1
В третьих, нету одного шаблона, высеченного в граните, такие задачи можно решать по разному. Поэтому разные советы. Впрочем, совет концептуально получился один - прямо передавать нужные данные (в данном случае идентификатор пользователя). Без всяких там "сопоставлений spid". Как передавать - от контекта, до обязательного параметра в процедурах, это у всех по разному.
invm
2. Помедитируйте над тем, как вы узнаете об ошибке, если таковая случится при выполнении cmd.ExecuteNonQuery(). Также поразмышляйте зачем, наряду с catch, есть еще и finally.
О, ужас, поубивал бы всех, кто тупо гасит ошибки!!!


согласен что по началу формулировка получилась путанной но как мне кажется если стоит вопрос о записи истории с указанием пользователя то явно с этим связанна авторизация ( о чем указал что авторизация самописная ) и ключевое это получить пользователя

"1)Создать собственные таблицы для управления авторизацией ( пользователи/ группы/ объекты) и продумать действия по работе сними ( шифрование пароля/ разделение прав/объектов)

+ все в твоих руках
- не понятно как быть с логированием данных: а именно с логином пользователя
то есть стандартные функции mssql будут показывать учетку / или имя входа в MS sql
приходится делать промежуточные таблицы где есть свои проблемы (Лог изменений данных)"
16 апр 19, 10:19    [21863340]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
alexeyvg
Kyvaldenius
2. не совсем понятно , ошибка попадает в блок catch записывается в логи и сообщает пользователю не понятно зачем finally или
не понимаю что в этом критичного, если можно по подробней
invm написал про этот код:
catch (Exception ex)
{
    if (conn.State == System.Data.ConnectionState.Open)
    {
        conn.Close();
    }
}
Код кривой, ничего он не сообщает, а просто молча гасит ошибку.

Даже если у вас где то будет обработка по res = false, всё равно это только констатация факта ошибки, но инфа о ней будет потеряна.

Конечно, может, вы просто не приводили полный код, но смотрят же на тот, который есть.



так выглядит то что использую, приводил короткую версию так как вопрос заключался не в этом

catch (Exception ex)
{
MessageBox.Show("Ошибка : (selectOne)" + "\r\n" + ex.Message.ToString(), "Ошибка Блок \"Выборка \"", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (conn.State == System.Data.ConnectionState.Open)
{
conn.Close();
}
Loggir.Log(ex, "select", User.LoginNow);
}
16 апр 19, 10:22    [21863350]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
у вас проблемы не с сервером SQL, а с непонимаением как нужно проектировать своё приложение, которое должно взаимодействовать с базой данных. почитайте что ли литературу какую-нибудь по проектированию таких приложений, позадавайте вопросы на форумах по языку C# , примеры найдите.
16 апр 19, 11:29    [21863444]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
у вас проблемы не с сервером SQL, а с непонимаением как нужно проектировать своё приложение, которое должно взаимодействовать с базой данных. почитайте что ли литературу какую-нибудь по проектированию таких приложений, позадавайте вопросы на форумах по языку C# , примеры найдите.



к чему это вообще?? о каких проблемах с сервером SQL я говорил ???
16 апр 19, 11:32    [21863451]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
у вас проблемы не с сервером SQL, а с непонимаением как нужно проектировать своё приложение, которое должно взаимодействовать с базой данных. почитайте что ли литературу какую-нибудь по проектированию таких приложений, позадавайте вопросы на форумах по языку C# , примеры найдите.




опять таки классный ответ " литературу какую-нибудь, позадавайте вопросы, примеры найдите " тоесть ответ в котором чего то полезного 0%

скажи так почитайте книгу "Шаблоны корпоративных приложений" Мартин Фаулер
позадавайте вопросы - а я на этом форму что делаю ?
16 апр 19, 11:36    [21863456]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
вы его готовите неправильно, отсюда у вас и проблемы. почитайте уже как делают современные приложения и для чего using-и используют в коде C#. что такое аутентификация/авторизация и что такое логирование в самом приложении и чем оно отличается от CDC. и тд и тп, а потом приходите, обсудим
16 апр 19, 11:38    [21863459]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
вы его готовите неправильно, отсюда у вас и проблемы. почитайте уже как делают современные приложения и для чего using-и используют в коде C#. что такое аутентификация/авторизация и что такое логирование в самом приложении и чем оно отличается от CDC. и тд и тп, а потом приходите, обсудим


мне не понятно зачем вы это пишите, тема вопроса уже оговорена

что вы имеете в виду под современными приложениями? - я говорил что пишется на win forms что не является современной "передовой технологией" или вы имеете в виду что надо использовать web приложения о чем идет тут речь

для чего using-и используют в коде C#-- вы ссылаетесь на код который я привел ? я говорил что приведен в сокращенной форме так как не по коду вопрос

Ключевое слово Using упрощает работу с объектами которые реализуют интерфейс IDisposable.
Интерфейс IDisposable содержит один метод .Dispose(), который используется для освобождения ресурсов, которые захватил объект. При использовании Using не обязательно явно вызывать .Dispose() для объекта.
using (SqlConnection conn = new SqlConnection()) {
// какая-нибудь SQL операция
}
При этом компилятор генерирует следующий код:
SqlConnection conn = new SqlConnection();
try {

} finally {
// здесь для conn вызывается .Dispose()
}
Using блоки делают код более читабельным и компактным.

аутентификация/авторизация- приме здесь это ?

Аутентификация-процедура проверки подлинности, например:
проверка подлинности пользователя путём сравнения введённого им пароля (для указанного логина) с паролем, сохранённым в базе данных пользовательских логинов;
подтверждение подлинности электронного письма путём проверки цифровой подписи письма по открытому ключу отправителя;
проверка контрольной суммы файла на соответствие сумме, заявленной автором этого файла.

Авторизация — предоставление определённому лицу или группе лиц прав на выполнение определённых действий; а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий



логирование в самом приложении-- причем тут логирование ( логирование ошибок я понимаю)

повторюсь ответ в котором чего то полезного 0%

вы даете совет не по вопросу который изначально был задан, а на те нюансы которые всплыли в процессе обсуждения и не имеют прямого отношения к вопросу
16 апр 19, 12:45    [21863550]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
вы его готовите неправильно, отсюда у вас и проблемы. почитайте уже как делают современные приложения и для чего using-и используют в коде C#. что такое аутентификация/авторизация и что такое логирование в самом приложении и чем оно отличается от CDC. и тд и тп, а потом приходите, обсудим


очень затронуло "почитайте уже как делают современные приложения" где такое почитать/книга /статья как хотябы называется
так как это очень расплывчатое понятие
16 апр 19, 12:56    [21863579]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
начните с этого:
ASP.NET Core MVC 2 с примерами на C# для профессионалов, Адам Фримен
16 апр 19, 13:26    [21863649]     Ответить | Цитировать Сообщить модератору
 Re: Варианты логирования изменения данных  [new]
Kyvaldenius
Member

Откуда:
Сообщений: 107
Konst_One
начните с этого:
ASP.NET Core MVC 2 с примерами на C# для профессионалов, Адам Фримен


большое спасибо за книгу
(но не понятно это технология для web приложений тем более уже есть asp.net core, а программа которую пишу winforms )
16 апр 19, 16:45    [21864033]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
Все форумы / Microsoft SQL Server Ответить