Страница 1 из 2
					
				Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 24 авг 2011, 19:11
				 SergZol
				Знаю что подобные темы поднимались, но нигде толком не описан процесс выявления такого пользователя.
Проблема в следующем:
  у меня 500 активный пользователей
 15 терминальных серверов
Кто-то заходит в систему, ему сообщается что ключ не найден(проблемы разные могут быть, не в этом суть). Этот пользователь настолько туп что жмет продолжить. 
Естественно система его пускает в ДЕМОРЕЖИМ. ОН У НАС ТУПОЙ и выходить из демо режима не хочет. В результете остальные получают мессагу, что нельзя работать пока тупой не выйдет из системы.
Мне приходится всех отстреливать от системы, чтоб дальше можно было работать.
Теперь простой вопрос:
 Система как-то определяет присутствие ДЕМОРЕЖИМА. Т.к. пользователь на ключе не зарегился, то информация о демо режиме где-то должна хранится в базе.
 Очень прошу поделитесь инфой где или по каким признакам можно определить деморежим.
			 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 24 авг 2011, 20:08
				 Polimer
				В последнем атлантисе вроде решены эти проблемы:
Код: Выделить всё
* ПРОБЛЕМА В ПИР: 102.102440
* ПЕРВОЕ РЕШЕНИЕ: NEW
* КРАТКОЕ ОПИСАНИЕ: Дать возможность запрета входа пользователей в демо-режим
* ПРОЕКТ: Консоль администратора
* ДЕТАЛИЗАЦИЯ: Общие проблемы по модулю
----- СУТЬ ПРЕДЛОЖЕНИЯ -----
Дать возможность запрета входа пользователей в демо-режим в случае
невозможности обратиться к серверу аппаратного ключа.
# КАК ИЗМЕНЕНО: Доработано. Сделана настройка "Работа в демо режиме" в Карточке
пользователя консоли администратора (по умолчанию "Разрешена")
# ИНСТРУКЦИЯ ПО НАСТРОЙКЕ: В интерфейсе "Карточка пользователя", вызываемом из 
Консоли администратора
комплекса Support, для пользователей, которым необходимо запретить работу в
демо-режиме, установить значение поля "Работа в демо-режиме" в значение 
"Запрещена".
№18
* ПРОБЛЕМА В ПИР: 102.106977
* ПЕРВОЕ РЕШЕНИЕ: NEW
* КРАТКОЕ ОПИСАНИЕ: Эпизодически теряется аппаратный ключ
* ПРОЕКТ: Безопасность системы
* ДЕТАЛИЗАЦИЯ: Серверы аппаратных ключей и их мониторы
----- ПРОЯВЛЕНИЕ ПРОБЛЕМЫ -----
В случае невозможности записать запрос в каталог обмена
с сервером аппаратного ключа атлантис-приложение получает
сообщение: "Не удалось обратиться к серверу аппаратного ключа.
Программа будет работать в режиме демо-версии" (1).
После этого остальные клиенты, обращающиеся к ключу,
получают сообщения: "Запрещено одновременное нахождение в БД
пользователей, работающих в штатном режиме и пользователей,
работающих в Demo-режиме".
Далее работа невозможна до момента выхода из системы клиента,
получившего сообщение (1).
# КАК ИЗМЕНЕНО: Исправлено.
В описанном случае пользователь получает возможность либо повторить
попытку обращения, либо отказаться от захвата/освобождения лицензии.
Переход в демо-режим не происходит.
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 10:31
				 SergZol
				Polimer писал(а):В последнем атлантисе вроде решены эти проблемы:
Это еще тестить нада, а как сейчас определить? Система же как-то определяет присутствие деморежима.
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 10:46
				 m0p3e
				Система определяет по значению переменной DemoMode : boolean; А вот как получает значение переменная вопрос, на который можно ответить имея доступ в свежему атлантису.
При наличии демо-пользователя никакого подозрительного семафора не появляется?
			 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 10:57
				 SergZol
				m0p3e писал(а):Система определяет по значению переменной DemoMode : boolean; А вот как получает значение переменная вопрос, на который можно ответить имея доступ в свежему атлантису.
При наличии демо-пользователя никакого подозрительного семафора не появляется?
Семафора не заметил.
DemoMode нашел, это не переменная, а функция. Сидит в 
atlcore_.dll может у кого есть исходник глянуть?
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 12:09
				 m0p3e
				SergZol писал(а):m0p3e писал(а):DemoMode нашел, это не переменная, а функция. Сидит в atlcore_.dll может у кого есть исходник глянуть?
 
В кишках атлантиса (третьего):
Код: Выделить всё
  DemoMode: Boolean            = FALSE;
...............
  RegisterVariable('DemoMode', @RedFox.DemoMode, ftBoolean);
  RegisterFunction('Lic_DemoMode', @RedFox.Lic_DemoMode, ftBoolean, '');
В 
заголовках пятого:
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 12:37
				 SergZol
				m0p3e писал(а):SergZol писал(а):m0p3e писал(а):DemoMode нашел, это не переменная, а функция. Сидит в atlcore_.dll может у кого есть исходник глянуть?
 
В кишках атлантиса (третьего):
 
ага это я тоже нашел, а вот чего оно делает. Думал запросик какойто выполняется. 
проверил, нет, как-же оно определяет?
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 13:13
				 Polimer
				SergZol писал(а): проверил, нет, как-же оно определяет?
