Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / еще один вопрос по АСА / 11 сообщений из 11, страница 1 из 1
16.09.2004, 18:41
    #32698616
Юзя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще один вопрос по АСА
АСА 8.0 !
Как зделать так, что бы к базе не мог законектится больше одного Юзверя на одинаковом логине и пароле?
А то их по умолчанию десятки могут забежать в базу.
...
Рейтинг: 0 / 0
17.09.2004, 00:25
    #32698876
mustlive
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще один вопрос по АСА
Можно, например, триггер повесить на user login, и отфутболивать, если юзер с таким именем уже залогинился
...
Рейтинг: 0 / 0
17.09.2004, 01:51
    #32698889
Юзя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще один вопрос по АСА
2 mustlive, а можно поподробне! что такое user login? системная таблица?
я подумывал Event написать на вхождение нового юзера и проеврить его на уже подключенного, но не могу найти системной таблицы подключения(если она вообще есть)
Либо можно тригер конечно написать, но опять же на какую таблицу его вешать?
...
Рейтинг: 0 / 0
17.09.2004, 08:18
    #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
17.09.2004, 13:51
    #32699857
mustlive
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще один вопрос по АСА
Ну, все равно, ход мысли был правильный. Все равно на клиенте надо корректно обрабатывать exception

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

select count(*) FROM sa_conn_info()
АСА 8.0.
...
Рейтинг: 0 / 0
17.09.2004, 15:21
    #32700056
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще один вопрос по АСА
Сорри - пример для ASA 9. В 8-ке не поддерживается SELECT из хранимых процедур. Вместо этого запроса организуйте цикл LOOP WHILE и используйте функцию NEXT_CONNECTION для перебора всех подключений. Или как второй вариант - организуйте на вызов этой процедуры курсор и пройдитесь по нему.
...
Рейтинг: 0 / 0
17.09.2004, 15:46
    #32700116
Юзя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще один вопрос по АСА
ASCRUS !
Не совсем понятно с первым вариантом через цикл? Допустим я переберу все номера коннектов подключенных к базе? В АСА нет же функции Next_Connect_User?
Просто, что даст перебор номеров? Или я не так что то понял?
...
Рейтинг: 0 / 0
17.09.2004, 16:04
    #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
17.09.2004, 16:46
    #32700260
Юзя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще один вопрос по АСА
ASCRUS !! Большое спасибо! Все заработало!
Просто было трудно понять что делает функция Connection_Property, поэтому я ее просмотрел в BLOBе. Оказывается она универсальна для получения информации о подключени.
Еще раз спасибо!
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / еще один вопрос по АСА / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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