2015-08-03 3 views
1

У меня есть необычная проблема, которую я пытаюсь решить. Я развиваюсь на Mac. Я пишу код, который подключается к базе данных с помощью jdbc. У меня нет прямого доступа к серверу db - чтобы добраться до него, мне нужно настроить перенаправление портов на ssh, который переходит на прокси-сервер в сети, где находится сервер db. Сервер I proxy in является сервером Linux, а db - MS Sql Server в Windows. Как только я настроил перенос портов, я могу подключиться к базе данных с помощью инструмента просмотра БД, такого как SquirrelSQL. Когда я пытаюсь подключиться к базе данных с помощью JDBC кода я написал, используя один и тот же драйвер JDBC, я получаю это:Java GSS/JDBC Issue

Exception in thread "main" java.sql.SQLException: I/O Error: GSS Failed: Invalid name provided (Mechanism level: Cannot locate default realm) 
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:654) 
    at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:371) 
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 
    at java.sql.DriverManager.getConnection(DriverManager.java:571) 
    at java.sql.DriverManager.getConnection(DriverManager.java:233) 
    at sql.generator.SQLGenerator.main(SQLGenerator.java:80) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 
Caused by: java.io.IOException: GSS Failed: Invalid name provided (Mechanism level: Cannot locate default realm) 
    at net.sourceforge.jtds.jdbc.TdsCore.sendMSLoginPkt(TdsCore.java:1976) 
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:617) 
    ... 10 more 

Исследования Google показывают, что это может быть проблемой Kerberos, который я гаванью Раньше мне приходилось работать, но я не уверен, что это так. Что такое браузер db, который мне нужно дублировать в приложении?

ТИА, Alex

ответ

0

Это один укусил меня, как хорошо. Проверьте свой вызов DriverManager.getConnection. Я использовал вариант, который принимает свойство как второй аргумент. Но jTDS не использует то же самое, что и драйвер M $. Вы должны использовать вариант с аргументами URL, username и password. Убедитесь, что вы добавили номер порта и (необязательно) имя базы данных в URL-адрес соединения.