Может быть так?
Код: Выделить всё
В случае невозможности записать запрос в каталог обмена
с сервером аппаратного ключа атлантис-приложение получает
сообщение: "Не удалось обратиться к серверу аппаратного ключа.
Программа будет работать в режиме демо-версии" (1).
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 13:20
				 m0p3e
				Должен быть какой-то признак. В случае ORACLE, PSQL никакой приблуды типа NAP нет. Значит информация где-то общедоступна. Семафор отпадает (а жаль - самый приятный вариант). Приходят на ум еще два: 
1. Сервер аппаратного ключа.
2. Флажок в базе.
Первый можно проверить. У клиента изменить HardwareKey.SharedPath на левый и войти в базу. Почуствуют ли его остальные?
Со вторым сложнее...
Вообще очень интересное поле в x$activeusers: Reserved.
			 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 13:39
				 SergZol
				m0p3e писал(а):Должен быть какой-то признак. В случае ORACLE, PSQL никакой приблуды типа NAP нет. Значит информация где-то общедоступна. Семафор отпадает (а жаль - самый приятный вариант). Приходят на ум еще два: 
1. Сервер аппаратного ключа.
2. Флажок в базе.
Первый можно проверить. У клиента изменить HardwareKey.SharedPath на левый и войти в базу. Почуствуют ли его остальные?
Со вторым сложнее...
Сервер аппаратного ключа отпадает. Чел зашел без обращения к ключу т.е. он до него и не дошел. А вот остальные пользователи прочуяли т.к. им выдает сообщение что кто-то вошел в демо режиме.
Флажек в базе - именно, но если я просто вызываю функцию DemoMode обращения к базе не происходит.
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 13:41
				 Polimer
				m0p3e писал(а):В случае ORACLE, PSQL никакой приблуды типа NAP нет. 
А при чем здесь нап? Каталог обмена есть у всех.
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 13:45
				 m0p3e
				Polimer писал(а):m0p3e писал(а):В случае ORACLE, PSQL никакой приблуды типа NAP нет. 
А при чем здесь нап? Каталог обмена есть у всех.
 
Например семафоры в MSSQL реализованы именно через NAP. В PSQL через X$Semafors. Как в ORACLE - не знаю, но в таблице пусто.
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 13:48
				 m0p3e
				SergZol писал(а):m0p3e писал(а):
Флажек в базе - именно, но если я просто вызываю функцию DemoMode обращения к базе не происходит.
 
И не будет происходить, т.к. значение DemoMode (все-таки это внутренняя переменная, функция просто возвращает ее значение) определяется в момент входа в базу и не пересчитывается, насколько я понимаю. Сотрудники кто вошел в БД, до пользователя вошедшего как демо, ощущают его присутствие на себе? 
С такой проблемой лично не сталкивался. Поэтому и спрашиваю. 

 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 14:14
				 SergZol
				m0p3e писал(а):
Сотрудники кто вошел в БД, до пользователя вошедшего как демо, ощущают его присутствие на себе? 
С такой проблемой лично не сталкивался. Поэтому и спрашиваю. 

 
В момент перехода на другой модуль т.е. при попытке сменить занятую лицензию.
Человек вошел в систему запустиль модуль договора - естественно ему выдалась лицензия договоров, вошел демо, идет в договора ему говорят только ДЕМО и он соглашается. 
пользователь ДЕМО работать не может т.к. число записей уже больше чем допускается в демо режиме, но и выходить из системы не спешит. Тот человек который зашел в договора продолжает работать ему уже выделена лицензия, но если он хочет перейти в другой модуль, например склад система освобождает лицензию договора и пытается захватить склад, но так-как в системе присутствует ДЕМО, то выдается сообщение о невозможности продолжать работу. Теперь пользователь уже не может ни вернутся в договора ни продолжать работу в модуле склад. Повторный вход в систему тоже ничего не даст пока ДЕМО не выйдет из системы.
 
			
					
				Re: Как узнать пользователя вошедшего в ДЕМО-режиме
				Добавлено: 25 авг 2011, 14:23
				 SergZol
				промониторил все запросы при отсутствии ключа и при его наличии.
Обнаружил интересную табличку EVENTS.
при входе без ключа идет очень много пар запросов
 "SELECT SYS#UL FROM GAL.""EVENTS"" WHERE ROWID=:P1 AND SYS#UL=:P2 FOR UPDATE NOWAIT"
 "DELETE FROM GAL.""EVENTS"" WHERE ROWID=:P1"
P1 - у запросов совпадает, P2-0.
Этих запросов нет при входе с ключом.
еще одно различие заполнение этой таблицы
без ключа:
"INSERT INTO GAL.""EVENTS"" (""ATL_NREC"",""ATL_LASTDATE"",""ATL_LASTTIME"",""ATL_LASTUSER"",""ATL_ORIGINOFFICE"",""ATL_OWNER"",""TYPEEVENT"",""EVENT"") VALUES(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8)"
с ключом:
"INSERT INTO GAL.""EVENTS"" (""ATL_NREC"",""TYPEEVENT"",""EVENT"") VALUES(:P1,:P2,:P3)"
Дальше буду еще ковырять.
PS
 у ТП спросил - пока молчат.