Database
 sql >> Base de données >  >> RDS >> Database

Utilisation de données protégées avec un magasin de clés personnalisé à partir de Linux

Le processus d'utilisation des colonnes Always Encrypted sécurisées par le magasin de clés personnalisé à partir de Linux est le suivant :

  1. Installez le pilote ODBC SQL Server 1.10.5+ sur votre machine Linux.
  2. Configurer une source de données ODBC dans /etc/odbc.ini qui se connecte à une instance 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. Sur cette machine Linux, créez deux nouveaux fichiers :
    $ cd ~/Documents
    $ touch MyKSP.c KspApp.c
  4. Copiez et collez le code de l'exemple de fournisseur de magasin de clés dans MyKSP.c.
  5. Copiez et collez le code de l'exemple d'application ODBC dans KspApp.c.
  6. Ouvrez MyKSP.c et KspApp.c dans un éditeur de texte. Dans les deux fichiers, remplacez cette ligne :
    #include "msodbcsql.h"

    avec :

    #include <sqlncli.h>
    Note 32 bits Pour utiliser une version 32 bits de l'exemple d'application ODBC, nous avons dû modifier le code dans KspApp.c :
    1. Nous avons ajouté cette fonction :
      {
          wchar_t c1, c2;
      
          do {
              c1 = *s1++;
              c2 = *s2++;
              if (c1 == '\0')
                  return c1 - c2;
              }
          while (c1 == c2);
          return c1 - c2;
      }

      immédiatement après cette ligne :

      static int safe_wcscmp( wchar_t *s1, wchar_t *s2 )
    2. Nous avons remplacé les appels à wcscmp avec safe_wcscmp .
  7. Compilez le code et définissez l'autorisation d'exécution sur la bibliothèque et l'application résultantes. Par exemple :
    $ 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. Exécutez l'application (KspApp), qui utilise le magasin de clés personnalisé (MyKSP.so) pour créer et remplir une table avec des colonnes AlwaysEncrypted, récupère les données non chiffrées et supprime la table :
    $ ./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...