2016-07-01 32 views
1

oledbプロバイダ(SQLOLEDBとSQLネイティブOLEDBプロバイダ)の両方を使用してサンプルアプリケーションを作成しました。Microsoft OLE DBプロバイダとSQLネイティブOLE DBプロバイダを使用してDB接続を確立

ケース1:プロバイダ= 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"); 

結果:証明書は、サーバー・マシン上にインストールされている場合、接続は関係なく、接続文字列内から 暗号化=真とTrustServerCertificate =真を有効にする安全です。

ケース2:プロバイダ= SQLNCLI10.1(SQLネイティブクライアントOLEDBプロバイダ)

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"); 

結果:証明書は、サーバー・マシン上にインストールされている場合、接続は=かかわらず 暗号化を有効にする真の安全であるとTrustServerCertificate =接続string.ieの真の結果は上記と同じです。

どちらの場合も、私は同じ振る舞いをしています。ここに何か不足していますか? 提案は歓迎されるでしょうか? Original question


+2

だから、すべてうまくいきます。あなたの質問は何ですか?ステートメントに疑問符を付けると(たとえば、*「任意の提案は評価されます」*)、問題にはなりません。それ以上の追加はそれを変更しません。 – IInspectable

+0

質問は最後に "オリジナルの質問"とタグ付けされています:)私はSQL接続を確立するために両方のSQLOLE DBプロバイダを使用しています。 SSL接続を確立したいそれを行う方法はわかりません.Sqlサーバーに自己署名入りの証明書をインストールし、SSL接続を確立することができましたが、MFCクライアントのみが証明書とセットアップSSL接続を使用します。 –

+0

証明書がインストールされている場合、SSL接続が確立されているにもかかわらず、MFCクライアントがセキュリティで保護された接続を確立しようとしていません.MFCクライアントのみが証明書を検証し、SSL接続を確立します。 –

答えて

0

残りのステップは、クライアント・マシンの「trutedルート証明機関」フォルダにsame.Install同じ証明書(サーバー上に存在)となります

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

で接続文字列を置き換えます。

サーバーとクライアントの両方が同じ証明書を持つ場合、接続が確立されます(SSL接続)。そうでない場合は失敗します。

関連する問題