powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MS SQL - тригер
4 сообщений из 4, страница 1 из 1
MS SQL - тригер
    #39801110
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ,
у кого есть идеи - как к существующим тригерам на события INSERT, UPDATE, DELETE "привязать" значение ID пользователя, который залогинился в приложении чтобы при сработке этих событий можно было в теле тригера вставить это значение пользовается - что-то типа @ID_User.
Мы же не можем передать его в качестве параметра... Может при логине какой-то системной переменной, которую знает MS SQL для данной сессии присвоить это значение и использовать его?
Всем спасибо
...
Рейтинг: 0 / 0
MS SQL - тригер
    #39801125
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После подключения к БД создай временную таблицу #user и используй ее в триггере. Если таблицы нет, то в триггере ROLLBACK
...
Рейтинг: 0 / 0
MS SQL - тригер
    #39801221
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
MS SQL - тригер
    #39801687
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависит от того, что именно Вы вкладываете в понятие "привязать". Что именно Вы с этим UserId собираетесь делать-то?

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

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


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