JPUG 第22回 しくみ+アプリケーション勉強会

1/21(土)に開催された勉強会の備忘録。

PHPを使ったSQLインジェクション対策(前半)

  • 第四企画の坂井さんの発表。
  • '\t' などの意味を活かしたい場合は、standard_conforming_string = on のまま E'〜'と書くのがいいのでは。
  • リテラルに B'〜' や X'〜' なんて表記があったのか(遅
  • エンコーディングに気をつけよう。特にShift-JISは5C問題(「表」や「ソ」など2バイト目が'\'のもの)があるので要注意。
  • クライアント〜アプリ〜DBまでを自由に決められるのであれば、現時点ではUTF-8に統一するのがよいのでは。
  • 数値もクォートしたほうがよいの?
  • PHPで大きい値を比較するときはint->floatなどの型昇格に注意。
  • DBアクセスライブラリのMDB2やPDOのquoteメソッドを使うのが便利。
  • 質疑
    • あるサイトがSQLインジェクション対策がなされているか知る方法はある?→「' OR '1' = '1」とかを実際にインジェクションしてみるとかw
    • ストアドプロシージャを使うとSQLインジェクションに強くなる?→SPに渡す値が確認済みならばOKでは。

xml_fdw XMLファイルをPostgreSQLの情報源として扱う外部データラッパの試作

  • NTTソフトの原田さんの発表。ブログにエントリあり。
  • xml_fdwを作ってみた。
    • 外部サーバ:XMLファイル
    • 外部テーブル:ノード種別
    • カラム:子ノード種別
    • 列値:子ノードのテキストデータ
  • 列に関する情報は、9.2から追加された列単位FDWオプションですっきりしそう。
  • 既存のドキュメントだけでは、API仕様などがわかりづらいとのこと。ドキュメント直すべきか?
    • ExplainForeignScanとPlanForeignScanの区別
    • スキャン終了でIterateが呼ばれなくなる条件
  • プランナとエグゼキュータとの相互作用など、データフローの図がわかりやすい!カンファレンスでの発表にパクらせて参考にさせてもらおう。
  • ハマリどころは、コールバック関数間でのデータ引継ぎと仕事の振り分け、あとはスキャンの終了の仕方(最初は無限ループになっちゃった)。

なんちゃってEarly Lock Release --実装と評価--

  • NECの堀川さんの発表。
  • Early Lock Release を実装してみたけど、あまり効果はなかったとのこと。
  • DBT-1の「pxgc用」は「pgxc用」のこと?
  • rdtcsって何だろう?プロファイラ関連らしいので後で調べる。
  • 負荷を上げたときにレスポンスがサチるのはなぜ?→ボトルネックがDBT-1のキューに移るから。
  • 測定環境はメモリ数GB、DBサイズ4GB
  • ロック競合が多いモデルのほうが効果が見えるかも。
  • 非同期コミットとELRではリスクは同じ?ELRではクライアント目線ではトランザクションを失うことはないが、別トランザクション目線でも大丈夫?(@fujii_masaoさんのtweetより)確かに。

まとまってないまとめ

  • パラメータのサニタイズとかクォート大変そう…プレースホルダ方式だけでは…多分だめなんですよね。Let's Postgresちゃんと読もう。
  • FDWのドキュメントがんばる。
  • 各発表50分だったけど、スライドは30枚くらいか……二月のPostgreSQL Conferenceの30分枠での発表は20枚くらいにすべき?