Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

25.03.2019 16:57, Гаджимурадов Рустам пишет:
> До ресурсов есть еще вопрос безопасности.

в чем трабл?

Posted via ActualForum NNTP Server 1.5

25 мар 19, 16:58    [21842982]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9631
Гаджимурадов Рустам,

на мой взгляд ресурсы здесь будет узким местом. Стартовать новое соединение на каждую транзакцию дорого, особенно если транзакции стартуют часто и короткие, в 4.0 будет дешевле за счёт пула внешних соединений.
25 мар 19, 17:02    [21842984]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

потестил.
по времени получается порядка 200мс.
в общем-то, лаг допустимый.

засада пока видится одна - ON EXTERNAL DATA SOURCE
невозможно НЕ указывать имя сервера.
соответственно получаем обломингу при ресторе в другое место.

кроме того, алиасы не канают, нужен ПОЛНЫЙ путь к базе.
с точки зрения безопасности это нехорошо.

но если сощурить левый глаз...

Posted via ActualForum NNTP Server 1.5

25 мар 19, 17:43    [21843025]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

касаемо необходимости указывать имя сервера, это я погорячился.

Posted via ActualForum NNTP Server 1.5

25 мар 19, 17:46    [21843028]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9631
Мимопроходящий,

ну и вообще параметры внешнего соединения можно хранить в специальной таблице констант. Надо будет поменяешь в отресторенной БД
25 мар 19, 17:53    [21843035]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47675

Мимопроходящий
пытаюсь соорудить human-readable сообщение о лок-конфликте.
что мол запись блокирует ВАСЯ ПУПКИН, а не транзакция № 2-12-85-06

Тогда триггер-то тебе назачем? При получении ошибки дёргай SP, которая вернёт имя
пользователя по номеру его транзакции из таблиц мониторинга. Всё, телемаркет.

Posted via ActualForum NNTP Server 1.5

25 мар 19, 17:56    [21843039]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9631
Dimitry Sibiryakov,

не прокатит из-за прав на MON$. В 3.0 SECURITY DEFINER ещё нет
25 мар 19, 17:59    [21843044]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9631
Мимопроходящий,

RDB$GET_CONTEXT('SYSTEM', 'DB_NAME') не канает?
Ну и имя сервера localhost
25 мар 19, 18:09    [21843051]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47675

Симонов Денис
не прокатит из-за прав на MON$. В 3.0 SECURITY DEFINER ещё нет

Зато есть ES, способный исполняться от имени заданного пользователя, включая SYSDBA.
Несекурненько, но это уже другой вопрос.

Posted via ActualForum NNTP Server 1.5

25 мар 19, 18:23    [21843058]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

25.03.2019 18:09, Симонов Денис пишет:
> RDB$GET_CONTEXT('SYSTEM', 'DB_NAME') не канает?

ух ты!
круто.
слона то я и не заметил...

> Ну и имя сервера localhost

не, имя сервера оказалось не нужно. это я погорячился.

СПАСИБО за наводку!

Posted via ActualForum NNTP Server 1.5

25 мар 19, 18:23    [21843059]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

блин!
дак ON EXTERNAL DATA SOURCE вообще не нужен оказался!

спасибо DS!

Posted via ActualForum NNTP Server 1.5

25 мар 19, 18:58    [21843078]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60007
Мимопроходящий> в чем трабл?

Ну пароль же торчать будет, да ещё RWшный.
Впрочем, это тоже можно решать подпрыгиваниями.

Мимопроходящий> по времени получается порядка 200мс.
Мимопроходящий> в общем-то, лаг допустимый.

И шо, это реально лучше обычного варианта с флагом или внешней таблицы?

Posted via ActualForum NNTP Server 1.5

25 мар 19, 20:10    [21843136]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

погонял тесты при сравнительно нагруженной таблице.
просадка производительности всё же заметна.
вариант с EXECUTE STATEMENT ... WITH AUTONOMOUS TRANSACTION AS USER ...
на данный момент развития исторического материализма придётся исключить.
у-вы.

Posted via ActualForum NNTP Server 1.5

26 мар 19, 18:39    [21844162]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47675

Мимопроходящий
просадка производительности всё же заметна.

У тебя настолько часты конфликты или ты таки засунул эту конструкцию в триггер?

Posted via ActualForum NNTP Server 1.5

26 мар 19, 18:41    [21844165]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 580
Dimitry Sibiryakov
Мимопроходящий
просадка производительности всё же заметна.

У тебя настолько часты конфликты или ты таки засунул эту конструкцию в триггер?


Похоже, коту стало совсем нехрен делать
26 мар 19, 19:23    [21844198]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60007
СПМ> Похоже, коту стало совсем нехрен делать

И студеною зимой, и зеленою весной
И стобою и со мной, это яйца-а-а.
Ты проснешься на рассвете
Слышишь как смеются дети
Лишь бы только были эти, эти яйца-а-а. (с)

Posted via ActualForum NNTP Server 1.5

