powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / еще один вопрос по АСА
11 сообщений из 11, страница 1 из 1
еще один вопрос по АСА
    #32698616
Юзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АСА 8.0 !
Как зделать так, что бы к базе не мог законектится больше одного Юзверя на одинаковом логине и пароле?
А то их по умолчанию десятки могут забежать в базу.
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32698876
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, например, триггер повесить на user login, и отфутболивать, если юзер с таким именем уже залогинился
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32698889
Юзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 mustlive, а можно поподробне! что такое user login? системная таблица?
я подумывал Event написать на вхождение нового юзера и проеврить его на уже подключенного, но не могу найти системной таблицы подключения(если она вообще есть)
Либо можно тригер конечно написать, но опять же на какую таблицу его вешать?
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32698985
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На EVENT вешать это бесполезно, так как события выполняются в контексте собственной сессии сервера и максимум что мы получим - это сообщение о возбужденной ошибке в окне лога сервера. Данную обработку нужно повесить на LOGIN_PROCEDURE:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE PROCEDURE sp_OnLogin ()
BEGIN
   // Проверяем на присутствие уже залогиненных пользователей 
  IF ( SELECT Count(*) 
        FROM sa_Conn_Info()
        WHERE DBNumber = Connection_Property('DBNumber') AND
              UserID = User_Name() ) >  1 
  THEN
    RAISERROR  20000  'Такой пользователь уже подключен';
    RETURN;
  END IF;

   // Вызываем стандартную инициализацию сервера 
  CALL sp_login_environment ();

   // Инициализируем глобальные переменные и еще что нибудь делаем 
   // ... 
END;

 // Устанавливаем процедуру на обработку каждого подключения 
SET OPTION PUBLIC.LOGIN_PROCEDURE = 'DBA.sp_OnLogin';
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32699857
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, все равно, ход мысли был правильный. Все равно на клиенте надо корректно обрабатывать exception

Удивился, что event (конечно, event, а не триггер, ошибочка вышла) не возвращает ничего клиенту. Чего только не узнаешь :)
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32700001
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mustliveУдивился, что event (конечно, event, а не триггер, ошибочка вышла) не возвращает ничего клиенту. Чего только не узнаешь :)
EVENT, без разницы как вызванный - автоматически или ручками, фактически организует еще одну приватную сессию, в которую подключается и начинает работать уже отдельно и параллейно от вызвавшего его процесса. Поэтому он и не может ничего передать клиенту - это уже разные потоки. Зато как удобно разруливать параллейную обработку чего нибудь тяжелого :)
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32700011
Юзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то не получается ничего.
Пытаюсь процедуру создать, а компилятор ругается на присутствие ошибки в строке From !
Даже простейший селект из процедуры пишу, и что все равно артачится

select count(*) FROM sa_conn_info()
АСА 8.0.
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32700056
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри - пример для ASA 9. В 8-ке не поддерживается SELECT из хранимых процедур. Вместо этого запроса организуйте цикл LOOP WHILE и используйте функцию NEXT_CONNECTION для перебора всех подключений. Или как второй вариант - организуйте на вызов этой процедуры курсор и пройдитесь по нему.
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32700116
Юзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUS !
Не совсем понятно с первым вариантом через цикл? Допустим я переберу все номера коннектов подключенных к базе? В АСА нет же функции Next_Connect_User?
Просто, что даст перебор номеров? Или я не так что то понял?
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32700153
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE PROCEDURE sp_OnLogin ()
BEGIN
  DECLARE @Conn_id bigint;

  DECLARE LOCAL TEMPORARY TABLE #Users (
    UserName varchar( 128 ) NOT NULL PRIMARY KEY
  );

   // Проверяем на присутствие уже залогиненных пользователей 
  SET @Conn_id = NEXT_CONNECTION(NULL);
  WHILE @Conn_id IS NOT NULL LOOP
    INSERT INTO #Users(UserName)
    VALUES(Connection_Property('UserId', @Conn_id));

    SET @Conn_id = NEXT_CONNECTION(@Conn_id);
  END LOOP;

   // Вызываем стандартную инициализацию сервера 
  CALL sp_login_environment ();

   // Инициализируем глобальные переменные и еще что нибудь делаем 
   // ... 
EXCEPTION
  WHEN OTHERS THEN
    RAISERROR  20000  'Такой пользователь уже подключен';
END;
По идее должно работать, разве что тип BIGINT я не помню в 8-ке уже поддерживался или нет.

P.S. А еще можно почитать BOL, там все таки очень подробно расписаны все функции, в том числе и NEXT_CONNECTION(), на которую я дал ссылку.
...
Рейтинг: 0 / 0
еще один вопрос по АСА
    #32700260
Юзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUS !! Большое спасибо! Все заработало!
Просто было трудно понять что делает функция Connection_Property, поэтому я ее просмотрел в BLOBе. Оказывается она универсальна для получения информации о подключени.
Еще раз спасибо!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / еще один вопрос по АСА
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]