powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Скрыть содержимое передаваемых SQL-команд от SQLMonitor
25 сообщений из 25, страница 1 из 1
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175040
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Просьба помочь в нелегком вопросе. Есть клиент-серверное приложение, созданное с помощью таких средств:
- PowerBuilder 9.0.3
- Oracle 10.2.0.4
Безопасность доступа к данным обеспечивается следующим образом. Есть табличка с пользователями без паролей. Есть набор ролей, которым выдается доступ к различным ресурсам. При создании пользователя создается одноименный пользователь Оракла, записывается в табличку с пользователями, ему выдаются все роли. Каждая задача описывается через набор таблиц в БД. Каждой задаче ставится в соответствие перечень ролей, необходимых для ее запуска и функционирования. При запуске задачи создается отдельная сессия, в которой включаются необходимые роли (set role blablabla). Перечень ролей берется из табличек БД.
Пронырливыми заказчиками было установлено, что конечно бесправный пользователь по умолчанию ничего не видит при подключении SQL navigator'ом, но - видит перечень доступных ролей. Делает сам себе set role blablabla, и видит то, что ему вроде как было и недоступно. Что не есть гуд.
Приняли такое решение для обхода проблемы - задать всем ролям пароли и при вызове задачи включать роль с паролем. Типа - да, бесправный пользователь видит все возможные роли, но не может их включить. Соотв. картина "Лисица и виноград" :) Однако, предвидя следующий вопрос - "дык в SQL Monitor-е мы ж видим все передаваемые пароли!!" решили попытаться решить эту проблему заранее.
Отсюда вопрос. Как можно зашифровать обмен между клиентом и сервером при работе через PowerBuilder? Или может копаем не в ту сторону - просьба подсказать...
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175153
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какая-то ерунда написана


Vadim Romanenkoбесправный пользователь по умолчанию ничего не видит при подключении SQL navigator'ом, но - видит перечень доступных ролей.
убрать у пользователя привелегию "select any dictionary" и он ничего не увидит

Vadim RomanenkoДелает сам себе set role blablabla
чтобы добавить самому себе роль, нужно самому иметь роль DBA в базе
а если пользователь не DBA, и имеет эту роль, то все равно чтобы передать эту роль другому, то эта роль blablabla должна у него быть с "with admin option"
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175170
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRкакая-то ерунда написана


Vadim Romanenkoбесправный пользователь по умолчанию ничего не видит при подключении SQL navigator'ом, но - видит перечень доступных ролей.
убрать у пользователя привелегию "select any dictionary" и он ничего не увидит

Дурацкий вопрос :) Не подскажете, как убрать привилегию? Попробуем - спасибо в любом случае :)

VanoRVadim RomanenkoДелает сам себе set role blablabla
чтобы добавить самому себе роль, нужно самому иметь роль DBA в базе
а если пользователь не DBA, и имеет эту роль, то все равно чтобы передать эту роль другому, то эта роль blablabla должна у него быть с "with admin option"

Сам себе пользователь НЕ добавляет роль. Она ему добавляется при создании. А при запуске задачи - просто АКТИВИРУЕТСЯ уже имеющаяся роль.

VanoRчтобы добавить самому себе роль, нужно самому иметь роль DBA в базе
а если пользователь не DBA, и имеет эту роль, то все равно чтобы передать эту роль другому, то эта роль blablabla должна у него быть с "with admin option"
Потому-то и не выдается пользователю роль при старте задачи, а только активируется... Т.е. GRANT выполняется при СОЗДАНИИ пользователя.
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175221
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкак убрать привилегию?
revoke select any dictionary from USER;

"USER" соответственно заменить на имя нужного юзера


авторА при запуске задачи - просто АКТИВИРУЕТСЯ уже имеющаяся роль.
эт как так?!! роль или есть или ее нет... как она может активироваться?!!!
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175515
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRавторА при запуске задачи - просто АКТИВИРУЕТСЯ уже имеющаяся роль.
эт как так?!! роль или есть или ее нет... как она может активироваться?!!!

Ну вроде как есть
Код: plaintext
GRANT ROLE MYROLE TO MYUSER;
а есть
Код: plaintext
SET ROLE MYROLE;

Вроде так :) Но могу и ошибаться.

Так вот. Первое делается при создании пользователя, второе - при запуске задачи для текущей сессии.
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175519
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... извиняюсь - очепятка.

Код: plaintext
GRANT ROLE MYROLE TO MYUSER;
читать как
Код: plaintext
GRANT MYROLE TO MYUSER;
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175621
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все ваши сложности возникают из-за того что вы выдаете юзеру роли, но почему-то считаете что он не должен иметь права на их использование.
То решение, что было у вас изначально - правильное: роли даны, но выключены и включаются без пароля при активации нужных модулей.
Хотя я бы прямо сразу включал все роли, на которые у юзера есть права, ибо при наличии GUI во включении/выключении ролей нет особого смысла, т.к. эта фича служит не для ограничения прав, а для удобства юзера.
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175661
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Дело в том, что роли у нас к сожалению не являются достаточно подробными, чтоб включив одну роль, дать права на выполнение только одного действия. Роль сразу дает права на целый спектр действий. Потому и включаем-выключаем по желанию. Одна из основных целей - защита от рук пользователя, полезшего со своими скриптами в БД. Ошибкой конечно было то, что роли не имеют пароля. И для включения нужно всего лишь в том же SQL Navigator-e активировать роль. Но думаю что впедалим туда пароли - и эта возможность исчезнет. Однако SQL Monitor позволит спиратить пароль на роли. Тут возникла конечно мысль роли давать через функцию на сервере и пароль передавать в функцию передавать шифрованным...
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175680
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый простой способ - запретить пользователям (которые не DBA) коннектиться базе софтом, который админам не угоден... тем же SQL Monitor

второй способ - переделать весь софт на работу не с таблицами, а с процедурами. и пользователям дать права только на коннект и вызов нужных процедур, а в процедурах также отслеживать с какого софта ее запустили
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175691
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRсамый простой способ - запретить пользователям (которые не DBA) коннектиться базе софтом, который админам не угоден... тем же SQL Monitor