26 мар 19, 20:06    [21844246]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2780
Мимопроходящий
на данный момент развития исторического материализма придётся исключить.
у-вы.
Таким образом, тебе остаётся только UDR и memmap.
27 мар 19, 11:00    [21844726]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

27.03.2019 11:00, rdb_dev пишет:
> Таким образом, тебе остаётся только UDR и memmap.

любая инвазия в серверный процесс есть суксЪ.

Posted via ActualForum NNTP Server 1.5

27 мар 19, 11:57    [21844828]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9631
rdb_dev,

а тебе изучить вопрос

Мимопроходящий,

а что совет DS не прокатил? Создать функцию или ХП и вызывать её в момент конфликта передавая в качестве аргумента номер конфликтующей транзакции

CREATE OR ALTER FUNCTION SF_USER_BY_TRANSACTION (
    A_TRANSACTION_ID BIGINT)
RETURNS VARCHAR(63)
AS
DECLARE VARIABLE STMT BLOB SUB_TYPE TEXT;
DECLARE VARIABLE USER_NAME VARCHAR(63);
BEGIN
  STMT = '
    select
      a.MON$USER
    from MON$ATTACHMENTS a
    join MON$TRANSACTIONS t on t.MON$ATTACHMENT_ID = a.MON$ATTACHMENT_ID
    where t.MON$TRANSACTION_ID = :ID
  ';
  EXECUTE STATEMENT(STMT)(ID := A_TRANSACTION_ID)
      AS USER 'SYSDBA' PASSWORD 'masterkey' -
      INTO USER_NAME;
  RETURN USER_NAME;
END




select
  t.mon$transaction_id,
  SF_USER_BY_TRANSACTION(t.mon$transaction_id) as username
from mon$transactions t
27 мар 19, 12:07    [21844848]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

27.03.2019 12:07, Симонов Денис пишет:
> а что совет DS не прокатил? Создать функцию или ХП и вызывать её в момент конфликта передавая в качестве аргумента номер конфликтующей транзакции

не хотелось дёргать таблицы мониторинга.
да и эскалирование прав до уровня SYSDBA внутри процедуры с открытим паролем не есть гуд.
из всего предложенного и протестированного, наименее тормозной и относительно безопасный
способ - писать во временную таблицу.
RECREATE TABLE U_TRANS
EXTERNAL FILE '. . .'
(
    USER_NAME       CHAR(31),
    TRANSACTION_ID  CHAR(20),
    CONNECTION_ID   CHAR(20),
    CLIENT_PROCESS  CHAR(255),
    CLIENT_ADDRESS  CHAR(255),
    DATE_START      CHAR(26) DEFAULT CURRENT_TIMESTAMP NOT NULL
);

GRANT SELECT ON TABLE U_TRANS TO PUBLIC;

CREATE OR ALTER TRIGGER ON_TRANSACTION_START
ACTIVE ON TRANSACTION START
AS
BEGIN
  IF (RDB$GET_CONTEXT ('SYSTEM', 'READ_ONLY') = 'FALSE') THEN
    INSERT INTO U_TRANS (USER_NAME, TRANSACTION_ID, CONNECTION_ID, CLIENT_PROCESS, CLIENT_ADDRESS)
      VALUES (CURRENT_USER, CURRENT_TRANSACTION, CURRENT_CONNECTION, RDB$GET_CONTEXT('SYSTEM', 'CLIENT_PROCESS'), RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS'));
END;

GRANT SELECT, INSERT ON TABLE U_TRANS TO TRIGGER ON_TRANSACTION_START;

ну и грохать этот файл еженощно, по крону.

Posted via ActualForum NNTP Server 1.5

27 мар 19, 12:45    [21844933]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

тьфу, очепятка.
не во временную, а во ВНЕШНЮЮ.

Posted via ActualForum NNTP Server 1.5

27 мар 19, 12:46    [21844937]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
hvlad
Member

Откуда:
Сообщений: 10403
Мимопроходящий,

делать insert с клиента после старта тр-ции - не вариант ?
27 мар 19, 12:55    [21844951]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30037

27.03.2019 12:55, hvlad пишет:
> делать insert с клиента после старта тр-ции - не вариант ?

теоретически можно.
но нужно перелопатить все приложения.
а это чуть более 2 тысяч модулей.
с явными и неявными стартами транзакций.
либо вшить код прямо в IBX.

Posted via ActualForum NNTP Server 1.5

27 мар 19, 13:04    [21844973]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60007
Мимопроходящий> но нужно перелопатить все приложения.


А прикладная цель какая - ловишь кого-то или статистику собираешь?

Posted via ActualForum NNTP Server 1.5

27 мар 19, 15:12    [21845158]     Ответить | Цитировать Сообщить модератору
 Re: Предотвратить рекурсию  [new]
m7m
Member

Откуда: Украина, Мариуполь
Сообщений: 1335
Гаджимурадов Рустам
А прикладная цель какая - ловишь кого-то или статистику собираешь?

21842937
27 мар 19, 15:35    [21845190]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить