Как обезопасить соединение между приложением Vb6 и сервером mssql? - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю над устаревшим приложением, которое использует провайдера sqloledb и объекты данных activex для подключения к базе данных mssql.Теперь мне нужно зашифровать соединение между приложением и сервером без принудительного шифрования на сервере sql.

Я установил самозаверяющий сертификат в экземпляре сервера sql и попытался вставить Encrypt=true и Trustservercertificate=true вСтрока подключения.Но соединение не зашифровано.

Я пытался использовать ODBC-провайдера с ADO, и при использовании encrypt=true и trustservercertificate=true я получаю ошибку безопасности SSL, которая открывает соединение.

Пожалуйста, дайте мне знать, как установить безопасное соединение с использованием библиотеки ADO 2.8.

Private Sub Command1_Click()
    Dim sConnectionString As String
    Dim strSQLStmt As String

     '-- Build the connection string
     'sConnectionString = "UID=userid;PWD=password;Initial Catalog=EHSC_SYM_Kings_Development;Server=EHILP-257\MIB14;Provider=MSOLEDBSQL;Encrypt=YES;trustServerCertificate=YES"
     'sConnectionString = "Provider=sqloledb;Data Source=192.168.27.91\MIB14;Initial Catalog=EHSC_SYM_Kings_Development;User Id=userid;Password=password;Encrypt=YES;trustServerCertificate=YES"
     'sConnectionString = "driver={SQL Server};server=192.168.27.91\MIB14;user id=userid;password=password;Initial Catalog=EHSC_SYM_Kings_Development;Encrypt=Yes;trustServerCertificate=True"
     sConnectionString = "Provider=SQLNCLI11;Server=192.168.27.91\MIB14;Database=EHSC_SYM_Kings_Development;Uid=userid;Pwd=password;Encrypt=yes;trustServerCertificate=True"

     strSQLStmt = "select * from dbo.patient where pat_pid = '1001'"

    'DB WORK
    Dim db As New ADODB.Connection
    Dim cmd As New ADODB.Command
    Dim rs As New ADODB.Recordset
    Dim result As String

    db.ConnectionString = sConnectionString
    db.Open 'open connection

    With cmd
      .ActiveConnection = db
      .CommandText = strSQLStmt
      .CommandType = adCmdText
    End With

    With rs
      .CursorType = adOpenStatic
      .CursorLocation = adUseClient
      .LockType = adLockOptimistic
      .Open cmd
    End With

    If rs.EOF = False Then
        rs.MoveFirst
        Let result = rs.Fields(0)
    End If
    'close conns
    rs.Close
    db.Close
    Set db = Nothing
    Set cmd = Nothing
    Set rs = Nothing
End Sub

1 Ответ

0 голосов
/ 01 марта 2019

Спасибо всем за ваши предложения, мне наконец удалось сделать соединение безопасным, изменив драйвер на собственный клиент sqlserver 11 (ODBC).Похоже, у sqloledb нет поддержки tls.Смена драйвера на ODBC, похоже, не сильно меняет поведение.Остальная часть моего кода работает нормально без каких-либо изменений

sConnectionString = "Driver={SQL Server Native Client 11.0};Server=192.168.27.91\MIB14;Database=xxxxxxxx;user id=xxxxxxx;password=xxxxxxxxx;Encrypt=yes;TrustServerCertificate=yes"
...