SQL Monitor - не коннектится к базе ;) Он перехватывает сетевой трафик "на лету".
Но идея такая, правда касательно sql navigator, sql plus, etc - тоже бродила. И даже будем применять. Вопрос только - как определить, что запущенный ЕХЕ-шник это наш ЕХЕ-шник, а не переименованный sql plus например :( Т.е. пока что подход не дает 100%-ной гарантии.

VanoRвторой способ - переделать весь софт на работу не с таблицами, а с процедурами. и пользователям дать права только на коннект и вызов нужных процедур, а в процедурах также отслеживать с какого софта ее запустили
Ну-у-у... Всегда можно перехватить вызовы, и подделать их. Это с одной стороны. С другой - такая переработка... М-м-м... Много-много месяцев работы, сводящихся к полному переписыванию клиентского приложения, которое разрабатывалось на протяжении 11 лет. Правда, мега-активной фазы там конечно года на полтора... Но это непростительные затраты для нас :(
В кардинально новой версии конечно учтем этот момент, и таки наверное именно по этому пути и пойдем.
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175774
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoВопрос только - как определить, что запущенный ЕХЕ-шник это наш ЕХЕ-шник, а не переименованный sql plus например :( Т.е. пока что подход не дает 100%-ной гарантии.

ну как минимум можно еще отслеживать поля MODULE и ACTION из v$session
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175792
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Romanenko Одна из основных целей - защита от рук пользователя, полезшего со своими скриптами в БД. Ошибкой конечно было то, что роли не имеют пароля. И для включения нужно всего лишь в том же SQL Navigator-e активировать роль. Но думаю что впедалим туда пароли - и эта возможность исчезнет. Однако SQL Monitor позволит спиратить пароль на роли. Тут возникла конечно мысль роли давать через функцию на сервере и пароль передавать в функцию передавать шифрованным...
Вы пытаетесь использовать для обеспечения безопасности фичу, предназначенную только для удобства юзера.

Безопасность в оракле предполагает, что юзер обладает всеми паролями которые были использованы для получения доступа.
Исходя из этого и надо раздавать права/роли.
Вы же хотите спрятать эти пароли от юзера.
Это дыра. Пароли, прошитые в коде программы или где-то еще сохраненные, рано или поздно станут известны юзерам.
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175803
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRVadim RomanenkoВопрос только - как определить, что запущенный ЕХЕ-шник это наш ЕХЕ-шник, а не переименованный sql plus например :( Т.е. пока что подход не дает 100%-ной гарантии.

ну как минимум можно еще отслеживать поля MODULE и ACTION из v$session
MODULE - всегда можно переименовать. Т.е. sqlplusw.exe в какое-нибудь разрешенное имя.

А что такое ACTION?
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175814
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyVadim Romanenko Одна из основных целей - защита от рук пользователя, полезшего со своими скриптами в БД. Ошибкой конечно было то, что роли не имеют пароля. И для включения нужно всего лишь в том же SQL Navigator-e активировать роль. Но думаю что впедалим туда пароли - и эта возможность исчезнет. Однако SQL Monitor позволит спиратить пароль на роли. Тут возникла конечно мысль роли давать через функцию на сервере и пароль передавать в функцию передавать шифрованным...
Вы пытаетесь использовать для обеспечения безопасности фичу, предназначенную только для удобства юзера.

Безопасность в оракле предполагает, что юзер обладает всеми паролями которые были использованы для получения доступа.
Исходя из этого и надо раздавать права/роли.
Вы же хотите спрятать эти пароли от юзера.
Это дыра. Пароли, прошитые в коде программы или где-то еще сохраненные, рано или поздно станут известны юзерам.

Согласен. Дыра. Но пока не могу понять как эту дыру убрать. Единственное что видится - создание достаточно большого кол-ва ролей (сотни) по доступу на таблицу (связанные таблицы), причем на каждую таблицу (или их набор) нужно как минимум две роли - только чтение, или полный доступ... То же самое по пакетам. Хотя... Для пакетов наверное можно было бы сделать одну большую роль :)

И каждой задаче выдавать столько ролей, сколько таблиц/пакетов она затрагивает. Но это же... В общем, ужасно - управлять таким массивом данных довольно сложно... Или может только так кажется?
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175829
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoMODULE - всегда можно переименовать. Т.е. sqlplusw.exe в какое-нибудь разрешенное имя.

А что такое ACTION?

ACTION - колонка в v$session
ею можно манипулировать с помощью DBMS_APPLICATION_INFO.set_action

ну и раз все так серьезно с доступом к данным, можно всегда вести аудит

хотя и из sqlplus можно тот же action установить, но об этом обычные пользователи не должны знать... допустим при первой попытке пользователь не установил action или module и попытался приконнектиться и выполнить запрос
триггер перехватил запрос, action например не тот, дал отлуп юзеру и записал в журнал попытку злого умысла.
админ увидел это в логе, доложил начальству, начальство отдало приказ "расстрелять" :)
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175844
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoЕдинственное что видится - создание достаточно большого кол-ва ролей (сотни) по доступу на таблицу (связанные таблицы), причем на каждую таблицу (или их набор) нужно как минимум две роли - только чтение, или полный доступ... То же самое по пакетам.
Нет, конечно.
Так не надо делать.
Роли должны создаваться на задачи, а не на таблицы.
Просто вы должны принять тот факт, что если у юзера есть права на задачу, то у него должно быть право на доступ через SQL+ к таблицам и ХП которые в этой задаче используются из клиентского приложения.
А чтобы юзер не мог кривыми sql командами попортить данные, контроль целостности должен проводиться не только на клиенте, но и на триггерах.
Конечно использование ХП намного облегчает контроль на стороне сервера.
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175908
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyVadim RomanenkoЕдинственное что видится - создание достаточно большого кол-ва ролей (сотни) по доступу на таблицу (связанные таблицы), причем на каждую таблицу (или их набор) нужно как минимум две роли - только чтение, или полный доступ... То же самое по пакетам.
Нет, конечно.
Так не надо делать.
Роли должны создаваться на задачи, а не на таблицы.
Просто вы должны принять тот факт, что если у юзера есть права на задачу, то у него должно быть право на доступ через SQL+ к таблицам и ХП которые в этой задаче используются из клиентского приложения.
А чтобы юзер не мог кривыми sql командами попортить данные, контроль целостности должен проводиться не только на клиенте, но и на триггерах.
Конечно использование ХП намного облегчает контроль на стороне сервера.

Хм. Т.е. вы предлагаете идеологию "одна задача - одна роль"? Может и так. Но все равно - многовато ролей :( Хотя меньше, чем таблиц :) Что ж, подумаем, взвесим! Спасибо за идею!

ПС: т.е. предполагается, что пакеты будут иметь максимальные права, а вот доступ к пакетам уже будет определяться ролями...
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37175911
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRVadim RomanenkoMODULE - всегда можно переименовать. Т.е. sqlplusw.exe в какое-нибудь разрешенное имя.

А что такое ACTION?

ACTION - колонка в v$session
ею можно манипулировать с помощью DBMS_APPLICATION_INFO.set_action

ну и раз все так серьезно с доступом к данным, можно всегда вести аудит

хотя и из sqlplus можно тот же action установить, но об этом обычные пользователи не должны знать... допустим при первой попытке пользователь не установил action или module и попытался приконнектиться и выполнить запрос
триггер перехватил запрос, action например не тот, дал отлуп юзеру и записал в журнал попытку злого умысла.
админ увидел это в логе, доложил начальству, начальство отдало приказ "расстрелять" :)

Не всегда приказ "расстрелять" можно выдать кулхацкеру, каким-то образом подключившемуся в корпоративную сеть извне.
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37176602
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда речь идет о защите, в первую очередь надо определиться, от кого мы защищаемся (уровень пользователя и его права в базе).
Одно дело, когда речь идет о DBA, от которого защитиься практически невозможно, другое дело от пользователя, который только и умеет, что работать с несколькими готовыми приложениями. Как правило, пользователи не готовы работать непосредственно с запросами. Если таковые есть, то большинство проблем решается грантами. Работа только через хранимки - тоже хорошее дело. Опять же, есть такая фича, как FGAC.
Правда, все это к PB отношения не имеет :)
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37176619
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНе всегда приказ "расстрелять" можно выдать кулхацкеру, каким-то образом подключившемуся в корпоративную сеть извне.
1. нужно запретить различными файрволами доступ к базе из вне
2. если всетаки проект подразумевает работу пользователей с базой из вне, то необходимо смотреть в сторону веб-приложений
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37176817
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55Если таковые есть, то большинство проблем решается грантами. Работа только через хранимки - тоже хорошее дело. Опять же, есть такая фича, как FGAC.

