Hallo zusammen,
Embarcadero hat in FireDAC seit Version 11.x das ansprechen des bevorzugten
MSSQL-Treiber geändert. (Auszug aus
diesem Post
Delphi-Quellcode:
//Delphi 11.2
const
C_2018_ODBC = '
ODBC DRIVER 18 FOR SQL SERVER';
C_2017_ODBC = '
ODBC DRIVER 17 FOR SQL SERVER';
C_2016_ODBC = '
ODBC DRIVER 13 FOR SQL SERVER';
C_2012_ODBC = '
ODBC DRIVER 11 FOR SQL SERVER';
...
C_2012_NC = '
SQL SERVER NATIVE CLIENT 11.0';
C_2008 = '
SQL SERVER NATIVE CLIENT 10.0';
C_2005 = '
SQL NATIVE CLIENT';
C_2000 = '
SQL SERVER';
...
procedure TFDPhysMSSQLDriver.InternalLoad;
begin
inherited InternalLoad;
if ODBCDriver = '
'
then
ODBCDriver := FindBestDriver(
{$IFDEF MSWINDOWS} [C_2018_ODBC, C_2017_ODBC, C_2012_NC, C_2016_ODBC, C_2012_ODBC, C_2008, C_2005, C_2000]
{$ENDIF}
{$IFDEF POSIX} [C_2018_ODBC, C_2017_ODBC, C_2016_ODBC, C_2012_ODBC, C_FreeTDS], C_FreeTDSLib
{$ENDIF}
);
end;
Vor Version 11.x hatte Delphi den Native Treiber bevorzugt geladen.
Delphi-Quellcode:
//Delphi 10.3.3
...
C_2012_NC = '
SQL SERVER NATIVE CLIENT 11.0';
...
procedure TFDPhysMSSQLDriver.InternalLoad;
begin
inherited InternalLoad;
if ODBCDriver = '
'
then
ODBCDriver := FindBestDriver(
{$IFDEF MSWINDOWS} [C_2012_NC, C_2016_ODBC, C_2012_ODBC, C_2017_ODBC, C_2008, C_2005, C_2000]
{$ENDIF}
{$IFDEF POSIX} [C_2016_ODBC, C_2012_ODBC, C_2017_ODBC, C_FreeTDS], C_FreeTDSLib
{$ENDIF}
);
end;
Das Problem:
Der
ODBC 18 Treiber bringt dann folgende Fehlermeldung:
Zitat:
Im Projekt xxx.exe ist eine
Exception der Klasse EMSSQLNativeException mit der Meldung '[FireDAC][Phys][
ODBC][Microsoft][
ODBC Driver 18 for
SQL Server]SSL-Anbieter: Die Zertifikatkette wurde von einer nicht vertrauenswürdigen Zertifizierungsstelle ausgestellt.
' aufgetreten.
Indem ich einen Verbindungsparameter geändert hatte, war diese Fehlermeldung weg:
Delphi-Quellcode:
WITH DM.FDConnection1.Params AS TFDPhysMSSQLConnectionDefParams { uses FireDAC.Phys.MSSQLDef } DO
BEGIN
...
Add( 'ENCRYPT=NO' );
Nun hatte ich in der
engl. DP gelesen, dass dort
ODBCAdvanced=TrustServerCertificate=true
angewendet wurde.
Da
MSSQL-Verbindungen ein wichtiges Thema (für mich) ist die Frage:
Was sollte man nun anwenden?
1. 'ENCRYPT=NO' oder
2. ODBCAdvanced=TrustServerCertificate=true