2016-07-01 13 views
1

Ich habe eine Beispielanwendung mithilfe des OLE DB-Anbieters (SQLOLEDB und SQL Native OLEDB Provider) erstellt.Herstellen einer DB-Verbindung mithilfe von Microsoft OLE DB-Provider und SQL Native OLE DB-Provider

Fall 1: Provider = SQLOLEDB

hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); 
hr = cADOConnection.CreateInstance(__uuidof(Connection)); 
CString con_string = "provider=SQLOLEDB;server=MYPC;Database=MyDB"; 

CString SSlcon_string = "provider=SQLOLEDB;Encrypt=true;TrustServerCertificate=true;server=MYPC;Database=MyDB"; 
CString userName = "sa"; 
CString Password = "sa"; 
BSTR bsConnection = /*con_string*/SSlcon_string.AllocSysString(); 
BSTR uName = userName.AllocSysString(); 
BSTR uPassword = Password.AllocSysString(); 

hr = cADOConnection->Open(bsConnection, uName, uPassword, adConnectUnspecified); 
printf("connection has been established"); 
VARIANT vaNoRecords; 
memset(&vaNoRecords, 0, sizeof vaNoRecords); 
CString sql = "SELECT * FROM salary"; 
BSTR query = sql.AllocSysString(); 
_RecordsetPtr rs; 
rs = cADOConnection->Execute(query, &vaNoRecords, adCmdText); 
printf("connection has been established\n"); 

Ergebnis: Wenn Zertifikat auf Server installiert wird, dann ist die Verbindung sicher ist, unabhängig davon, ermöglicht Encrypt = true und trustservercertificate = true aus in Verbindungszeichenfolge.

Fall 2: Provider = SQLNCLI10.1 (SQL Native Client OLE DB-Provider)

HRESULT hr; 
hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); 
hr = cADOConnection.CreateInstance(__uuidof(Connection)); 
CString con_string = "provider=SQLNCLI10.1;server=MYPC;Database=MyDB"; 

CString SSlcon_string = "provider=SQLOLEDB;Encrypt=true;TrustServerCertificate=true;server=MYPC;Database=MyDB"; 
CString userName = "sa"; 
CString Password = "sa"; 
BSTR bsConnection = con_string/*SSlcon_string*/.AllocSysString(); 
BSTR uName = userName.AllocSysString(); 
BSTR uPassword = Password.AllocSysString(); 
hr = cADOConnection->Open(bsConnection, uName, uPassword, adConnectUnspecified); 
printf("connection has been established"); 
VARIANT vaNoRecords; 
memset(&vaNoRecords, 0, sizeof vaNoRecords); 
CString sql = "SELECT suppliernumber, name1 FROM zrs_supplier"; 
BSTR query = sql.AllocSysString(); 
_RecordsetPtr rs; 
rs = cADOConnection->Execute(query, &vaNoRecords, adCmdText); 
printf("connection has been established\n"); 

Ergebnis: Wenn Zertifikat auf Server installiert wird, dann ist die Verbindung sicher ist, unabhängig davon, ermöglicht Encrypt = true und trustservercertificate = true von in Verbindung string.ie Ergebnis ist das gleiche wie oben.

In beiden Fällen bekomme ich das gleiche Verhalten.Am fehlt etwas hier ?? Irgendwelche Vorschläge würden geschätzt ?? Original question


+2

Also, alles funktioniert gut. Was ist deine Frage? Das Anfügen von Fragezeichen an eine Anweisung (z. B. * "Jeder Vorschlag wäre erwünscht" *) macht daraus keine Frage. Das Hinzufügen von mehr wird das nicht ändern. – IInspectable

+0

Die Frage wird am Ende als "Ursprüngliche Frage" markiert :) Ich benutze beide SQLOLE DB-Anbieter, um SQL-Verbindung zu etablieren. Ich möchte eine SSL-Verbindung herstellen. Keine Ahnung, wie das geht. Ich habe selbstsigniertes Zertifikat auf dem SQL-Server installiert und kann die SSL-Verbindung herstellen, aber ich möchte nur meinen MFC-Client verwenden, um das Zertifikat zu verwenden und die SSL-Verbindung einzurichten. –

+0

Mein MFC-Client sagt nicht, eine sichere Verbindung herzustellen, obwohl SSL-Verbindung hergestellt wird, wenn Zertifikat installiert ist. Ich möchte nur mein MFC-Client das Zertifikat überprüfen und die SSL-Verbindung herstellen. –

Antwort

0

die Verbindungszeichenfolge Ersetzen durch

CString SSlcon_string = "provider=SQLOLEDB;Use Data For Encryption=True;server=MYPC;Database=MyDB"; 

Die übrigen Schritte same.Install dasselbe Zertifikat (vorhanden auf dem Server) sein wird, auf der Client-Maschine "Truted Stammzertifizierungsstellen" -Ordner.

Wenn Server und Client beide das gleiche Zertifikat haben, wird die Verbindung hergestellt (SSL-Verbindung), andernfalls fehlgeschlagen.