SQL injection を防ぐもうひとつの方法
DB への接続 user を共用した場合の client-server 構成での 問題点
上記で SQL injection の根本的原因は DBMS で access control を行っていないことだと述べました。
DB への接続 user を個人単位で割り当て DBMS の acess control で制御してやりたいが、要求される performance と resource のため、どうしても利用することが難しい。そんな場合もあると思います。でも、DB への接続 user を共用化した場合は DBMS の access control を全く利用できないんでしょうか?
違いますよね。DB への接続 user を共用化するといっても、user は一つしか使ってはいけないということはないでしょう。処理の内容によって user を使い分けることはできるはずです。
たとえば、SELECT と UPDATE する user を分ける。Logon に利用する user も分離する。重要な data を扱う user も分離する。そして、それぞれ必要な最小限の権限のみ割り当てれる。
こうゆうことをやれば多少なりとも驚異を軽減することにつながるでしょう。Performance に関しても高々数 user を追加したところでさして変わるとは思えませんし。
多層で防御すればするほど security level は向上します。Stored procedure なり、parameterized query なり、sanitizing なりで SQL injection 対策を行うとともに、このような方法も検討してみてはいかがでしょうか?