MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでデータフィールドをマスクする方法:CONCAT()とREPEAT()を活用した実装手順

MySQLでパスワードなどの機密性の高いデータフィールドをマスクするには、CONCAT()関数とREPEAT()関数を組み合わせるのが効果的です。この記事では、文字列の先頭5文字を残し、それ以外を「#」で置き換えるマスキング処理を、実際のコード例とともに段階的に解説します。

1. サンプルテーブルの作成

まず、マスク対象となるテーブルを作成します。

mysql> create table DemoTable1410
    -> (
    -> Password varchar(80)
    -> );
Query OK, 0 rows affected (0.51 sec)

2. テストデータの挿入

INSERT文を使って、サンプルとなるレコードをいくつか追加します。

mysql> insert into DemoTable1410 values('John12345678');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1410 values('Carol_897');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1410 values('David_5647383');
Query OK, 1 row affected (0.17 sec)

3. 現在のデータを確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1410;

実行結果は以下の通りです。

+---------------+
| Password      |
+---------------+
| John12345678  |
| Carol_897     |
| David_5647383 |
+---------------+
3 rows in set (0.00 sec)

4. マスキングクエリの実行

ここが本題です。以下のクエリを実行すると、MySQLでデータフィールドをマスクできます。

mysql> update DemoTable1410
    -> set Password=concat(substr(Password, 1, 5), repeat('#', char_length(Password) - 5));
Query OK, 3 rows affected (0.16 sec)
Rows matched: 3  Changed: 3 Warnings: 0

クエリの仕組み

このUPDATE文がどのように動作しているのか、各部分を分解して見てみましょう。

  • substr(Password, 1, 5):パスワードの先頭から5文字を取り出します。
  • char_length(Password) - 5:5文字目以降の残りの文字数を計算します。
  • repeat('#', ...):計算した文字数だけ「#」を繰り返し生成します。
  • concat(...):先頭5文字と「#」の連なりを結合して最終的な文字列を作ります。

5. マスキング後のデータを確認する

もう一度テーブルの内容をチェックしてみます。

mysql> select * from DemoTable1410;

実行結果は以下の通りです。先頭5文字以外がすべて「#」に置き換わっているのが確認できます。

+---------------+
| Password      |
+---------------+
| John1#######  |
| Carol####     |
| David######## |
+---------------+
3 rows in set (0.00 sec)

まとめ

SUBSTR()で先頭の一部文字を保持しつつ、REPEAT()CHAR_LENGTH()で残りの文字数分のマスク文字を生成すれば、元のデータ長を維持したまま機密情報を隠すことができます。パスワードや個人情報をログ出力やテスト環境で扱う際に非常に便利なテクニックです。

なお、セキュリティ要件が厳しい本番システムでは、マスキングだけでなくSHA-2などの一方向ハッシュ関数による保存や、アプリケーション層での暗号化も併せて検討することをおすすめします。

  1. JavaでMySQLデータベースにデータを挿入する方法をわかりやすく解説

    JavaからMySQLデータベースにデータを挿入するには、SQLのINSERTコマンドを使用します。基本的な構文は以下の通りです。 INSERT INTO テーブル名(カラム名1, カラム名2, ......カラム名N) VALUES(値1, 値2, ......値N); ここからは、Javaプログラムを使って実際にMySQLデータベースへレコードを挿入する手順を、順を追って見ていきましょう。 ステップ1:MySQLでテーブルを作成する まず、データの挿入先となるテーブルをMySQL側に作成します。以下のクエリを実行してください。 mysql> create table Insert

  2. MySQLで特定のカラムのデータをエクスポートする方法(INTO OUTFILEの使い方)

    MySQLで特定のカラムのデータをエクスポートする方法 MySQLでテーブルから特定のカラム(列)のデータだけをファイルに書き出したい場合は、SELECT文とINTO OUTFILEを組み合わせるのが最もシンプルで確実な方法です。この記事では、実際にテーブルを作成し、データを投入したうえで、特定のカラムをテキストファイルへエクスポートする手順を順番に解説します。 基本構文 特定のカラムをファイルに出力する際の基本構文は次のとおりです。 select yourColumnName from yourTableName into outfile yourLocationOfFile; このように