Как избежать хранения учетных данных для подключения к Oracle с JDBC?

Возможно ли установить соединение JDBC с Oracle без предоставления информации о имени пользователя и пароле в файле конфигурации (или в любом другом стандартном читаемом месте)?

Обычно приложения имеют файл конфигурации, содержащий параметры настройки для подключения к базе данных. У некоторых администраторов баз данных есть проблемы с тем, что имена пользователей и пароли содержатся в текстовом файле в конфигурационных файлах.

Я не думаю, что это возможно с Oracle и JDBC, но мне нужно подтверждение...

Возможный компромисс заключается в шифровании пароля в файле конфигурации и расшифровке его перед настройкой соединения. Конечно, ключ дешифрования не должен находиться в одном файле конфигурации. Это разрешит случайное открытие файла конфигурации неавторизованными пользователями.

Ответ 1

Возможно, вы захотите попробовать Kerberos, который может использовать учетные данные пользователя ОС и добавить пользователя ОС в базу данных, как указано извне. Убедитесь, что вы используете Kerberos, а не старый способ сделать это, что имеет серьезные проблемы с безопасностью.

Для поддержки Kerberos вам потребуется расширенная опция безопасности и недавний драйвер JDBC, возможно, версия 11g. Прежде чем пытаться заставить его работать на Java, попробуйте его в Sql * Plus, используя "/" в качестве имени пользователя и пустого пароля. "выберите пользователя из двойника" должен предоставить вам домен user @. Вы также можете обнаружить, что существует фундаментальное различие между использованием тонкого или OCI-драйвера, когда дело доходит до конфигурации Kerberos.

Ответ 2

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

Это общая проблема, как мне хранить учетные данные, необходимые для доступа к внешним системам? Для решения этой проблемы WebLogic имеет средство сопоставления учетных данных, в котором учетные данные (зашифрованные) хранятся во встроенном LDAP. Многие продукты Oracle используют средство хранения учетных данных, которое хранит учетные данные в кошельке Oracle.

В вопросе вы предоставили ответ. Храните пароль в зашифрованном виде и расшифровывайте его, когда вам это нужно. Очевидно, вы должны использовать симметричный алгоритм шифрования, такой как 3DES, чтобы расшифровать его. Убедитесь, что симметричный ключ не является чем-то, что можно угадать.

Фокус в том, где вы храните симметричный ключ, необходимый для en/de-cryption. Вы можете поместить его в файл, который защищен через ОС, или вы можете сохранить его в коде, но тогда вам нужно сохранить код в безопасности. Вы также можете сгенерировать ключ, если вы используете технику, которая будет генерировать один и тот же ключ, и алгоритм достаточно безопасен.

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

Вы также можете добавить еще несколько слоев в это решение. Вы можете зашифровать файл конфигурации (с другим ключом), а также пароль внутри него, чтобы хакер обнаружил 2 ключа. Существуют и другие более безопасные методы, использующие PKI, но их сложно настроить.

Ответ 3

Я бы предложил вам изучить прокси-аутентификацию. Это описано в Руководстве по безопасности баз данных Oracle®, а также Руководство разработчика и справочник разработчиков JDBC для баз данных Oracle®. По сути, это позволяет вам иметь пользователя в базе данных, которая ТОЛЬКО имеет права на подключение. Пользователи реальных учетных записей базы данных настроены на возможность подключения в качестве прокси-пользователя. Приложение, подключающееся через JDBC, затем сохраняет имя пользователя и пароль прокси, а при подключении предоставляет эти учетные данные, PLUS - имя пользователя реального пользователя базы данных в строке подключения. Oracle подключается как пользователь прокси, а затем имитирует реального пользователя базы данных, наследуя привилегии базы данных реального пользователя.

Ответ 4

Все контейнеры J2EE (JBOSS, Tomcat, BEA) имеют пулы подключений. Они откроют несколько соединений, сохранят их и передадут вам в 1/100 th время, необходимое для создания с нуля.

Кроме того, у них также есть интересные функции, например, в JBOSS, вся информация о подключении хранится во внешнем файле. Если вы измените информацию о подключении, то есть вы переключитесь с теста на производственную БД, ваше приложение будет динамически загружать подключения из нового пула

Хорошей новостью является то, что вам не нужно запускать полный контейнер J2EE, чтобы использовать пул соединений. Внешний ресурс позволяет сохранять пароль в виде открытого текста или псевдошифровать.

Для руководства по использованию объединенного пула соединений Tomcat см. apache commons-dbcp:

Ответ 5

Поскольку я не совсем понимаю вашу среду, отличную от Java и JDBC, разговаривающих с Oracle, я буду говорить по этому поводу.

Если вы говорите о приложении Java EE, вы должны иметь возможность настраивать пулы подключений и источники данных на сервере приложений, а затем приложение обращается к пулу соединений, который обрабатывает соединение на этом уровне.

