MariaDB による PCRE とハッシュ

Postfix の設定を行っている時にふと思った。ハッシュや PCRE、MySQL の設定ファイルなどが多数存在し、管理が鬱陶しいと。MariaDB ならば正規表現をレコード内に格納し、一括管理を行えるのではないかと。

そこで今回は、MariaDB で正規表現をレコード内に格納し、利用する方法などを検討します。

  1. MariaDB の正規表現

    MariaDB の正規表現PCRE2 10.34(2022年1月現在)対応となっており、PCRE2 が文字コードの問題もなく、そのまま利用できます。
    ※ MySQL では、正規表現が標準のままであり、PCRE の拡張機能は利用できません。

    また、正しい文字コードの設定を行っている場合、それらに付随する問題も発生しません。
    MySQL(MariaDB) と日本語を参照
     
  2. PCRE 格納テーブルの作成

    $ mariadb -p
    Enter password:
    Welcome to the MariaDB monitor. Commands end with ; or \g.
    Your MariaDB connection id is 6307
    Server version: 10.5.13-MariaDB-log MariaDB Server
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

    MariaDB [(none)]> create database pcre2;
    Query OK, 1 row affected (0.001 sec)
    MariaDB [pcre2]> CREATE TABLE `pcre_table` ( `id` int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, `pcre` varchar(255) NOT NULL );
    Query OK, 0 rows affected (0.233 sec)
      
  3. 拡張正規表現の挿入

    MariaDB [pcre2]> insert into pcre_table ( pcre ) values ( '^\\d+$' ), ( '^\\w+$' );
    Query OK, 2 rows affected (0.028 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    MariaDB [pcre2]> select * from pcre_table;
    +----+-------+
    | id | pcre  |
    +----+-------+
    |  1 | ^\d+$ |
    |  2 | ^\w+$ |
    +----+-------+
    2 rows in set (0.001 sec)
    
    MariaDB [pcre2]> 
    

     
  4. テーブルを使用した正規表現検索

    MariaDB [pcre2]> select * from pcre_table where 'abc' regexp pcre;
    +----+-------+
    | id | pcre  |
    +----+-------+
    |  2 | ^\w+$ |
    +----+-------+
    1 row in set (0.001 sec)
    
    MariaDB [pcre2]> select * from pcre_table where '123' regexp pcre;
    +----+-------+
    | id | pcre  |
    +----+-------+
    |  1 | ^\d+$ |
    |  2 | ^\w+$ |
    +----+-------+
    2 rows in set (0.001 sec)
    
    MariaDB [pcre2]> 
    
    ※ 「\w」は英数字なので両方にヒットする。
     もしも分類したい場合は、テーブルにキーとなる項目を追加すれば良い。
  1. MariaDB でのハッシュ

    もしもハッシュをデータベースの様に使用している場合は、そのままデータを DB に格納すれば問題はないハズだ。

    暗号化や複合化をする場合には、ココの関数が参考になる。
    Encryption, Hashing and Compression Functions
    ENCRYPT や ENCOE が暗号化、DECRYOT や DECODE が複合化だ。
     
  2. 暗号化と複合家のテスト

    MariaDB [pcre2]> select AES_ENCRYPT( ‘Target String’, ‘encrypt keyword’ );
    +—————————————————+
    | AES_ENCRYPT( ‘Target String’, ‘encrypt keyword’ ) |
    +—————————————————+
    | =�ɷ�L�����q, |
    +—————————————————+
    1 row in set (0.000 sec)
    MariaDB [pcre2]> select AES_DECRYPT( AES_ENCRYPT( ‘Target String’, ‘encrypt keyword’ ), ‘encrypt keyword’ );
    +————————————————————————————-+
    | AES_DECRYPT( AES_ENCRYPT( ‘Target String’, ‘encrypt keyword’ ), ‘encrypt keyword’ ) |
    +————————————————————————————-+
    | Target String |
    +————————————————————————————-+
    1 row in set (0.000 sec)

    MariaDB [pcre2]>

      
    ここでは AES (Advanced Encryption Standard)  による暗号化と複合化を行ってみた。
    AES_ENCRYPT()、AES_DECRYPT() の1番目の引数は対象文字列、2番目の引数は暗号化/複合化を行う場合の鍵となる文字列だ。
     

以上の様に、拡張正規表現、ハッシュ、暗号化は MariaDB で問題なく行える。
この機能を利用して、MariaDB で一括管理が行えるハズだ。

コメントを残す

メールアドレスが公開されることはありません。