2016-06-15 41 views
7

Desidero essere in grado di connettersi a un server SQL utilizzando l'autenticazione jdbc e Windows. Ho visto alcune risposte su internet dicendo che dovrei aggiungere la seguente proprietà alla stringa di connessione:Connessione a SQL Server con autenticazione di Windows da una macchina Linux tramite JDBC

integratedSecurity=true; 

e anche aggiungere

sqljdbc_auth.dll 

Per il percorso di Java.

Ma questo, per quanto comprendo si applica solo quando mi connetto da una macchina Windows. Quando provo questo su una macchina Linux ottengo:

java.sql.SQLException: This driver is not configured for integrated authentication 

mia domanda è come io lo faccio da una macchina Linux.

Grazie

+0

"dll" è un suggerimento che questo è probabilmente una libreria di Windows. Su Linux probabilmente avresti un ".so" o qualcosa di diverso da "dll". – Fildor

+0

@Fildor lo so, questo è il motivo per cui ho chiesto come faccio da Linux. – zuckermanori

+0

@mjn ho letto questo articolo ma si applica a Windows e non a Linux come ho chiesto – zuckermanori

risposta

14

Beh, alla fine ho rispondere alla mia domanda: Questo non è possibile utilizzare l'autenticazione di Windows da una macchina Linux utilizzando il driver JDBC Microsoft. Ciò è possibile utilizzando il driver JDBC jTDS utilizzando la seguente stringa di connessione:

jdbc:jtds:sqlserver://host:port;databaseName=dbname;domain=domainName;useNTLMv2=true; 

Grazie a tutti per tutti i commenti

+1

Sto cercando di implementare lo stesso. Sono in grado di connettermi a SqlServer usando jtDs e l'autenticazione di Windows dalla macchina Unix ma le query di inserimento non funzionano. Richiedendoti di dare un'occhiata a [questo] (http://stackoverflow.com/questions/39658960/exception-while-using-jtds-for-sqlserver-connectivity) Stack Overflow domanda – Sumit

+0

Questo funziona, grazie – sendon1982

+0

Come funziona stai dimostrando i dettagli dell'autent user in questa stringa di connessione? Ho bisogno di incorporare tutto nella url di connessione. – Pradatta

1

TL; DR

non è possibile utilizzare l'autenticazione di Windows nativo per le connessioni JDBC a MSSQL da una JVM in esecuzione su Linux.


questo articolo MSDN spiega i metodi authentiation con JDBC su Linux, potenziali errori, e le opzioni disponibili:

https://blogs.msdn.microsoft.com/psssql/2015/01/09/jdbc-this-driver-is-not-configured-for-integrated-authentication/

... nel driver JDBC 4.0, è possibile utilizzare la proprietà di connessione authenticationScheme per indicare come si desidera utilizzare Kerberos su connettersi a SQL. Ci sono due impostazioni qui.

  • NativeAuthentication (default) - Questo utilizza la sqljdbc_auth.dll ed è specifico per la piattaforma Windows. Questa era l'unica opzione precedente al driver JDBC 4.0.

  • JavaKerberos - Utilizza le API Java per richiamare Kerberos e non fa affidamento sulla piattaforma Windows. Questo è java specifico e non associato al sistema operativo sottostante, quindi può essere utilizzato su entrambe le piattaforme Windows e Linux .

...

Il seguente documento illustra come utilizzare Kerberos con il driver JDBC e passeggiate attraverso ciò che è necessario per ottenere JavaKerberos lavoro correttamente.

Utilizzo di Kerberos l'autenticazione integrata per connettersi a SQL Server http://msdn.microsoft.com/en-us/library/gg558122%28v=sql.110%29.aspx

+0

Ho letto anche questo articolo. Non riesco ancora a capire se posso utilizzare il flag JavaKerberos per l'autenticazione con l'autenticazione di Windows. – zuckermanori

+0

@zuckermanori L'autenticazione Kerberos richiede un server Kerberos. È uno standard diverso rispetto all'autenticazione nativa di Windows. Quindi è necessario verificare prima con il sistema/amministratore di rete se Kerberos è disponibile per il proprio ambiente. – mjn

+0

So che è diverso, sto cercando un modo per usare l'autenticazione di Windows, non i kerberos. Grazie comunque. – zuckermanori