powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
17 сообщений из 17, страница 1 из 1
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32708721
_ Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли сделать проверку на базе(выполнение процедуры), при каждом подключении к базе. Нужно это для ведения статистики: кто, когда с какого приложения подключился, проверка монопольности подключения если надо.
Если можно то как?
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32708742
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри вот это:

http://www.sql.ru/forum/actualthread.aspx?tid=123228
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32709229
_ Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, именно то.
Но проблема - не могу вывести уведомление пользователю и закрыть соединение. может в ASA7 надо иначе поступать?
Попитка1: из BOL Version 8.0.1
create procedure DBA.login_check()
begin
declare INVALID_LOGON exception for sqlstate '28000';
// Allow a maximum of 3 concurrent connections
if( db_property('ConnCount') > 3 ) then
signal INVALID_LOGON;
//ничего не происходит
else
call sp_login_environment;
end if;
end
go
grant execute on DBA.login_check to PUBLIC
go
set option PUBLIC.Login_procedure='DBA.login_check'

Попитка2: из Форума, средство от ASCRUS
REATE 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;
grant execute on DBA.sp_OnLogin to PUBLIC
go
set option PUBLIC.Login_procedure='DBA.sp_OnLogin'
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32709240
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут я ничего сказать про 7-ку не могу, так как не работал с ней. Нужно ее BOL рыть в сторону LOGIN_PROCEDURE и смотреть, может быть в этой версии еще не обрабатывались возникающие в ней ошибки. В 8-ке и 9-ке оба решения будут гарантированно работать.
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32709279
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если попробовать не RAISEERROR а SIGNAL? И корректно обработать процедуру логина на клиенте? Должно ж сработать! Может, нужно другой exception генерировать? С другим номером?
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32710554
_ Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На сколько я понял. RAISERROR, SIGNAL - генерируют ошыбку и выводят предупреждение для клиента.
для аса7 в BOL вычитал что
SQLSTATE = 28000 - Invalid user id or password

попытка1:
declare INVALID_LOGON exception for sqlstate value '28000';
signal INVALID_LOGON;
попытка2:
raiserror 28000 'Invalid user ID or password';

сообщение выводится, но соединение не разрывается.
примера в BOL проверки подключения для аса7 не нашел.
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32710945
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты на клиенте обрабатываешь ошибку? Что-то типа
if(!transaction->Connect()) {
WMessage("Куда ты снова лезешь?" :)");
Close();
}
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32710972
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую сам и напишу о результате
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32711270
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для теста был использован ASA7.0.4 build 3498
Создана пустая база, создана процедура из примера ASCRUS
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
alter procedure dba.sp_OnLogin()
begin
  declare @Conn_id bigint;
  declare local temporary table #Users(
    UserName varchar( 128 ) not null,
    primary key(UserName),
    ) on commit delete rows;
   // Проверяем на присутствие уже залогиненных пользователей 
  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

В ISQL выполнена команда
Код: plaintext
1.
SET OPTION PUBLIC.LOGIN_PROCEDURE = 'DBA.sp_OnLogin'

Создан юзер user1, ему дана пермиссия на выполнение процедуры dba.sp_OnLogin()

Написано маленькое приложение, контролирующее удачность коннекта и запущен сервер ASA с этой базой.

Результат: больше одного коннекта user1 сделать не может, если включить сообщения ODBC то вылезает окошко с надписью 'Такой пользователь уже подключен'


Т.е. все РАБОТАЕТ
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32711298
_ Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поставил у себя такую же процедуру
Дал пользователю на нее права, запускаю приложение.

sqlca.DBParm= /*Параметры подключения*/
Connect;
//если правильно вводить лигин и пароль то
//sqlca.SqlCode всегда = 0
///???????
IF sqlca.SqlCode <> 0 THEN
HALT CLOSE
ELSE

ENDIF
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32711325
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А через что ты к серверу лезешь? Какой интерфейс? ODBC,ADO...?
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32711326
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тест у меня работает через ODBC

Я пробовал, даже если коннектиться через Central, все равно ругается и отказывается подключаться более 1-го раза. Попробуй
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32711516
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А номер билда то какой ? Может старый и там это не поддерживалось ?
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32712106
_ Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Через ODBC.
версия ASA 7.0.1.918
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32712244
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравни с моей
MustLive
Для теста был использован ASA7.0.4 build 3498


и почувствуй разницу. Кажется, назрел version upgrade
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32713370
_ Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо mustlive и ARCRUS.
Действительно поставил версию ASA 7.0.4.3529 , и все заработало как часики.
Пора делать upgrade. :)
...
Рейтинг: 0 / 0
Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
    #32713753
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем долше живу, тем чаще убеждаюсь, что чудес не бывает
К сожалению
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Выполнение определенного скрипта(процедуры) при каждом подключении к базе ASA7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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