Предполагается, что таковые есть. С самого начала (более 11 лет назад) вся безопасность была положена на роли (казалось бы, группированные гранты). С одной стороны - можно просто всем ролям дать пароли, но взлом все же возможен SQL Monitor-ом например (слушает сетевой трафик по обмену с Ораклом на клиенте). Но уже придумали мысль - роли выдавать через функцию, пароли передавать в шифрованном виде.
А что есть FGAC?

tru55Правда, все это к PB отношения не имеет :)
Согласен :) но стартовый вопрос (как и стартовая идея) был в том, чтоб зашифровать обмен клиент-сервер, чтоб нельзя было по сети выцепить пароли ролей. Пока никто не подсказал, как это возможно на ПБ :) Думал есть настройки драйвера - но пока не нашел :(
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37176941
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Romanenkoстартовый вопрос (как и стартовая идея) был в том, чтоб зашифровать обмен клиент-сервер, чтоб нельзя было по сети выцепить пароли ролей. Пока никто не подсказал, как это возможно на ПБ :) Думал есть настройки драйвера - но пока не нашел :(
Шифрование обмена по сети настраивается не в ПБ, а в оракловом клиенте.

Например вот нагуглил https://kb.berkeley.edu/jivekb/entry.jspa?externalID=1005
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37176977
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoА что есть FGAC?
Fine Grained Access Control. Можно найти в Инете (в том числе на соответствующем форуме данного сайта :) ) и в оф. доке.
Если кратко - на таблицу накладывается policy, которая по определенным условиям меняет запрос к таблице.
Например, пользователь выдал
Код: plaintext
1.
2.
 SELECT *
FROM tab1
а к нему неявно добавилось
Код: plaintext
1.
2.
...
WHERE ...
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37176988
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyШифрование обмена по сети настраивается не в ПБ, а в оракловом клиенте.

кстати да...

возможно даже достаточно будет на сервере настроить listener не через tcp/ip, а через "tcp/ip with ssl".
сам ни разу не пробовал, но по идее все обмены клиента с сервером должны шифроваться
...
Рейтинг: 0 / 0
Скрыть содержимое передаваемых SQL-команд от SQLMonitor
    #37177024
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Большое спасибо за ссылку!! Действительно, дело совсем не в ПБ...
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Скрыть содержимое передаваемых SQL-команд от SQLMonitor
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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