【问题标题】:Establish DB connection by using Microsoft OLE DB provider and SQL Native OLE DB provider使用 Microsoft OLE DB 提供程序和 SQL Native OLE DB 提供程序建立 DB 连接
【发布时间】:2016-11-03 20:04:29
【问题描述】:

我使用 oledb 提供程序(SQLOLEDB 和 SQL Native OLEDB 提供程序)创建了一个示例应用程序。

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

结果:如果服务器机器上安装了证书,那么无论是否启用,连接都是安全的 Encrypt=true 和 TrustServerCertificate=true 来自连接字符串。

案例2:Provider = SQLNCLI10.1(SQL native client oledb 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");

结果:如果服务器机器上安装了证书,那么无论是否启用,连接都是安全的 Encrypt=true and TrustServerCertificate=true from in connection string.i.e 结果同上。

在这两种情况下,我的行为都相同。我在这里遗漏了什么吗? 任何建议将不胜感激?? Original question


【问题讨论】:

  • 所以,一切正常。你的问题是什么?将问号附加到语句(例如“任何建议将不胜感激”)不会将其变成问题。添加更多不会改变这一点。
  • 问题最后被标记为“原始问题”:) 我同时使用 SQLOLE DB 提供程序来建立 sql 连接。我想建立 SSL 连接。不知道该怎么做。我在 sql server 上安装了自签名证书并能够建立 SSL 连接,但我只希望我的 MFC 客户端使用证书并设置 SSL 连接。
  • 如果安装了证书,即使正在建立 SSL 连接,我的 MFC 客户端也没有告诉建立安全连接。我只希望我的 MFC 客户端验证证书并建立 SSL 连接。

标签: sql-server winapi ssl encryption oledbconnection


【解决方案1】:

将连接字符串替换为

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

其余步骤相同。在客户端计算机的“可信根证书颁发机构”文件夹中安装相同的证书(存在于服务器上)。

如果服务器和客户端都拥有相同的证书,则将建立连接(SSL 连接),否则失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多