JDBC SQLServerException:„Dieser Treiber ist nicht für die integrierte Authentifizierung konfiguriert.“
-
09-09-2020 - |
Frage
Ich schreibe eine „serverseitige Erweiterung“ für SmartFoxServer (SFS).In meinem Anmeldeskript muss ich eine Verbindung zu MS SQL Server herstellen, was ich mithilfe von JDBC versuche.Ich habe den JDBC-Code in meiner Debug-Umgebung getestet und er funktioniert einwandfrei.
ABER
Wenn ich die serverseitige Erweiterung im SFS-Ordner „extensions“ ablege (gemäß Spezifikation), erhalte ich eine com.microsoft.sqlserver.jdbc.SQLServerException
:
„Dieser Treiber ist nicht für die integrierte Authentifizierung konfiguriert.“
Ich habe nach diesem Fehler gegoogelt und festgestellt, dass er normalerweise an der Datei liegt sqljdbc_auth.dll
ist nicht im Systempfad;Ich habe diese Datei in einen Ordner in meinem Systempfad kopiert und es funktioniert immer noch nicht!
Irgendwelche anderen Vorschläge?
Lösung
Es gibt verschiedene Versionen von sqljdbc_auth.dll für verschiedene Prozessorarchitekturen (x86/x64/ia64).Welches verwenden Sie auf Ihrem SFS-Server?
Sie müssen diejenige auswählen, die zur Architektur der JVM passt, unter der SFS ausgeführt wird.Wenn Sie also 32-Bit-Java auf einem 64-Bit-Computer ausführen, benötigen Sie die x86-Version, nicht die x64-Version.
Ich habe SFS noch nie verwendet, daher weiß ich nicht, ob es irgendwo Protokolle schreibt.Wenn dies der Fall ist, könnte es sich lohnen, einen Blick auf diese Protokolle zu werfen, um zu sehen, ob dort etwas Hilfreiches geschrieben wurde.
BEARBEITEN:Ich kann nicht 100 % sicher sein, dass SFS 64-Bit-Java verwendet, nur weil es nicht über C:\Programme und nicht über C:\Programme (x86) verfügt.
Ich habe die folgende Zeile im gefunden SFS-Dokumente unter Einführung > Anforderungen und Installation.Während diese Zeile nur für Linux und nicht für Windows gilt, könnte sie darauf hindeuten, dass SFS unter Windows auch 32-Bit-Java verwendet:
Seit Version 1.5 verfügt SmartFoxServer über eine eigene x86 32-Bit Sun Java Runtime.
Eine schnelle Möglichkeit, festzustellen, welche Java-Version(en) Sie installiert haben, besteht darin, den folgenden Befehl in Ihr cmd einzugeben: Java -version
Auf der Konsole wird Folgendes angezeigt:
C:\Users\967097>java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
Hier können Sie den Bittyp der installierten Java-Version sehen.
Funktioniert Ihre Anwendung, wenn Sie die x86-Version von sqljdbc_auth.dll anstelle der x64-Version verwenden?Wenn es plötzlich mit der x86-DLL funktioniert, muss SFS 32-Bit-Java verwenden.
Gibt es eine Batch-Datei zum Starten von SFS?Wenn ja, kann das Durchlesen hilfreich sein, um herauszufinden, von wo aus SFS Java ausführt.Achten Sie auch auf Änderungen an der PATH
.Java kann nur DLLs in laden java.library.path
Systemeigenschaft, und unter Windows wird diese auf den Wert der festgelegt PATH
Umgebungsvariable.
Wenn Sie immer noch nicht feststellen können, ob SFS 32-Bit- oder 64-Bit-Java verwendet, versuchen Sie, mit Process Explorer die Umgebung zu überprüfen, in der der Prozess java.exe, auf dem SFS ausgeführt wird, gestartet wurde.
Andere Tipps
wenn Sie Windows-Authentifizierung integrierte Sicherheit verwenden
- .
- Download der sqljdbc_6.0.8112.100_enu.exe von Microsoft Site
- Installieren Sie den EXE (lesen Sie die Anweisungen im Reißverschluss)
-
Kopieren sqljdbc_4.0 / deu / auth / x64 / sqljdbc_auth.dll bis
java / jre7 / bin und zu
java / jre7 / lib
Danach sollten Sie in der Lage sein, mit den Hibernate-Tools herzustellen, um die Datenbank in Datenwerkzeugen zu ziehen
platz .dll-Datei in Ihrem JRE-Ordner: -
Ich stand auch auf das gleiche Problem und danach legte ich SQLJDBC_AUTH.DLL (X86 oder X64) abhängig von Ihrem Betriebssystem in JRE-Ordner i.E jre7 / bin / file.dll und führen Sie dann meinen Application.jar und es funktionierte perfekt.Dies funktionierte für mich, Sie können dies auch ausprobieren, kann dies auch helfen :)
Laden Sie den JDBC-Treiber (ver 7.2) von Microsoft herunter und kopieren Sie die sqljdbc_auth.dll in c: \ programmdateien \ java \ jre \ bin und c: \ Programme \ java \ jdk \ binMappe.Sie würden den Ordner zum Programmdateien (X86) gehen, wenn Sie Java 32-Bit ausführen.
In my case, I did the following to resolve:
Downloaded the Microsoft JDBC Driver 8.2 for SQL Server (zip) (found here - https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15).
Then in the zip file, I went into the following folders:
sqljdbc_8.2 > enu > auth > x64
and the copied "mssql-jdbc_auth-8.2.2.x64.dll" to C:\Program Files\Java\jdk-12.0.1\bin
i had faced same issue for the following windows authentication string
jdbc:sqlserver://host:1433;integratedSecurity=true
the default authenticationScheme=NativeAuthentication, So it might depends on some microsoft dlls. To fix it, the update authenticationScheme as NTLM as below
jdbc:sqlserver://host:1433;authenticationScheme=NTLM;integratedSecurity=true;domain=myDomain
note: username given was without domain