技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

ソースコード中に顧客情報を記述してはいけない

特定の顧客用に特別なビジネスロジックを用意している場合、以下のようにソースコード中に顧客情報を記述することで実装することはできます。
(顧客番号が'1111111'である場合に特別なビジネスロジックを実行するとします)
 



if (処理中の顧客番号が'1111111'の場合) {
  特別なビジネスロジック
}



 
----
 
しかし、この実装方法には以下の問題があり、望ましくありません。
特別なビジネスロジックを適用する対象の顧客の情報は、(データの管理にDBを使用しているシステムであれば)DBに持たせるべきです。
 
・対象となる顧客が追加されたり削除されたりする度にソースコード修正が必要になる
 コンパイルやデプロイが必要となり、対応工数や対応のリスクが増加する。
 →DBで管理すればDB内の情報の補正だけで済む。
 
・データを一元管理できなくなる
 対象となる顧客を調べるためにはソースコードを見なくてはならなくなる。
 →DBで一元管理すれば情報の検索が容易になる。
 
・セキュリティを確保するのが難しくなる
 ソースコードが流出した場合に顧客情報も同時に流出してしまう。
 (参考:フリマアプリ「メルカリ」で2021/05/21に発表された情報流出事故
 →DBで一元管理すれば、顧客情報の流出のリスクを減らすことができる。
 
----
 
対象となる顧客の情報をDBに持たせる場合、以下のような実装になります。
 
1.対象となる顧客の情報を管理するテーブルを別途持たせる場合

f:id:akira2kun:20210523182640j:plain




if (特定処理対象顧客テーブルに処理中の顧客番号が存在する場合) {
  特別なビジネスロジック
}



 
2.既存のテーブルにフラグを持たせる場合

f:id:akira2kun:20210523182702j:plain



if (処理中の顧客番号について顧客テーブル.特定処理対象フラグが'1'の場合) {
  特別なビジネスロジック
}