Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите найти ошибку в тригере  [new]
Val55
Guest
здраствуйте,
я пытаюсь написать 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


Если я создаю его то тогда никто не может подключится из за тригера.
Помогите найти ошибку

Сообщение было отредактировано: 7 фев 13, 16:35
7 фев 13, 16:29    [13892364]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в тригере  [new]
hpv
Member

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

И что возвращает вам первый запрос?
7 фев 13, 16:45    [13892553]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в тригере  [new]
Glory
Member

Откуда:
Сообщений: 104760
Val55
Если я создаю его то тогда никто не может подключится из за тригера.
Помогите найти ошибку

Т.е. нужно
- создать ваши таблицы
- заполнить их вашими же данными
- протестировать для всех ваших комбинаций ORIGINAL_LOGIN/HOST_NAME/PROGRAM_NAME
?

ORIGINAL_LOGIN() in (select CAPTION from [resource].dbo.RP_INCLUDES i where i.ID=s.DBUSER_INCLUDE_ID) or s.DBUSER_INCLUDE_ID = -1
если в [resource].dbo.RP_SOURCES s есть запись с s.DBUSER_INCLUDE_ID = -1, то это условие всегда будет TRUE
И так для всех ваших подзапросов
7 фев 13, 16:50    [13892595]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в тригере  [new]
Val55
Guest
Если я подключаюсь с У1 который у меня занесён в таблицу и ему нельзя подключаться то при запуске этого запроса я получу это:

К сообщению приложен файл. Размер - 87Kb
7 фев 13, 17:00    [13892676]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в тригере  [new]
Val55
Guest
Если я подключаюсь с U2 которого нет в таблице и ему можно подключаться то при запуске этого запроса я получу это:

К сообщению приложен файл. Размер - 90Kb
7 фев 13, 17:02    [13892700]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в тригере  [new]
Val55
Guest
После создания тригера я получаю ошибку в обоих случаях (и с U1 и с U2)

К сообщению приложен файл. Размер - 26Kb
7 фев 13, 17:05    [13892728]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в тригере  [new]
Glory
Member

Откуда:
Сообщений: 104760
что вернет запрос
select * from [resource].dbo.RP_SOURCES s 
where (s.DBUSER_INCLUDE_ID = -1)
and (s.DBUSER_EXCLUDE_ID= -1)
and (s.MACHINE_INCLUDE_ID = -1)
and (s.MACHINE_EXCLUDE_ID= -1)
and (s.PROGRAM_INCLUDE_ID = -1)
and (s.PROGRAM_EXCLUDE_ID= -1))
7 фев 13, 17:06    [13892739]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибку в тригере  [new]
Val55
Guest
Glory,

Ничего не возвращает.
7 фев 13, 17:51    [13893106]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить