MySQL 8.0 リファレンスマニュアル


5.6.8.2 キーリングサービス

MySQL Server は、内部コンポーネントおよびプラグインが機密情報を安全に格納して後で取得できるようにするキーリングサービスをサポートしています。 MySQL ディストリビューションは、次の 2 つのレベルでアクセスできるキーリングインタフェースを提供します:

  • SQL レベルでは、サービスルーチンへのコールにマップされる一連のユーザー定義関数 (UDF) として。

  • C 言語インタフェースとして、サーバープラグインまたはユーザー定義関数からプラグインサービスとして呼び出すことができます。

このセクションでは、キーリングサービス関数を使用して、MySQL キーリングキーストアのキーを格納、取得および削除する方法について説明します。 UDF を使用する SQL インタフェースについては、セクション6.4.4.10「汎用キーリングキー管理関数」 を参照してください。 一般的な鍵リング情報については、セクション6.4.4「MySQL キーリング」 を参照してください。

キーリングサービスは、有効になっているベースとなるキーリングプラグインがあれば、それを使用します。 キーリングプラグインが有効になっていない場合、キーリングサービスの呼び出しは失敗します。

キーストア内の record は、データ (キー自体) と、キーへのアクセスに使用される一意の識別子で構成されます。 識別子には、次の 2 つの部分があります:

  • key_id: キー ID またはキー名。mysql_で始まる key_id 値は、MySQL Server によって予約されています。

  • user_id: セッションの実効ユーザー ID。 ユーザーコンテキストがない場合、この値は NULL にすることができます。 値は実際には user である必要はありません。意味はアプリケーションによって異なります。

    キーリング UDF インタフェースを実装する関数は、CURRENT_USER() の値を user_id 値としてキーリングサービス関数に渡します。

鍵リングサービス関数には、次のような共通の特性があります:

  • 各関数は、成功した場合は 0、失敗した場合は 1 を返します。

  • key_id 引数と user_id 引数は、キーリング内のどのキーを使用するかを示す一意の組合せを形成します。

  • key_type 引数は、暗号化方法や使用目的など、キーに関する追加情報を提供します。

  • キーリングサービス関数は、キー ID、ユーザー名、タイプおよび値をバイナリ文字列として扱うため、比較では大文字と小文字が区別されます。 たとえば、MyKeymykey の ID は異なるキーを参照します。

次のキーリングサービス関数を使用できます:

  • my_key_fetch()

    キーリングからキーを不明瞭化し、そのタイプとともに取得します。 この関数は、戻されたキーおよびキータイプの格納に使用されるバッファにメモリーを割り当てます。 コール元は、不要になったメモリーをゼロまたは不明瞭化してから解放する必要があります。

    構文:

    bool my_key_fetch(const char *key_id, const char **key_type,
                      const char* user_id, void **key, size_t *key_len)

    引数:

    • key_id, user_id: ペアとしての NULL で終了する文字列は、フェッチするキーを示す一意の識別子を形成します。

    • key_type: バッファポインタのアドレス。 この関数は、(キーの追加時に格納された) キーに関する追加情報を提供する NULL で終わる文字列へのポインタを格納します。

    • key: バッファポインタのアドレス。 この関数は、フェッチされたキーデータを含むバッファへのポインタを格納します。

    • key_len: 関数が *key バッファのサイズをバイト単位で格納する変数のアドレス。

    戻り値:

    成功した場合は 0、失敗した場合は 1 を返します。

  • my_key_generate()

    指定されたタイプと長さの新しいランダムキーを生成し、キーリングに格納します。 キーの長さは key_len で、key_id および user_id から形成された識別子に関連付けられます。 型と長さの値は、基礎となるキーリングプラグインでサポートされている値と一致している必要があります。 セクション6.4.4.8「サポートされているキーリングキーのタイプと長さ」を参照してください。

    構文:

    bool my_key_generate(const char *key_id, const char *key_type,
                         const char *user_id, size_t key_len)

    引数:

    • key_id, user_id: ペアとしての NULL で終了する文字列は、生成されるキーの一意の識別子を形成します。

    • key_type: キーに関する追加情報を提供する NULL で終わる文字列。

    • key_len: 生成されるキーのサイズ (バイト単位)。

    戻り値:

    成功した場合は 0、失敗した場合は 1 を返します。

  • my_key_remove()

    キーリングからキーを削除します。

    構文:

    bool my_key_remove(const char *key_id, const char* user_id)

    引数:

    • key_id, user_id: ペアとしての NULL で終了する文字列は、削除されるキーの一意の識別子を形成します。

    戻り値:

    成功した場合は 0、失敗した場合は 1 を返します。

  • my_key_store()

    キーリングにキーを不明瞭化して格納します。

    構文:

    bool my_key_store(const char *key_id, const char *key_type,
                      const char* user_id, void *key, size_t key_len)

    引数:

    • key_id, user_id: ペアとしての NULL 終了文字列は、格納されるキーの一意の識別子を形成します。

    • key_type: キーに関する追加情報を提供する NULL で終わる文字列。

    • key: 格納されるキーデータを含むバッファ。

    • key_len: key バッファのサイズ (バイト単位)。

    戻り値:

    成功した場合は 0、失敗した場合は 1 を返します。


関連キーワード:  key, キー, サービス, サーバー, 関数, 変数, user, リファレンス, 格納, インストール