здраствуйте,
я пытаюсь написать logon trigger который делает запрос с таблицы где находятся данные разрешённых пользователей и если он возвращает данные то надо сделать rollback если ничего не возвращает, то session продолжает работать обычно.
Вот запрос:
select * from [resource].dbo.RP_SOURCES s
where (ORIGINAL_LOGIN() in (select CAPTION from [resource].dbo.RP_INCLUDES i where i.ID=s.DBUSER_INCLUDE_ID) or s.DBUSER_INCLUDE_ID = -1)
and (ORIGINAL_LOGIN() not in (select CAPTION from [resource].dbo.RP_EXCLUDES e where e.ID=s.DBUSER_EXCLUDE_ID) or s.DBUSER_EXCLUDE_ID= -1)
-- Check the operating user is in the include list and not in the exclude list. This user will be blocked
and (HOST_NAME() in (select CAPTION from [resource].dbo.RP_INCLUDES i where i.ID=s.MACHINE_INCLUDE_ID) or s.MACHINE_INCLUDE_ID = -1)
and (HOST_NAME() not in (select CAPTION from [resource].dbo.RP_EXCLUDES e where e.ID=s.MACHINE_EXCLUDE_ID) or s.MACHINE_EXCLUDE_ID= -1)
and (PROGRAM_NAME() in (select CAPTION from [resource].dbo.RP_INCLUDES i where i.ID=s.PROGRAM_INCLUDE_ID) or s.PROGRAM_INCLUDE_ID = -1)
and (PROGRAM_NAME() not in (select CAPTION from [resource].dbo.RP_EXCLUDES e where e.ID=s.PROGRAM_EXCLUDE_ID) or s.PROGRAM_EXCLUDE_ID= -1)
Вот trigger:
CREATE TRIGGER LogonTriggerFW
ON ALL SERVER
FOR LOGON
AS
BEGIN
IF EXISTS(select * from [resource].dbo.RP_SOURCES s
where (ORIGINAL_LOGIN() in (select CAPTION from [resource].dbo.RP_INCLUDES i where i.ID=s.DBUSER_INCLUDE_ID) or s.DBUSER_INCLUDE_ID = -1)
and (ORIGINAL_LOGIN() not in (select CAPTION from [resource].dbo.RP_EXCLUDES e where e.ID=s.DBUSER_EXCLUDE_ID) or s.DBUSER_EXCLUDE_ID= -1)
-- Check the operating user is in the include list and not in the exclude list. This user will be blocked
and (HOST_NAME() in (select CAPTION from [resource].dbo.RP_INCLUDES i where i.ID=s.MACHINE_INCLUDE_ID) or s.MACHINE_INCLUDE_ID = -1)
and (HOST_NAME() not in (select CAPTION from [resource].dbo.RP_EXCLUDES e where e.ID=s.MACHINE_EXCLUDE_ID) or s.MACHINE_EXCLUDE_ID= -1)
and (PROGRAM_NAME() in (select CAPTION from [resource].dbo.RP_INCLUDES i where i.ID=s.PROGRAM_INCLUDE_ID) or s.PROGRAM_INCLUDE_ID = -1)
and (PROGRAM_NAME() not in (select CAPTION from [resource].dbo.RP_EXCLUDES e where e.ID=s.PROGRAM_EXCLUDE_ID) or s.PROGRAM_EXCLUDE_ID= -1))
begin
rollback
end
end
Если я создаю его то тогда никто не может подключится из за тригера.
Помогите найти ошибку