Страница 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
у ТП спросил - пока молчат.