Pracuję nad starszym wnioskiem, który wykorzystuje dostawcę SQLOLEDB i obiektów danych ActiveX do łączenia się z bazą danych MSSQL. Teraz muszę zaszyfrować połączenie między aplikacją a serwerem bez opcji Sicle Secryption w SQL Server.

Zainstalowałem z podpisanym certyfikatem w instancji serwera SQL i próbowałem umieścić Encrypt=true i Trustservercertificate=true w ciągu połączenia. Ale połączenie nie jest szyfrowane.

Próbowałem użyć dostawcy ODBC z ADO i podczas używania encrypt=true i trustservercertificate=true otrzymuję błąd bezpieczeństwa SSL, który otwierający połączenie.

Daj mi znać, jak nawiązać bezpieczne połączenie za pomocą biblioteki 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
Sai Manibalan 27 luty 2019, 13:08

2 odpowiedzi

Najlepsza odpowiedź

Dziękujemy za swoje sugestie, w końcu udało mi się uruchomić połączenie, zmieniając kierowcę do SQLServer Native Client 11 (ODBC). Wygląda na to, że SqloledB nie ma obsługi TLS. Zmiana kierowcy do ODBC nie wydaje się wiele zmieniać zachowania. Reszta mojego kodu działa dobrze bez zmian

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"
0
Sai Manibalan 21 lipiec 2019, 17:30

Po prostu przeszedł to sam.

W przypadku twojego pierwotnego ciągu połączenia słowo kluczowe, którego szukasz To "Używaj szyfrowania dla danych = true".

Więc twój ciąg połączeń staje się:

sConnectionString = "Provider=SQLNCLI11;Server=192.168.27.91\MIB14;Database=EHSC_SYM_Kings_Development;Uid=userid;Pwd=password;Use Encryption for Data=true;trustServerCertificate=True"

TrustserverCertificate = true to tylko do testowania z identyfikatorem pocztowym ... i ujawniając się do ataków człowieka;)

W odniesieniu do odniesienia została przetestowana z: VB6 łącząc się z SQL Server 2016 za pomocą dostawcy SQLNCLI11 przez Adodb.

0
TheLostBrain 17 kwiecień 2020, 22:11