2016-07-01 3 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"); 

결과 : 인증서가 서버 시스템에 설치되어있는 경우 연결에 관계없이 연결 문자열에서 암호화 = true로 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에서 참 true 결과는 위와 같습니다.

나는 양쪽 모두 같은 behavior.Am 나는 여기에 뭔가가 빠졌어요 ?? 제안 사항을 보내 주시면 감사하겠습니다. Original question


+2

그래서 모든 것이 잘 진행되고 있습니다. 귀하의 질문은 무엇인가? 진술에 물음표를 추가하면 (예 : * "Any Suggestion would apprecfully"*) 문항이 질문으로 바뀌지 않습니다. 더 추가하면 변경되지 않습니다. – IInspectable

+0

질문은 끝에 "원래 질문"태그가 붙어 있습니다 :) SQL 연결을 확립하는 SQLOLE DB 공급자를 사용하고 있습니다. SSL 연결을 설정하고 싶습니다. 그 방법을 모르는. 나는 SQL 서버에 자체 서명 된 인증서를 설치하고 SSL 연결을 만들 수 있지만 내 MFC 클라이언트 만 인증서 및 설치 SSL 연결을 사용하기를 원합니다. –

+0

인증서가 설치되어 있으면 SSL 연결이 설정되어 있어도 내 MFC 클라이언트가 보안 연결을 설정하지 못합니다. 내 MFC 클라이언트 만 인증서의 유효성을 검사하고 SSL 연결을 설정하기를 원합니다. –

답변

0

는 나머지 단계가 될 것이다에게

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

와 클라이언트 시스템의 "truted 루트 인증 기관"폴더 (서버에 존재) same.Install 동일한 인증서를 연결 문자열을 교체합니다.

서버와 클라이언트 모두 동일한 인증서를 가지고 있으면 연결이 설정되고 그렇지 않으면 SSL 연결이 실패합니다.