Пул соединений и источник данных хранятся и сохраняют учетные данные.

Ответ 6

Насколько мне известно, подключение jdbc к именам пользователей/паролям необходимо хранить в виде простого текста. Один из способов ограничить возможные риски этого - ограничить права пользователя, чтобы можно было использовать только данную базу данных приложений и только с предопределенного хоста. IMO, это очень ограничило бы атакующего: он мог использовать только un/pw с того же хоста, где находится исходное приложение, и только для атаки исходной базы данных приложений.

Ответ 7

Задумывались об этом в прошлом.

Решение, безусловно, включает в себя обеспечение надлежащей сетевой безопасности на уровне сервера и сети, чтобы действительно уменьшить количество людей, которые могут получить доступ к системе, а наличие учетных данных базы данных дает доступ только к учетной записи базы данных с открытым минимум разрешений, необходимых для запуска приложения.

Шифрование файлов свойств может быть достаточным сдерживающим фактором в терминах "не нужно беспокоиться, чтобы найти ключ или кодовую фразу", чтобы заставить злоумышленника перейти на следующий зараженный сервер. Я бы не стал полагаться на "мой сосед менее безопасен, так что украсть у него, пожалуйста" безопасность, однако!

Ответ 8

Есть два ключевых подхода, и оба они оказывают значительное влияние на дизайн системы, так что перемещаться из одного в другое без существенного переписывания непросто. Вам нужно понять, что перед политикой политики безопасности вашей компании.

1) У каждого пользователя есть учетные данные, которые переносятся через приложение, для службы, которая используется Приложением; в вашем случае база данных Oracle использует эти учетные данные для подключения к базе данных. Недостатком является то, что каждому пользователю нужны учетные данные для каждого защищенного сервиса. Это разумный безопасный подход, но также требует значимой дополнительной работы для предоставления и поддержания учетных данных пользователя. Администраторам баз данных необходимо будет активно управлять учетными данными пользователей, что может противоречить политикам управления безопасностью вашей компании.

2) Учетные данные базы данных приложения хранятся в службе безопасного каталога, например. Защитите LDAP. Приложение обращается к службе каталогов с учетными данными пользователей. Служба каталогов возвращает соответствующие учетные данные для доступа к сервису.

В обоих случаях учетные данные базы данных должны быть ограничены только для выполнения соответствующих операций. Например, учетные данные должны отражать требования бизнес-процессов; они позволяют выбирать из определенных представлений/таблиц, вставлять в другие, но не создавать, обновлять или удалять таблицы. Во втором подходе используют отдельные учетные данные для каждого основного бизнес-процесса, например. Обработка заказов, учет, управление персоналом и т.д.

Однако помните, что безопасность подобна слоям лука, если кто-то удалил слои для доступа к приложению, чтобы они могли получить доступ к конфигурационному файлу пула удаленных баз данных. Вероятно, они могут трояна приложениям для регистрации учетных данных пользователей. Именно здесь происходит хорошая политика управления безопасностью.

Управление безопасностью - сложная проблема, которая требует высшего руководства, потому что, если вам нужен этот уровень безопасности для вашей живой платформы, он стоит. Вам необходимо отделить обязанности разработки от развертывания, операций и управления полномочиями пользователей. Возможно, вам также потребуются аудиторы безопасности, у которых есть полный доступ к изменениям просмотра, но нет возможности изменить конфигурацию. Это, если далек от простого и высокооплачиваемого специалиста.

Ответ 9

Вы можете хранить учетные данные в любом месте, в том числе в виде проводных строк в программе или в качестве записей в реестре Windows. Это зависит от вас, чтобы получить их, если вы используете что-то нестандартное; Я не знаю о каких-либо готовых решениях, которые не являются открытым текстом.

Ответ 10

Вы можете попробовать аутентификацию прокси-сервера Oracle, где клиент JDBC аутентифицируется с использованием сертификата с известным компонентом/сервисом промежуточного уровня (прокси), которому доверяет сервер базы данных. Я никогда не пробовал этого, поэтому я не знаю, легко ли это сделать.

Ответ 11

В дополнение к уже упомянутым решениям (проверка подлинности Kerberos с использованием прокси-аутентификации) есть еще два решения, которые работают с тонким драйвером JDBC:

  • Сохраните пароль в кошельке SSO: кошелек можно использовать для хранения пароля пользователя. Если вы используете кошелек SSO, то сам кошелек не имеет пароля. Кошельки SSO обычно используются в контексте SSL, но они также могут использоваться для простого хранения пароля.
  • Используйте SSL с аутентификацией пользователя: настройте SSL с пользователем, который прошел внешнюю аутентификацию с помощью Distinguished Name (DN). У этого пользователя нет пароля. Пока вы подключаетесь к SSL с помощью сертификата, имеющего это DN, вы сможете создать сеанс с помощью этого пользователя.