Login в transaction log MS SQL 2008

Лукьчнчук Анатолий
Дата: 24.01.2013 11:04:21
Добрый день!
Правильно ли я понимаю, что в transaction log MS SQL 2008 в конфигурации по умолчанию не вписывается логин/учетная зпапись пользователей, которые изменили (добавили/удалили) записи в таблицах БД?
Гость333
Дата: 24.01.2013 11:26:10
Лукьчнчук Анатолий,

Правильно понимаете. Более того, не только "в конфигурации по умолчанию", но и в любой другой конфигурации. Transaction log совсем не для этого предназначен.
komrad
Дата: 24.01.2013 11:32:32
Гость333
Лукьчнчук Анатолий,

Правильно понимаете. Более того, не только "в конфигурации по умолчанию", но и в любой другой конфигурации. Transaction log совсем не для этого предназначен.

но там есть spid-ы
и, при наличии среза сессий на нужный период времени, можно узнать кто это сделал
sphinx_mv
Дата: 24.01.2013 12:38:14
komrad
Гость333
Лукьчнчук Анатолий,

Правильно понимаете. Более того, не только "в конфигурации по умолчанию", но и в любой другой конфигурации. Transaction log совсем не для этого предназначен.

но там есть spid-ы
и, при наличии среза сессий на нужный период времени, можно узнать кто это сделал
А это ничего, что за время между двумя соседними "срезами сессий" пользователь, закрепленный за spid, может поменяться несколько раз?

И не забываем, что ОЧЕНЬ многие программные системы используют подключение к БД через "общий" логин, когда забота о проверке пользователей и их прав перекладывается на приложение (сервере приложений, etc).
Лукьчнчук Анатолий
Дата: 24.01.2013 12:51:58
sphinx_mv
komrad
пропущено...

но там есть spid-ы
и, при наличии среза сессий на нужный период времени, можно узнать кто это сделал
А это ничего, что за время между двумя соседними "срезами сессий" пользователь, закрепленный за spid, может поменяться несколько раз?

И не забываем, что ОЧЕНЬ многие программные системы используют подключение к БД через "общий" логин, когда забота о проверке пользователей и их прав перекладывается на приложение (сервере приложений, etc).

Если не сложно приведите примеры каким образом пользователь, закрепленный за spid, может поменяться? Или под срезами сессий вы подразумеваете запись сессий периодически, например по расписанию? И если вести аудит подключений к MS SQL то пользователь незаметно уже не поменяется?
Гость333
Дата: 24.01.2013 13:07:51
Лукьчнчук Анатолий
И если вести аудит подключений к MS SQL то пользователь незаметно уже не поменяется?

Ну вообще да. Но какая-то очень уж сложная схема получается. Традиционно логирование действий, если оно нужно, встраивают в логику приложения.
sphinx_mv
Дата: 24.01.2013 13:14:49
Лукьчнчук Анатолий
Если не сложно приведите примеры каким образом пользователь, закрепленный за spid, может поменяться?
Логон/логофф... Достаточно? :)
komrad
Дата: 24.01.2013 13:57:06
Гость333
Лукьчнчук Анатолий
И если вести аудит подключений к MS SQL то пользователь незаметно уже не поменяется?

Ну вообще да. Но какая-то очень уж сложная схема получается. Традиционно логирование действий, если оно нужно, встраивают в логику приложения.

да в общем не очень то и сложная - добавить логин-триггер и таблицу для хранения
правда на некоторых системах с большим logons/second это решение не подойдет

пример триггера:



use DB
go
create table dbo.track_logins (i int identity, dt datetime, spid int null, [login] varchar(50), host varchar(100) null, app varchar(100) null)
go

use master 
go
create trigger [track_logins]
on all server
with execute as 'sa'
for logon
as
BEGIN
declare @eventdata xml
set @eventdata = EventData()

	insert 
	into DB.dbo.track_logins(dt,spid,[login],host,app)
	values
		(GETDATE(),
		@eventdata.value('(/EVENT_INSTANCE/SPID)[1]', 'int'),
		@eventdata.value('(/EVENT_INSTANCE/LoginName)[1]', 'sysname'),
		@eventdata.value('(/EVENT_INSTANCE/ClientHost)[1]', 'sysname'),     
		App_Name())
	
END	
go

/*
DISABLE TRIGGER [track_logins] ON ALL SERVER
GO
ENABLE TRIGGER [track_logins] ON ALL SERVER
GO
*/
Гость333
Дата: 24.01.2013 14:04:58
komrad
да в общем не очень то и сложная - добавить логин-триггер и таблицу для хранения

Логировать подключения пользователей — не проблема. Я имел в виду, что сложно работать с transaction log для извлечения информации, какой пользователь где нагадил. Хотя, получается, что возможно при наличии информации по logon'ам.
Лукьчнчук Анатолий
Дата: 24.01.2013 16:24:28
Спасибо. Очень помогли разобраться. Теперь всё вижу.