Database
 sql >> Database >  >> RDS >> Database

Utilizzo di dati protetti con un archivio chiavi personalizzato da Linux

Il processo per lavorare con le colonne Always Encrypted protette dall'archivio chiavi personalizzate da Linux è:

  1. Installa il driver ODBC di SQL Server 1.10.5+ sulla tua macchina Linux.
  2. Configura un'origine dati ODBC in /etc/odbc.ini che si connette a un'istanza di SQL Server 2016+:
    [SQLSERVER_2016]
    Driver=Easysoft ODBC-SQL Server SSL
    Server=machine\sqlserver_instance
    Database=database_with_always_encrypted_data
    User=user # This can be a Windows or SQL Server login.
    Password=password
    Trusted_Connection=Yes # Set this to No for a SQL Server login
    ColumnEncryption=Enabled
  3. Su questa macchina Linux, crea due nuovi file:
    $ cd ~/Documents
    $ touch MyKSP.c KspApp.c
  4. Copia e incolla il codice per l'esempio di Keystore Provider in MyKSP.c.
  5. Copia e incolla il codice per l'applicazione ODBC di esempio in KspApp.c.
  6. Apri MyKSP.ce KspApp.c in un editor di testo. In entrambi i file, sostituisci questa riga:
    #include "msodbcsql.h"

    con:

    #include <sqlncli.h>
    Nota a 32 bit Per utilizzare una versione a 32 bit dell'applicazione ODBC di esempio, abbiamo dovuto modificare il codice in KspApp.c:
    1. Abbiamo aggiunto questa funzione:
      {
          wchar_t c1, c2;
      
          do {
              c1 = *s1++;
              c2 = *s2++;
              if (c1 == '\0')
                  return c1 - c2;
              }
          while (c1 == c2);
          return c1 - c2;
      }

      subito dopo questa riga:

      static int safe_wcscmp( wchar_t *s1, wchar_t *s2 )
    2. Abbiamo sostituito le chiamate a wcscmp con safe_wcscmp .
  7. Compila il codice e imposta l'autorizzazione di esecuzione sulla libreria e sull'applicazione risultanti. Ad esempio:
    $ gcc -I/usr/local/easysoft/unixODBC/include -I/usr/local/easysoft/sqlserver/include \
    	                             -fshort-wchar -fPIC -o MyKSP.so -shared MyKSP.c
    $ gcc -I/usr/local/easysoft/unixODBC/include -I/usr/local/easysoft/sqlserver/include \
                                         -fshort-wchar -fPIC -o KspApp -fshort-wchar \
    	                             KspApp.c -lodbc -L/usr/local/easysoft/unixODBC/lib/ \
                	                     -L/usr/lib/x86_64-linux-gnu/libdl.so -ldl
    $ chmod +x MyKSP.so KspApp
  8. Esegui l'applicazione (KspApp), che utilizza l'archivio chiavi personalizzato (MyKSP.so) per creare e popolare una tabella con colonne AlwaysEncrypted, recupera i dati non crittografati e rilascia la tabella:
    $ ./KspApp DSN=SQLSERVER_2016
    Press Enter to continue...
    
    KSP Decrypt() function called (keypath=Retrieved data: c1=1 c2=Sample data 0 for column 2
    Retrieved data: c1=12 c2=Sample data 1 for column 2
    	
  9. Prior to cleaning up the sample data, we used isql to confirm that, for an application that does not have access to the custom key vault, the data is encrypted. We turned off ColumnEncryption for this application, because unless is done the SQL Server ODBC driver will attempt to decrypt the data with a local key store, which will not work:
    /usr/local/easysoft/unixODBC/bin/isql -v -k "DRIVER={Easysoft ODBC-SQL Server SSL};Server=machine\sqlserver_instance;
                                  UID=user;PWD=password;Database=database_with_always_encrypted_data;ColumnEncryption=No"
    SQL> select top 1 c2 from CustomKSPTestTable
    +----+
    | c2 |
    +----+
    | 0104590D628739293CD8D455BD43EC59...