17.10.2008, 12:37 | #1 |
Участник
|
Подскажите пожалуйста, возможно ли сделать так чтобы определенный пользователь мог открывать navision даже тогда,
когда все сессии подключения заняты? Насколько я понимаю надо написать код в первом codeunit'е который будет отключать последнюю сессию, если она занята. |
|
17.10.2008, 13:18 | #2 |
Участник
|
Так не получится, т.к. чтобы запустился 1-й кодеюнит, должна уже быть свободная сессия. Мне кажется, нужно попробовать использовать хранимую процедуру [$ndo$dbproperty], о которой написано в Application Designer's Guide.
|
|
17.10.2008, 13:48 | #3 |
Участник
|
Цитата:
выполнить kill @НомерСессии через ADO Connection ( trusted connection, вариант с аутенфикацией БД даже не рассматриваю с силу уязвимости). Возможно проще в первом кодеюните проверять лимит сессий и давай коннектиться последней сессии только если юзер VIP, либо если VIP уже работает с базой. |
|
17.10.2008, 14:12 | #4 |
Участник
|
Цитата:
Есть аутентификация БД и виндовая, с правами сисадмина. Насчет kill @НомерСессии все понятно, а вот с ADO Connection не совсем понятно. Как я понял при подключении к БД ВИП'а в SQL будет убиваться одна сессия, например с помощью хранимой процедуры. Только каким образом будет выполняться хранимая процедура, именно когда подключается ВИП пользователь? |
|
17.10.2008, 14:26 | #5 |
Участник
|
Цитата:
Сообщение от lobster
Да у нас SQL server, и у ВИП'а права сисадмина.
Есть аутентификация БД и виндовая, с правами сисадмина. Насчет kill @НомерСессии все понятно, а вот с ADO Connection не совсем понятно. Как я понял при подключении к БД ВИП'а в SQL будет убиваться одна сессия, например с помощью хранимой процедуры. С помощью неё админ может зайти даже в "подвисшую" или "перегруженную" БД и с помощью kill @НомерСессии убить какую-нибудь сессию. Цитата:
Только каким образом будет выполняться хранимая процедура, именно когда подключается ВИП пользователь?
|
|
17.10.2008, 14:50 | #6 |
Участник
|
Можно использовать Stored Procedure [sp_$ndo$loginproc]
она запускается при логине к базе. В ней делать все проверки и вызывать закрытие сессии |
|
17.10.2008, 14:51 | #7 |
Участник
|
на данный момент я так и делаю, если все сесcии заняты, то убиваю сессию "в ручную" и подключаюсь к navision.
Но мне надо сделать так, чтобы например ген. директор. фирмы мог подключиться в любой момент когда ему надо и при этом не звонить мне чтобы я убивал сессию вручную. |
|
17.10.2008, 15:33 | #8 |
Участник
|
Цитата:
|
|
17.10.2008, 15:40 | #9 |
Участник
|
Цитата:
Где она хранится? У нас SQL server 2005. Может одна из этих: dbo.$ndo$getdbts; sys.$xp_logininfo |
|
17.10.2008, 15:47 | #10 |
Участник
|
Цитата:
Сообщение от Fordewind
Где-то на форуме обсуждалось уже. Или в коммерческих предложениях. Там предпологалось ранжировать пользователей. Т.е. для обычных людей досутпно скажем 50 сессий, для привелигерованых на 10 больше, а для самых крутых еще 2. В итоге обычный человек не может подключиться 51-м. Естественно это все проверяется в 1-м кодеюните при подключении. И так вырубать никого не надо.
Или примерно какой код ранжирует пользователей, в каком триггере 1-го codeunit'а? Подскажите пожалуйста. |
|
17.10.2008, 16:19 | #11 |
Участник
|
в коммерческих предложениях: Управление пользовательскими сессиями
Включено: - группировка пользователей, назначение кол-ва возможных подключений на группу - приоритезация внутри групп - "включение" ограничений только при "большой" загрузке - ограничение запуска нескольких сессий - работает на любой версии начиная с 3.60 (как Native, так и SQL) |
|
17.10.2008, 16:47 | #12 |
Участник
|
Цитата:
У меня до этого эта процедура выводила сообщение. Код: use ИмяБазы go CREATE PROCEDURE [sp_$ndo$loginproc] @appname VARCHAR(64) = NULL, @appversion VARCHAR(16) = NULL AS BEGIN IF SUSER_SNAME() IN ('Домен\Генеральный', 'Домен\ГлавныйБухгалтер') BEGIN if КоличествоОткрытыхСессий=30 begin ПроцедураУдаленияПервойСессии end end end GO GRANT EXECUTE ON [sp_$ndo$loginproc] TO public GO |
|
17.10.2008, 17:28 | #13 |
Участник
|
Да, забыл совсем - по предыдущему моему посту:
- "выброс" из навижн при достижении определенного времени простоя (например - ушел на обед/курить, а коллегам не отдал подключение) - "выброс" из навижн наименее приоритетного пользователя в условиях включенного квотирования и нехватки лицензий на группу (например - для отдела продаж задан лимит 5 подключений, всего работает 6 человек - 5 менеджеров с приоритетом 2, начальник с приоритетом 3. При дефиците лицензий при входе начальника будет выброшен менеджер с максимальным периодом простоя). Включение квотирование осуществляется при близком к максимальному количеству подключений (настраиваемый параметр) |
|