sql >> データベース >  >> RDS >> MariaDB

MariaDBデータを暗号化するさまざまな方法を探る

    転送中および保存中のMariaDBデータベースを暗号化することは、データを評価する場合に組織が考慮する必要がある最も重要なことの1つです。

    金融取引、医療記録、機密情報、さらには個人データを扱う組織は、このタイプのデータ保護を必要とします。基本的に、データベースの暗号化は、読み取り可能なデータを、許可されていないユーザーが読み取れない(または少なくとも復号化するのが難しい)形式に変換します。

    データを暗号化することで、ハッカーや許可されていない人がビジネスに損害を与える可能性のある誤用や悪意を防ぐことができます。暗号化されていないデータは、インフラストラクチャに損害を与えたり情報を盗んだりする可能性のある悪意のあるデータを注入するハッカーによって攻撃される傾向があります。 Quartzは最近、これらの線に沿って発生した最大の違反に関する記事をリリースしました。過去20年間に、数十億のアカウントからデータが盗まれたことは憂慮すべきことです。

    関連リソースMySQLとMariaDBのバックアップを暗号化する方法データベースのセキュリティ-転送中および保存中のバックアップ暗号化更新:ClusterControlDBAになる-SSLキー管理と転送中のMySQLデータの暗号化

    このブログでは、MariaDBデータが保存中か転送中かを問わず、暗号化するさまざまな方法について説明します。暗号化の基本的な理解とその使用方法を提供し、これらのアプローチを利用してデータを安全に保つことができるようにします。

    MariaDBデータの暗号化:転送中

    MariaDBは、デフォルトでは、サーバーからクライアントへのネットワークを介したデータ送信中に暗号化を使用しません。ただし、デフォルトの設定を使用すると、潜在的なハッカーがセキュリティで保護されていない/暗号化されていないチャネルを盗聴する可能性があります。隔離された環境または安全性の高い環境で操作している場合は、このデフォルト状態が許容される場合があります。ただし、これは、潜在的な「中間者」攻撃に備えてデータベースをセットアップするため、クライアントとネットワークが異なるネットワーク上にある場合には理想的ではありません。

    これらの攻撃を回避するために、MariaDBでは、トランスポート層セキュリティ(TLS)プロトコル(旧称Secure Socket LayerまたはSSL)を使用して、サーバーとクライアント間で転送中のデータを暗号化できます。開始するには、MariaDBサーバーがTLSサポートでコンパイルされていることを確認する必要があります。これは、以下に示すようにSHOWGLOBALVARIABLESステートメントを実行することで確認できます。

    MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'version_ssl_library';
    +---------------------+---------------------------------+
    | Variable_name       | Value                           |
    +---------------------+---------------------------------+
    | version_ssl_library | OpenSSL 1.0.1e-fips 11 Feb 2013 |
    +---------------------+---------------------------------+
    1 row in set (0.001 sec)

    SSLとTSLの違いに戸惑うかもしれません。ドキュメントではSSLという用語を使用する場合があり、構成の変数ではプレフィックスとしてssl_ *も使用されますが、MariaDBは安全な後継者のみをサポートし、古いSSLバージョンはサポートしていません。使用する必要のあるTLSバージョンの適切なサポートを必要とするMariaDBの正しいバージョンを識別して使用する必要がある場合があります。たとえば、PCI DSS v3.2では、古いバージョンのMariaDBがサポートするTLSv1.2の最小プロトコルバージョンを使用することをお勧めします。ただし、TLS 1.3では、OpenSSL 1.1.1が必要であり、通信する2つのシステム間のハンドシェイクがより効率的であるため高速です。これは、MariaDB10.2.16およびMariaDB10.3.8以降でサポートされています。

    特定のTLSバージョンで使用可能な暗号を利用するには、 -ssl-cipherを使用して暗号を定義できます。 mysqld コマンドまたはssl-cipher 構成ファイルの変数。 OpenSSLを使用する場合、ssl_cipherシステム変数を使用していても、TLSv1.3暗号を除外できないことに注意してください。

    転送中のデータを暗号化するための構成パラメーター

    転送中のデータを暗号化するには、以下に示す一連のコマンドを実行できます。

    CA証明書を生成する

    openssl genrsa 2048 > ca-key.pem
    openssl req -new -x509 -nodes -days 365000 -subj "/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server"  -key ca-key.pem -out ca-cert.pem

    サーバー証明書を生成する

    openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem -subj "/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=DB Server" 
    openssl  rsa -in server-key.pem -out server-key.pem
    openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

    クライアント証明書を生成する

    openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem  -subj "/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=Client Server"
    openssl rsa -in client-key.pem -out client-key.pem
    openssl  x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

    -subj の共通名(CN)に注意してください 引数は、生成するCA、サーバー、およびクライアントの証明書に対して一意である必要があります。技術的には、CAとサーバーは同じCNを持つことができますが、これら3つの一意の識別子にするのが最善です。そうしないと、次のようなエラーが発生します:

    ERROR 2026 (HY000): SSL connection error: tlsv1 alert unknown ca

    了解しました。証明書とキーが用意されています。 MySQL構成ファイルのssl_*変数を使用してパスを指定する必要があります(たとえば、RHELベースのOSの場合は/etc/my.cnf、Debian / UbuntuOSの場合は/etc/mysql/my.cnf)。以下の設定例を参照してください:

    [msqld]
    ...
    ssl_ca=/etc/ssl/galera/self-gen/ca-cert.pem
    ssl_cert=/etc/ssl/galera/self-gen/server-cert.pem
    ssl_key=/etc/ssl/galera/self-gen/server-key.pem

    もちろん、証明書とキーを配置した正しいパスを指定する必要があります。

    次に、これらのパラメータを [client-mariadb]の下に配置します 以下のような構成ファイルのセクション:

    [client-mariadb]
    ssl_ca = /etc/ssl/galera/self-gen/ca-cert.pem
    ssl_cert=/etc/ssl/galera/self-gen/client-cert.pem
    ssl_key=/etc/ssl/galera/self-gen/client-key.pem

    前述のように、SSL/TLS構成で使用できる暗号のタイプを指定できます。これは、以下の構成設定を指定することで実行できます。

    [mysqld]
    …
    ssl_ca=/etc/ssl/galera/self-gen/ca-cert.pem
    ssl_cert=/etc/ssl/galera/self-gen/server-cert.pem
    ssl_key=/etc/ssl/galera/self-gen/server-key.pem
    ssl-cipher=AES256-GCM-SHA384

    または、以下の構成を以下のように使用できます。

    ssl-cipher=TLSv1.2      ### This will use all Ciphers available in TLS v1.2
    ssl-cipher=HIGH:!DSS:!RCA-SHA:!DES-CBC3-SHA:[email protected]       ### Will list strong ciphers available and exclude ciphers in prefix.

    最後の行は、このコマンドに相当するものを示しています:

    openssl ciphers -v 'HIGH:!DSS:!RCA-SHA:!DES-CBC3-SHA:[email protected]'

    これにより、弱い暗号と、 DHE-DSS-AES256-GCM-SHA384などのプレフィックス形式の暗号は除外されます。 たとえば暗号。

    ClusterControlを使用した証明書の生成

    または、ClusterControlを使用して証明書とキーを生成することもできます。これを行うには、以下に示すように次のことを行うことができます。

    1. MariaDBクラスターを選択し、セキュリティに移動します タブをクリックし、SSL暗号化を選択します。以下の私の例では、これはMariaDBGaleraクラスターです。
    2. SSL暗号化を選択して有効にします。新しい証明書を作成することも、既存の証明書を選択することもできます。このサンプルでは、​​「証明書の作成」オプションを選択します。
    3. 最後のステップは、証明書の有効期限を構成することです。下記参照: [ノードの再起動]をクリックすると、ClusterControlはローリングリスタートを実行します。 MariaDB 10.4(現在RCバージョン)を使用している場合は、MariaDBサーバーを再起動せずにSSLを使用できることに注意してください。 MariaDB10.4バージョンで追加された新機能であるFLUSHSSLコマンドを使用するだけです。

    TLS / SSL証明書/キーを処理する別の方法として、キー管理を使用することもできます。 ClusterControlの下。これを行う方法の詳細については、このブログをチェックしてください。

    TLS /SSLMariaDBユーザーを作成する

    終わったと思ったとしても、そうではありません。ユーザーがサーバーに接続するときにSSLを使用する必要があることを確認する必要があります。このユーザーは、常にプライベートチャネルを介してサーバーと対話する必要があります。すべてのクライアントが非常に安全でプライベートな方法でサーバーと対話することを確認する必要があるため、これは非常に重要です。

    これを行うには、次の例を実行します。

    MariaDB [(none)]> CREATE USER [email protected]'192.168.10.200' IDENTIFIED BY '[email protected]';
    Query OK, 0 rows affected (0.005 sec)
    MariaDB [(none)]> GRANT ALL ON *.* TO [email protected]'192.168.10.200' REQUIRE SSL;
    Query OK, 0 rows affected (0.005 sec)

    クライアント/アプリケーションホストに接続するときに、前の手順に基づいて生成した証明書をコピーしてください。

    接続の確認

    接続が暗号化されているかどうかをテストすることは、ステータスを判断するために非常に重要です。これを行うには、以下のコマンドを実行できます。

    mysql -e "status"|grep -i 'cipher'
    SSL:                    Cipher in use is DHE-RSA-AES256-GCM-SHA384

    または、OpenSSLバージョン1.1.1で -starttls mysqlのサポートが追加されました 。 https://testssl.sh/openssl-1.0.2k-dev-chacha.pm.ipv6.Linux+FreeBSD.tar.gz(またはPDF形式でこのプレゼンテーションをチェックアウト)で入手できる、静的にコンパイルされたopensslバイナリが利用可能です。 。次に、以下のコマンドを実行できます。

    echo | bin/openssl.Linux.x86_64.static s_client -starttls mysql -connect localhost:3306 -CAfile /etc/ssl/galera/self-gen/ca-cert.pem

    結果の例は次のようになります。

    $ echo | bin/openssl.Linux.x86_64.static s_client -starttls mysql -connect localhost:3306 -CAfile /etc/ssl/galera/self-gen/ca-cert.pem 
    CONNECTED(00000003)
    depth=1 C = PH, ST = Davao Del Sur, L = Davao City, O = Maximus Aleksandre, CN = CA Server
    verify return:1
    depth=0 C = PH, ST = Davao Del Sur, L = Davao City, O = Maximus Aleksandre, CN = DB Server
    verify return:1
    ---
    Certificate chain
     0 s:/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=DB Server
       i:/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server
     1 s:/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server
       i:/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    MIIDTDCCAjQCAQEwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCUEgxFjAUBgNV
    BAgMDURhdmFvIERlbCBTdXIxEzARBgNVBAcMCkRhdmFvIENpdHkxGzAZBgNVBAoM
    Ek1heGltdXMgQWxla3NhbmRyZTESMBAGA1UEAwwJQ0EgU2VydmVyMCAXDTE5MDYx
    MDAyMTMwNFoYDzMwMTgxMDExMDIxMzA0WjBrMQswCQYDVQQGEwJQSDEWMBQGA1UE
    CAwNRGF2YW8gRGVsIFN1cjETMBEGA1UEBwwKRGF2YW8gQ2l0eTEbMBkGA1UECgwS
    TWF4aW11cyBBbGVrc2FuZHJlMRIwEAYDVQQDDAlEQiBTZXJ2ZXIwggEiMA0GCSqG
    SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNwFuoqJg8YlrDinxDZN4+JjFUTGlDfhmy
    9H/1C4fZToegvd3RzU9mz3/Fgyuoez4szHDgkn7o4rqmKAH6tMm9R44qtBNGlxka
    fn12PPXudDvij4A9C3nVatBJJXTSvSD4/eySY33kAS1DpKsgsTgKAKOsyadcvXYU
    IP5nfFc7pxX/8qZADVmyeik4M+oLxO6ryurt0wmUhOmlz5zQghh9kFZLA49l+p95
    m5D53d/O+Qj4HSb2ssZD2ZaRc2k4dMCVpa87xUbdP/VVLeu0J4BE3OJiwC0N1Jfi
    ZpP2DOKljsklaAYQF+tPnWi5pgReEd47/ql0fNEjeheF/MJiJM1NAgMBAAEwDQYJ
    KoZIhvcNAQELBQADggEBAAz7yB+UdNYJ1O5zJI4Eb9lL+vNVKhRJ8IfNrwKVbpAT
    eQk9Xpn9bidfcd2gseqDTyixZhWjsjO2LXix7jRhH1DrJvhGQ7+1w36ujtzscTgy
    ydLH90CnE/oZHArbBhmyuqmu041w5rB3PpI9i9SveezDrbVcaL+qeGo8s4ATB2Yr
    Y3T3OTqw6o/7cTJJ8S1aXBLTyUq5HAtOTM2GGZMSYwVqUsmBHA3d7M8i7yp20RVH
    78j1H6+/hSSY4SDhwr04pSkzmm6HTIBCgOYrmEV2sQ/YeMHqVrSplLRY3SZHvqHo
    gbSnasOQAE1oJnSNyxt9CRRAghM/EHEnsA2OlFa9iXQ=
    -----END CERTIFICATE-----
    subject=/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=DB Server
    issuer=/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server
    ---
    No client certificate CA names sent
    Client Certificate Types: RSA fixed DH, DSS fixed DH, RSA sign, DSA sign, ECDSA sign
    Requested Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
    Shared Requested Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
    Peer signing digest: SHA512
    Server Temp Key: DH, 2048 bits
    ---
    SSL handshake has read 3036 bytes and written 756 bytes
    ---
    New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : DHE-RSA-AES256-GCM-SHA384
        Session-ID: 46E0F6FA42779DB210B4DF921A68E9E4CC39ADD87D28118DB0073726B98C0786
        Session-ID-ctx: 
        Master-Key: 2A2E6137929E733051BE060953049A0553F49C2F50A183EEC0C40F7EFB4E2749E611DF54A88417518A274EC904FB3CE6
        Key-Arg   : None
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        TLS session ticket lifetime hint: 300 (seconds)
        TLS session ticket:
        0000 - 4a dd f3 7f 1e b7 9e cb-77 58 b9 75 53 34 5c 61   J.......wX.uS4\a
        0010 - 3a 4d 0e aa e2 6b 27 8e-11 ff be 24 ad 66 88 49   :M...k'....$.f.I
        0020 - c1 ba 20 20 d8 9f d5 5c-23 9d 64 dc 97 f2 fa 77   ..  ...\#.d....w
        0030 - bf e6 26 1f 2c 98 ee 3b-71 66 0c 04 05 3e 54 c1   ..&.,..;qf...>T.
        0040 - 88 b6 f7 a9 fd b8 f9 84-cd b8 99 9f 6e 50 3b 13   ............nP;.
        0050 - 90 30 91 7d 48 ea 11 f7-3f b7 6b 65 2e ea 7e 61   .0.}H...?.ke..~a
        0060 - 70 cd 4e b8 43 54 3d a0-aa dc e5 44 a7 41 3a 5e   p.N.CT=....D.A:^
        0070 - 3e cb 45 57 33 2b a4 8f-75 d8 ce a5 9e 00 16 50   >.EW3+..u......P
        0080 - 24 aa 7a 54 f8 26 65 74-11 d7 f3 d6 66 3b 14 60   $.zT.&et....f;.`
        0090 - 33 98 4a ef e2 17 ba 33-4e 7f 2b ce 46 d7 e9 11   3.J....3N.+.F...
    
        Start Time: 1560133350
        Timeout   : 300 (sec)
        Verify return code: 0 (ok)
    ---
    DONE
    データベースインフラストラクチャ全体のClusterControlSingleコンソールClusterControlのその他の新機能を確認するClusterControlを無料でインストール

    MariaDBデータの暗号化:保存データ

    ハードウェアストレージ内に物理的に保存されている(つまり、保存されている)暗号化されたデータは、データ侵害に対する安定性と保護を強化します。悪意のある攻撃者がMariaDBデータベースにログインできる場合、攻撃者はプレーンテキストでデータを読み取ることができます。 Linuxでstringsコマンドを使用するのと同様に、データベースからデータを簡単に取得できます。さらに、攻撃者がテーブルスペースのファイル形式を高度に理解していると、さらに危険が増します。

    保管時の暗号化は追加の保護ですが、優れたファイアウォール、強力なパスワード、正しいユーザー権限、およびクライアントとサーバー間の転送中の暗号化に代わるものではありません。

    テーブルとテーブルスペースでの暗号化に対するMariaDBのサポートは、バージョン10.1.3で追加されました。テーブルが暗号化されているため、誰かがデータを盗むことはほとんど不可能です。このタイプの暗号化により、組織はGPDRなどの政府規制に準拠することもできます。

    MariaDBで保存データの暗号化を有効にすると、ENCRYPTED=YESまたはinnodb_encrypt_tables=ONで定義されたテーブルで、保存されているデータが暗号化されます。 MariaDBのデータベースを介してアクセスされた場合にのみ復号化されます。それ以外の場合、データは読み取れません。

    たとえば、暗号化されていないデータを読み取ると、次のように表示されます。

    $ strings admin_logs.ibd|head -10
    =r7N
    infimum
    supremum
    infimum
    supremum/
    failThe verification code you entered is incorrect.KK
    elmo1234failThe password or username you entered is invalidKK
    elmo1234failThe password or username you entered is invalidKK
    elmoasfdfailThe verification code you entered is incorrect.KK
    safasffailThe verification code you entered is incorrect.KK

    ただし、暗号化されたデータを使用すると、以下の例のようにテーブルスペースを読み取ることができなくなります。

    # strings user_logs.ibd |head -10
    E?*Pa
    [+YQ
    KNmbUtQ
    T_lPAW
    \GbQ.
    ] e2
    #Rsd
    ywY%o
    kdUY
    {]~GE

    MariaDBの保存データ暗号化により、データサイズのオーバーヘッドが約3〜5%増加することも注目に値します。 XtraDBおよびInnoDBストレージエンジンを使用する場合、MariaDB暗号化も完全にサポートされます。暗号化はAriaストレージエンジンでもサポートされていますが、ROW_FORMAT =PAGE(デフォルト)で作成されたテーブルとバイナリログ(レプリケーションログ)でのみサポートされています。 MariaDBを使用すると、ユーザーは何を暗号化するかを柔軟に選択できます。 XtraDBまたはInnoDBでは、暗号化を選択できます:

    • すべて—すべてのテーブルスペース(すべてのテーブルを含む)
    • 個別のテーブル
    • 個々のテーブルを除くすべて

    さらに、XtraDB / InnoDBログファイルの暗号化を選択できます(これをお勧めします)。

    MariaDBには制限があります。たとえば、Galera Cluster gcacheは暗号化されていませんが、MariaDB10.4バージョンの一部として計画されています。制限事項の完全なリストはここにあります。

    保存データの暗号化のためにMariaDBをセットアップおよび構成する方法

    1. opensslrandコマンドを使用してランダムな暗号化キーを生成します。
      $ mkdir -p /etc/mysql/encryption
      $ for i in {1..5}; do openssl rand -hex 32 >> /etc/mysql/encryption/keyfile;  done;
      次に、ファイル/ etc / mysql / encoding / keyfileを開いて編集し、暗号化されたテーブルを作成するときに参照されるキーIDを暗号化キーIDとして追加します。詳細については、ENCRYPTION_KEY_IDを参照してください。したがって、次の形式は次のようになります。
      <encryption_key_id1>;<hex-encoded_encryption_key1>
      <encryption_key_id2>;<hex-encoded_encryption_key2>
      In my example keyfile, this looks as the following:
      $ cat keyfile
      1;687a90b4423c10417f2483726a5901007571c16331d2ee9534333fef4e323075
      2;e7bf20f1cbde9632587c2996871cff74871890d19b49e273d13def123d781e17
      3;9284c9c80da9a323b3ac2c82427942dfbf1718b57255cc0bc0e2c3d6f15ac3ac
      4;abf80c3a8b10643ef53a43c759227304bcffa263700a94a996810b0f0459a580
      5;bdbc5f67d34a4904c4adc9771420ac2ab2bd9c6af1ec532e960335e831f02933
    2. 手順1と同様のコマンドを使用して、ランダムパスワードを作成または生成しましょう。
      $ openssl rand -hex 128 > /etc/mysql/encryption/keyfile.key
    3. 次の手順に進む前に、キーファイルの暗号化に関する次の詳細に注意することが重要です。
      • キーファイルを暗号化するためにMariaDBが現在サポートしている唯一のアルゴリズムは、Advanced Encryption Standard(AES)のCipher Block Chaining(CBC)モードです。
      • 暗号化キーのサイズは、128ビット、192ビット、または256ビットにすることができます。
      • 暗号化キーは、暗号化パスワードのSHA-1ハッシュから作成されます。
      • 暗号化パスワードの最大長は256文字です。
      ここで、openssl encコマンドを使用してキーファイルを暗号化するには、次のコマンドを実行します。
      $ openssl enc -aes-256-cbc -md sha1 -pass file:/etc/mysql/encryption/keyfile.key -in /etc/mysql/encryption/keyfile    -out /etc/mysql/encryption/keyfile.enc
    4. MySQL構成ファイルに次の変数を追加します(つまり、RHELベースのLinuxOSの場合は/etc/my.cnf、Debian / UbuntuLinuxベースのOSの場合は/etc/mysql/my.cnf)
      [mysqld]
      …
      #################### DATABASE ENCRYPTION ##############################
      plugin_load_add = file_key_management
      file_key_management_filename = /etc/mysql/encryption/keyfile.enc
      file_key_management_filekey = FILE:/etc/mysql/encryption/keyfile.key
      file_key_management_encryption_algorithm = aes_cbc 
      encrypt_binlog = 1
      
      innodb_encrypt_tables = ON
      innodb_encrypt_log = ON
      innodb_encryption_threads = 4
      innodb_encryption_rotate_key_age = 0 # Do not rotate key
    5. MariaDBサーバーを今すぐ再起動します
      $ systemctl start mariadb

    暗号化の検証とテスト

    暗号化を検証およびテストするには、サンプルテーブルを作成するだけです。たとえば、以下のSQLステートメントを実行してテーブルを作成します。

    MariaDB [test]> CREATE TABLE a (i int) ENGINE=InnoDB ENCRYPTED=YES;
    Query OK, 0 rows affected (0.018 sec)
    MariaDB [test]> CREATE TABLE b (i int) ENGINE=InnoDB;
    Query OK, 0 rows affected (0.003 sec)

    次に、テーブルにデータを追加しましょう:

    MariaDB [test]> insert into a values(1),(2);
    Query OK, 2 rows affected (0.001 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    MariaDB [test]> insert into b values(1),(2);
    Query OK, 2 rows affected (0.001 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    暗号化されているテーブルを確認するには、次の SELECTを実行します。 以下のクエリ:

    MariaDB [test]> SELECT * FROM information_schema.innodb_tablespaces_encryption\G
    *************************** 1. row ***************************
                           SPACE: 4
                            NAME: mysql/gtid_slave_pos
               ENCRYPTION_SCHEME: 1
              KEYSERVER_REQUESTS: 1
                 MIN_KEY_VERSION: 1
             CURRENT_KEY_VERSION: 1
        KEY_ROTATION_PAGE_NUMBER: NULL
    KEY_ROTATION_MAX_PAGE_NUMBER: NULL
                  CURRENT_KEY_ID: 1
            ROTATING_OR_FLUSHING: 0
    *************************** 2. row ***************************
                           SPACE: 2
                            NAME: mysql/innodb_index_stats
               ENCRYPTION_SCHEME: 1
              KEYSERVER_REQUESTS: 1
                 MIN_KEY_VERSION: 1
             CURRENT_KEY_VERSION: 1
        KEY_ROTATION_PAGE_NUMBER: NULL
    KEY_ROTATION_MAX_PAGE_NUMBER: NULL
                  CURRENT_KEY_ID: 1
            ROTATING_OR_FLUSHING: 0
    *************************** 3. row ***************************
                           SPACE: 1
                            NAME: mysql/innodb_table_stats
               ENCRYPTION_SCHEME: 1
              KEYSERVER_REQUESTS: 1
                 MIN_KEY_VERSION: 1
             CURRENT_KEY_VERSION: 1
        KEY_ROTATION_PAGE_NUMBER: NULL
    KEY_ROTATION_MAX_PAGE_NUMBER: NULL
                  CURRENT_KEY_ID: 1
            ROTATING_OR_FLUSHING: 0
    *************************** 4. row ***************************
                           SPACE: 3
                            NAME: mysql/transaction_registry
               ENCRYPTION_SCHEME: 1
              KEYSERVER_REQUESTS: 0
                 MIN_KEY_VERSION: 1
             CURRENT_KEY_VERSION: 1
        KEY_ROTATION_PAGE_NUMBER: NULL
    KEY_ROTATION_MAX_PAGE_NUMBER: NULL
                  CURRENT_KEY_ID: 1
            ROTATING_OR_FLUSHING: 0
    *************************** 5. row ***************************
                           SPACE: 5
                            NAME: test/a
               ENCRYPTION_SCHEME: 1
              KEYSERVER_REQUESTS: 1
                 MIN_KEY_VERSION: 1
             CURRENT_KEY_VERSION: 1
        KEY_ROTATION_PAGE_NUMBER: NULL
    KEY_ROTATION_MAX_PAGE_NUMBER: NULL
                  CURRENT_KEY_ID: 1
            ROTATING_OR_FLUSHING: 0
    *************************** 6. row ***************************
                           SPACE: 6
                            NAME: test/b
               ENCRYPTION_SCHEME: 1
              KEYSERVER_REQUESTS: 1
                 MIN_KEY_VERSION: 1
             CURRENT_KEY_VERSION: 1
        KEY_ROTATION_PAGE_NUMBER: NULL
    KEY_ROTATION_MAX_PAGE_NUMBER: NULL
                  CURRENT_KEY_ID: 1
            ROTATING_OR_FLUSHING: 0
    6 rows in set (0.000 sec)

    InnoDBテーブルの作成では、ENCRYPTED=YESキーワードを指定する必要はありません。構成ファイルでinnodb_encrypt_tables=ONに指定したとおりに自動的に作成されます。

    使用するテーブルの暗号化IDを指定する場合は、次の操作も実行できます。

    MariaDB [test]> CREATE TABLE c (i int) ENGINE=InnoDB ENCRYPTION_KEY_ID = 4;
    Query OK, 0 rows affected (0.003 sec)

    ENCRYPTION_KEY_IDは、以前に生成した暗号化キーファイルから取得されました。

    さらに、シェルを介してさらにテストが必要な場合は、文字列を使用できます。 先ほどお見せしたコマンド。

    MariaDB暗号化に関する追加情報

    MariaDBインスタンスに暗号化されていないテーブルが含まれていてはならない場合は、 [mysqld]内のmy.cnf構成ファイルで変数を設定するだけです。 次のセクション:

    innodb_encrypt_tables = FORCE.

    binlog暗号化の場合は、次を追加するだけです

    encrypt_binlog = 1

    InnoDBのREDOログはデフォルトでは暗号化されていません。暗号化するには、[mysqld]セクションの後に以下の変数を追加するだけです

    innodb-encrypt-log

    ディスク上の一時テーブルと一時ファイルの暗号化が必要な場合は、次を追加できます。

    encrypt-tmp-disk-tables=1
    encrypt-tmp-files=1

    1. Oracleで英数字のみを含む行を返す2つの方法

    2. OracleApex5.0-静止画像を表示する

    3. PostgreSQL列挙型とJava列挙型の間のHibernateマッピング

    4. SQLですべてのグループの最初の行を選択します