LoginSignup
1
1

More than 5 years have passed since last update.

ドメインパートを残してメールアドレスをマスクする @ MySQL

Posted at

概要

アンチパターンまっしぐらな以下の要素をマスクしてくれる素敵なストアドファンクションを作りました。

カンマ区切りのメールアドレスが入ったカラムとかアンチパターン以外の何物でもないので、
このファンクション使う機会がなければいいと思います。
でも時には必要になることもあるでしょう。あるでしょうとも!!!

要件

  • カンマで区切られた複数のメールアドレスが存在する
  • ドメインパートを残した状態でメールアドレスをSHA1でハッシュ化する
  • なるべく早い方がいい

ストアドファンクション

ストアドファンクションそのものの説明はここでは避けます。
内容はこちら。

mask_mail.sql
DELIMITER //
CREATE FUNCTION mask_mails(mail VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
    SET @mail = mail;
    SET @tmp = '';
    SET @masked = '';
    WHILE 
        IF LEFT(@mail, LOCATE(',', @mail)) = ''
            THEN RETURN CONCAT(@masked, SHA1(LEFT(@mail, LOCATE('@', @mail) - 1)), MID(@mail, LOCATE('@', @mail)));
        ELSE
            SET @tmp = LEFT(@mail, LOCATE(',', @mail) - 1);
            SET @masked = CONCAT(@masked, SHA1(LEFT(@tmp, LOCATE('@', @tmp) - 1)), MID(@tmp, LOCATE('@', @tmp)), ',')
            SET @mail = MID(@mail, LOCATE(',', @mail, 1) + 1);
        END IF;
    END WHILE;
END;
//
DELIMITER;
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1