Разрешить вход в oracle db только для определенного приложения?
-
06-07-2019 - |
Вопрос
Мы хотим разрешить доступ к БД (Oracle), чтобы наши пользователи только через наши собственные приложения - назовем его "ourTool.exe", установленного локально на компьютерах пользователей.В настоящее время пользователи должны указывать имя пользователя / пароль всякий раз, когда они запускают "ourTool".Предоставленный пароль расшифровывается, и мы используем username / decrypted-password для окончательного входа в Oracle DB.Такой подход не позволяет пользователям напрямую обращаться к нашей базе данных с помощью сторонних инструментов (SQLplus, Excel, Access, ...), и гарантируется, что все в базе данных было введено / отредактировано с помощью "ourTool".
Теперь один из наших клиентов хочет разрешить своим пользователям "единый вход" (с помощью смарт-карт / Oracle PKI).Таким образом, пользователь сможет подключаться к нашей базе данных без предоставления какого-либо пароля каждый раз, когда он запускает "ourTool".Но то же самое будет справедливо и для потенциально опасных инструментов, таких как SQLplus, Excel, Access и т.д.
Есть ли способ предотвратить это?Как мы можем убедиться, что каждая запись в нашей базе данных создается / редактируется / удаляется только с помощью "ourTool" в этом сценарии?
Решение
Поскольку это ваше приложение, и у вас есть контроль над источником, вы можете использовать роли базы данных, защищенные паролем, или защищенные роли приложений, которые включены в ourTool.exe. (см. http://www.oracle.com/technology/ obe / obe10gdb / security / Approles / Approles.htm ).
Например, для роли базы данных, защищенной паролем, начальное соединение будет иметь только привилегию CREATE SESSION, а затем ourTool.exe выдаст SET ROLE с паролем, известным только вам. Любое другое приложение не имеет информации для установки роли. Очевидно, что привилегии предоставляются только роли, а не непосредственно пользователю в этой конфигурации.
Другие советы
По умолчанию OCI
передает имя EXE
вызывающего приложения, и вы можете получить к нему доступ, запросив v $ session
:
SELECT program
FROM V$SESSION
, что можно сделать с помощью триггера AFTER LOGON
.
Но это можно легко переопределить, и на него нельзя полагаться.
Я переименовал свой sqlplus.exe в myTool.exe и после установления соединения с myTool.exe
SELECT program
FROM V$SESSION
where username = 'SYSTEM';
ВОЗВРАТ:myTool.exe
Так что имейте в виду, как сказал Квассной:хотя его можно использовать при некоторых обстоятельствах, это, конечно, не доказательство буллита.