カテゴリー
システム開発

パスワード漏洩事故の原因

世間ではシステムのパスワードが漏洩したというニュースが度々聞かれます。その原因は外部からの悪意のある侵入者である場合と、内部の人間によるものとがあります。あるシステムのユーザアカウント管理テーブルを見たときに驚きました。パスワードが平文(パスワードがかかっていない状態)で保存されているのです。もちろんユーザアカウント名も一緒に載っていますので、このテーブルのリストを出力すれば、大量のアカウント情報を手に入れることが可能です。

パスワードを忘れたときにヘルプデスクに問い合わせると思います。この時に何らかの本人認証の有無にかかわらず、最終的にパスワードが伝えられるようでしたら、セキュリティー観点での脆弱性があると考えてよいでしょう。そもそもパスワードは暗号化された状態でデータベースに保存されますし、復号(暗号化を解くこと)困難にすべきです。ですからヘルプデスクでパスワード忘れのユーザに対してパスワードを伝えることは本来出来てはいけないはずです。

このようなパスワードを平文で保存しているものは、古くから使い続けているシステムで見かけることが多いように思えます。システムのリプレースが後回しになり、脆弱性が残ったままとなっています。まずはセキュリティー対策が出来ているかどうか、そして対策が必要であれば早急に対応を検討すべきでしょう。

カテゴリー
システム開発

データベースからの検索速度が低下する場合

データベースを使った検索システムの不具合に、検索速度が著しく低下することがあります。開発段階では問題なかったが運用を始めてから気づくことがほとんどではないでしょうか。扱うレコード数が増えてくるにつれて検索速度が低下します。さらに検索のためのクエリが適切でないと、レコード数が増えるにつれてパフォーマンスは著しく低下することがあります。

先日も上記のような不具合についての相談を受けました。コードを確認したところ、いくつかのアンチパターンに相当するロジックを見つけました。詳細の説明はしませんが、検索キーに対して適切なインデックスが設定されていないこと、複数段階の絞り込み条件において抽出結果が小さくなるものが後回しにされていたこと、マッチングに置いてその都度演算が行われていたことがパフォーマンスの低下の原因になっていました。抽出条件のロジックとしては正しくはありましたが、データベースシステムに対して、その動作にまで考慮した最適化が行われていなかったのです。SQLについてはパフォーマンスの低下を招く書き方は、アンチパターンとして広まっています。これを勉強するとパフォーマンスの低下は防げることが多いでしょう。

ここに紹介する書籍が良くまとまっており、お勧めします。