Linuxのカスタムキーストアで保護されたAlwaysEncrypted列を操作するプロセスは次のとおりです。
- LinuxマシンにSQLServerODBCドライバー1.10.5以降をインストールします。
-
/etc/odbc.ini
でODBCデータソースを構成します 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
- このLinuxマシンで、次の2つの新しいファイルを作成します。
$ cd ~/Documents $ touch MyKSP.c KspApp.c
- サンプルのキーストアプロバイダーのコードをコピーしてMyKSP.cに貼り付けます。
- サンプルODBCアプリケーションのコードをコピーしてKspApp.cに貼り付けます。
- テキストエディタでMyKSP.cとKspApp.cを開きます。両方のファイルで、次の行を置き換えます:
#include "msodbcsql.h"
と:
#include <sqlncli.h>
32ビットノート サンプルODBCアプリケーションの32ビットバージョンを使用するには、KspApp.cのコードを変更する必要がありました。- 次の関数を追加しました:
{ wchar_t c1, c2; do { c1 = *s1++; c2 = *s2++; if (c1 == '\0') return c1 - c2; } while (c1 == c2); return c1 - c2; }
この行の直後:
static int safe_wcscmp( wchar_t *s1, wchar_t *s2 )
-
wcscmp
への呼び出しを置き換えましたsafe_wcscmp
を使用 。
- 次の関数を追加しました:
- コードをコンパイルし、結果のライブラリとアプリケーションに実行権限を設定します。例:
$ 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
- アプリケーション(KspApp)を実行します。このアプリケーションは、カスタムキーストア(MyKSP.so)を使用して、AlwaysEncrypted列をテーブルに作成して入力し、暗号化されていないデータを取得して、テーブルを削除します。
$ ./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
- 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...