В мануале Tomcat по поводу Oracle JDBC указывается, что логин и пароль указываются в элементе ресурса. Это вызывает ряд вопросов у DevOps/эксплуатации/ИБ - пароли в чистом виде хранятся в конфигурационном файле. Одним из промежуточных решений этой проблемы было указание переменных в catalina.properties и последующее использование их в атрибутах элемента подсоединения
Но такое изменение конфигурации подразумевало слабую обновляемость конфигурационного кода Tomcat. catalina.properties затирается и все заново.
У Oracle есть возможность использовать wallet-ы (кошельки) для хранения паролей к подключению к базам и люди пользуются такой возможностью. Причем во многих местах, коллеги явно создают TNSNAMES.ORA и TNSALIAS в нем для того, чтобы указывать его как параметр создания записи в wallet-e. И в запущенных случаях это оправданно - лишний слой абстракции никому еще не мешал, но если речь идет о корпоративных системах, то есть OID, то в этом случае использование совместно с тонким клиентом (jdbc:oracle:thin:@...) становится затруднительным. Ведь тонкий клиент требует указания всех необходимых данных в строке подключения либо забирает их из LDAP сервера.
В этом случае, возможно использовать wallet-ы, рассматривая их просто как таблицу (url, user, pass). То есть при создании записи в ней, например, для ldap URL
# tail catalina.properties |grep passwd
scott.passwd=tiger
# cat Catalina/localhost/ROOT.xml
<context reloadable="false" unpackwar="false">
<resource auth="Container"
driverclassname="oracle.jdbc.OracleDriver"
name="jdbc/Database"
password="${scott.passwd}"
type="javax.sql.DataSource"
url="jdbc:oracle:oci:@oradb"
username="scott">
</resource></context>
Но такое изменение конфигурации подразумевало слабую обновляемость конфигурационного кода Tomcat. catalina.properties затирается и все заново.
У Oracle есть возможность использовать wallet-ы (кошельки) для хранения паролей к подключению к базам и люди пользуются такой возможностью. Причем во многих местах, коллеги явно создают TNSNAMES.ORA и TNSALIAS в нем для того, чтобы указывать его как параметр создания записи в wallet-e. И в запущенных случаях это оправданно - лишний слой абстракции никому еще не мешал, но если речь идет о корпоративных системах, то есть OID, то в этом случае использование совместно с тонким клиентом (jdbc:oracle:thin:@...) становится затруднительным. Ведь тонкий клиент требует указания всех необходимых данных в строке подключения либо забирает их из LDAP сервера.
В этом случае, возможно использовать wallet-ы, рассматривая их просто как таблицу (url, user, pass). То есть при создании записи в ней, например, для ldap URL
mkstore -wrl #path_to_wallet# -createCredential "ldap://myldap.server/cn=OracleContext,dc=example,dc=com/oradb" username passwordи в дальнейшем
# cat Catalina/localhost/ROOT.xml
<context reloadable="false" unpackwar="false">
<resource
auth="Container"
driverclassname="oracle.jdbc.OracleDriver"
name="jdbc/Database"
type="javax.sql.DataSource"
connectionProperties="oracle.net.wallet_location=#path_to_wallet#"
url="jdbc:oracle:thin:/@ldap://myldap.server/cn=OracleContext,dc=example,dc=com/oradb">
</resource></context>
Указание connectionProperties возможно не только через конфигурацию, но и через системную переменную -Doracle.net.wallet_location=#path_to_wallet#
Важно: чтобы в процессе работы Oracle JDBC мог работать с такими wallet-ами без полной инсталляции клиента Oracle, требуется использовать два jar файла, размещенные в classpath Tomcat - обычно в каталоге lib.
ojpse.jar oraclepki.jarДля работы соединения нужен только один файл oraclepki.jar. Второй нужен при работе с wallet из командной строки. Эти же два файла нужны для работы утилиты mkstore из поставки Oracle. Имея их в classpath и используя информацию из этого файла, можно собрать свою собственную утилиту.