2017-08-30 5 views
2

J'essaie d'utiliser DriverManager.getConnection() pour me connecter à une base de données SQL Server à partir d'une application Java, mais je continue à me connecter échoué pour l'utilisateur "erreurs avec elle. J'ai essayé d'utiliser à la fois com.microsoft.sqlserver.jdbc.SQLServerDriver et net.sourceforge.jtds.jdbc.Driver pour se connecter, mais les deux continuent à frapper le problème.Connexion à SQL Server échouant à partir de Java DriverManager.getConnection(), en travaillant à partir de Python avec pymssql.connect()

Voici le code que je utilise pour se connecter:

Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
conn=DriverManager.getConnection("jdbc:jtds:sqlserver://SERVERADDRESS:1433;DatabaseName=DBNAME;user=USER;password=PASS"); 

Je sais que compte a accès à cette base de données, comme je l'ai connecté à avant à partir d'une application Python en utilisant pymssql.connect(SERVERADDRESS, USER, PASS, DBNAME) avec le même serveur/DB/creds.

De this article, j'ai finalement réussi à faire fonctionner l'authentification Windows avec mon compte personnel, mais je n'arrive toujours pas à l'utiliser avec notre compte de service. Quelqu'un at-il un aperçu de la raison pour laquelle l'application Python peut se connecter, mais le Java ne peut pas?

+0

Lorsque vous vous connectez depuis l'application Python sont vous spécifiez le nom d'utilisateur du compte de service en tant que "DOMAINNAME \ USERNAME"? En d'autres termes, le compte de service est-il un compte Windows, par opposition à un nom de connexion "Authentification SQL Server"? –

+0

Je suis, ça passe dans 'domain \\ svc_account'. Je fais la même chose dans la chaîne de connexion en Java. Donc la chaîne de connexion est '' jdbc: jtds: sqlserver: // SERVERADDRESS: 1433; DatabaseName = DBNAME; utilisateur = domain \\ svc_account; password = PASS "' –

Répondre

0

pymssql est construit au-dessus de FreeTDS. FreeTDS et jTDS prennent tous deux en charge un schéma d'authentification Windows plus ancien appelé NTLM, alors que les versions actuelles du pilote JDBC de Microsoft pour SQL Server (mssql-jdbc) ne prennent plus en charge ce mécanisme d'authentification.

Ainsi, étant donné que vous avez confirmé que pymssql peut se connecter, vous devriez être en mesure de se connecter à partir de votre application Java en tant qu'utilisateur de Windows MYDOMAIN\username utilisant jTDS comme ceci:

String myUid = "username", myPwd = "mypassword"; 
String connUrl = "jdbc:jtds:sqlserver://192.168.1.123:1433/databasename;DOMAIN=MYDOMAIN"; 
Connection conn = DriverManager.getConnection(connUrl, myUid, myPwd); 
+1

Bénis-toi l'âme gentille, qui l'a fait! –

0

Pour trouver la raison de "Connexion a échoué pour l'utilisateur", il faut aller à SQL Server journal des erreurs.

La prochaine ligne à 18456 error vous donnera la raison.

Le plus probablement la raison de l'échec dans votre cas est que le serveur est configuré pour utiliser Windows Authentication only