Java JDBC и соединение с кошельком Oracle

Как использовать кошелек оракула

Используя это как ссылку. Я по-прежнему не могу подключиться к Oracle Wallet. Пример кода ниже.

Ошибки

--
java.sql.SQLException: encountered a problem with the Secret Store. Check the wallet location for the presence of an open wallet (cwallet.sso) and ensure that this wallet contains the correct credentials using the mkstore utility: java.io.IOException: oracle.security.crypto.cert.PKCS12.getAuthSafesAsList()Ljava/util/ArrayList;
        at oracle.jdbc.driver.PhysicalConnection.getSecretStoreCredentials(PhysicalConnection.java:1314)
        at oracle.jdbc.driver.PhysicalConnection.parseUrl(PhysicalConnection.java:1198)
        at oracle.jdbc.driver.PhysicalConnection.readConnectionProperties(PhysicalConnection.java:982)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:646)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:428)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:38)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:270)

--

Образец кода

public static void main (String [] args) {
     System.out.println("-------- Oracle JDBC Connection Testing ------");

        try {

            Class.forName("oracle.jdbc.driver.OracleDriver");

        } catch (ClassNotFoundException e) {

            System.out.println("Where is your Oracle JDBC Driver?");
            e.printStackTrace();
            return;

        }

        System.out.println("Oracle JDBC Driver Registered!");

        Connection connection = null;
        determineAndSetTnsHome();

        try {

            connection = DriverManager.getConnection(
                    "jdbc:oracle:thin:/@xxx");

        } catch (SQLException e) {

            System.out.println("Connection Failed! Check output console");
            e.printStackTrace();
            return;

        }

        if (connection != null) {
            System.out.println("You made it, take control your database now!");
        } else {
            System.out.println("Failed to make connection!");
        }
    }
private static void determineAndSetTnsHome() {
    String tnsAdmin = System.getenv("TNS_ADMIN");
    if (tnsAdmin == null) {
        String oracleHome = System.getenv("ORACLE_HOME");
        if (oracleHome == null) {
            return; //failed to find any useful env variables            
        }
        tnsAdmin = oracleHome + File.separatorChar + "network" + File.separatorChar + "admin";
    }

    System.setProperty("oracle.net.tns_admin", tnsAdmin);
}

--

Примечания

Подтверждено, что кошелек настроен. - Выполнение sqlplus $xxx соединяется нормально.

- Выполнение mkstore -wrl -listCredential возвращает запись после ввода пароля кошелька.

Заранее спасибо.


person xsleepyxsniperx    schedule 11.06.2018    source источник
comment
Вам нужно отладить, чтобы узнать, что происходит. Может быть, вы возвращаетесь сюда return; //failed to find any useful env variables   -  person Scary Wombat    schedule 12.06.2018


Ответы (2)


Можете ли вы проверить блог для более подробной информации? Проверьте, используете ли вы TLSv1.2 и для кошельков Oracle требуются дополнительные файлы jar (oraclepki.jar, osdt_core.jar и osdt_cert.jar).

person Nirmala    schedule 13.06.2018

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

Запустите пример запроса к известной таблице в вашей схеме в SQL*Plus (подключения недостаточно)

Если кошелек не открыт, вы получите следующую ошибку:

ORA-28365: кошелек не открыт

Этот запрос должен дать вам статус кошелька:

select wrl_type wallet,status,wrl_parameter wallet_location from v$encryption_wallet;

Чтобы открыть кошелек, выполните следующую команду, заменив «myPassword» выбранным вами паролем:

ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "myPassword";
person Zynon Putney II    schedule 12.06.2018