Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MS SQL - тригер / 4 сообщений из 4, страница 1 из 1
14.04.2019, 19:51
    #39801110
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL - тригер
Народ,
у кого есть идеи - как к существующим тригерам на события INSERT, UPDATE, DELETE "привязать" значение ID пользователя, который залогинился в приложении чтобы при сработке этих событий можно было в теле тригера вставить это значение пользовается - что-то типа @ID_User.
Мы же не можем передать его в качестве параметра... Может при логине какой-то системной переменной, которую знает MS SQL для данной сессии присвоить это значение и использовать его?
Всем спасибо
...
Рейтинг: 0 / 0
14.04.2019, 20:30
    #39801125
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL - тригер
После подключения к БД создай временную таблицу #user и используй ее в триггере. Если таблицы нет, то в триггере ROLLBACK
...
Рейтинг: 0 / 0
15.04.2019, 08:02
    #39801221
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL - тригер
Valerii,

Для этого должна быть собственная система авторизации.

Т.е. у вас должна быть таблица с пользователями и паролями (хеш)
И таблица фиксирующая вход.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE [dbo].[monitor](
	[ID_MONITOR] [int] IDENTITY(1,1) NOT NULL,
	[ID_USER] [int] NULL,
	[hostname] [varchar](128) NULL,
	[login_time] [datetime] NULL,
	[exit_time] [datetime] NULL,
	[isfail] [smallint] NOT NULL,
	[ismark] [smallint] NOT NULL,
	[app] [varchar](128) NULL,
	[ver] [varchar](20) NULL,
	[spid] [smallint] NULL,
 CONSTRAINT [PK_MONITOR] PRIMARY KEY CLUSTERED 
(
	[ID_MONITOR] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO



Проверяет вход
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
-- Проверка, и если верно, выдача всех реквизитов 
ALTER PROCEDURE [dbo].[knaSvcAccess]
	@UserID		int,               
	@Pass		varchar(20),
	@Ver		varchar(20),
	@AppCaption	varchar(128)
AS
BEGIN
	DECLARE 
		@LTimes		datetime,
		@spid		smallint,	
		@User		varchar(30),
		@PasTmp		varchar(20)
	
	if exists(SELECT * FROM svcUsers WHERE UserID=@UserID and Pass=@Pass)
	-- Значит можно входить
	begin		
		--Регистрируем в мониторе
		--Время входа
		SELECT  @LTimes=sysproc.login_time
			FROM master..sysprocesses sysproc
			WHERE sysproc.spid=@@spid

		INSERT INTO dbo.Monitor(id_user,hostname,app,ver,spid,login_time) 
			values (@UserID, host_name(),@AppCaption,@VER,@@SPID,@LTimes)
		SELECT SCOPE_IDENTITY() AS id_Monitor,
			RoleID,UserID, txt 
		FROM svcUsers WHERE UserID=@UserID
	end 
	else
		return -1
END


После этого, мы всегда по спиду можем вычислить юзера.
Для логирования у меня используется ХП

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
ALTER PROCEDURE [dbo].[aiLog]
	@ACTION		int,
	@TXT		varchar(1024)=null,
	@IDREC		int=NULL,
	@IDRECOLD	int=NULL
AS
BEGIN
	SET NOCOUNT ON;
	declare 
		@ID_MONITOR	int,
		@LTimes		datetime


	select @LTimes=login_time from sys.sysprocesses  where spid = @@spid 
	
	select @ID_MONITOR=ID_MONITOR from dbo.monitor where spid=@@SPID and ismark=0 and login_time = @LTimes
	if @ID_MONITOR is null
	begin
		INSERT INTO dbo.monitor(hostname,login_time,app,spid) 
			values (host_name(),getdate(),app_name(),@@SPID)
		set @ID_MONITOR=SCOPE_IDENTITY()
	end 	
--это не важно в данном случае
	INSERT INTO dbo.logdb 
		(id_monitor,id_action,txt,dat,idrec,idrecold)
	VALUES (@ID_MONITOR,@ACTION,@TXT,getdate(),@IDREC,@IDRECOLD)
--	
END
...
Рейтинг: 0 / 0
15.04.2019, 17:26
    #39801687
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL - тригер
Зависит от того, что именно Вы вкладываете в понятие "привязать". Что именно Вы с этим UserId собираетесь делать-то?

Куда-то записать? А зачем для этого триггер? Нельзя напрямую из FoxPro это сделать?

Самый простой вариант - это во все Ваши таблицы добавить поле, вроде ModifiedBy и просто записывать в него идентификатор пользователя, который редактирует запись. В FoxPro записывать.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MS SQL - тригер / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]