Java JDBC и Oracle Wallet Connection - PullRequest
0 голосов
/ 12 июня 2018

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

Используя это как справку.Я все еще не могу подключиться к 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 возвращает запись после ввода пароля кошелька.

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

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

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

0 голосов
/ 12 июня 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";
...