PostgreSQL
PostgreSQL 8.2をインストール
訳あってCentOS7にPostgreSQL 8.2をインストールしようとするとコンパイルは出来ても動作しませんでした。8.2はかなり古いPostgreSQLなので仕方ないですが、動作させることは可能でした。 CentOS6ならPostgreSQL 8.2を普通にコンパイルできると思います。 (さらに…)
遅すぎるサニタイズではダメな例
PostgreSQL 11がリリースされました。このリリースでto_number()、to_char()、to_date()、to_timestamp()関数の仕様が変更されました。これらは名前の通り入力を変換する関数です。その際に サニタイズ - ダメな形式のデータを使える/安全なデータ形式に変換する を行います。保存されるデータ形式は、保存可能な形に変換…
PostgreSQLの文字列型の最大長は?
PostgreSQLには varchar(n) 型 char(n) 型 text型 の文字列型があります。他にバイナリも保存できる bytea型 もあります。 text/byteaの最大サイズは1GiBだ、と私も思っていたのですが違いました。 (さらに…)
SQLクエリと識別子エスケープの話
Facebookでこんなやり取りをしました。元々公開設定で投稿した物で、議論させて頂いた浅川さんにも「ブログOK」と許可も頂いたので、そのやり取りの部分だけを紹介します。 テーマは「SQLクエリと識別子エスケープ」です。 とあるブログの結論として "「安全な静的SQLの発行方法」を開発者に啓蒙すればいいだけだ。つまり プリペアドクエリでSQL発行は行うこと …
PostgreSQLを使うならZFS
PostgreSQLを使うならZFSで決まりです。数値で明らかです。ZFS以外を使うのは論外なくらいの性能差があります。 (さらに…)
PostgreSQL 10のICUコレーションとJIS X 4061
PostgreSQL Advent Calendar 9日目用のエントリです。 PostgreSQL 10のICUコレーション(照合順序)サポートの概要と基本的な使い方は以下のエントリに記載しています。ICUコレーションの使い方は以下を参照してください。 https://blog.ohgaki.net/postgresql-10-icu-locale-col…
PostgreSQL 10のICUコレーションを使うと日本語を普通にソートでき、更に文字順序までカスタマイズできる
PostgreSQL 10からICU(International Components for Unicode)のロケール/コレーションがサポートされました。 これまでサポートされてきた、libcのja_JPロケールの貧弱な日本語ソート機能とは比べ物にならないくらい高機能な文字比較をサポートしています。日本語や他の言語での照合順序を柔軟に変更できます。 マト…
本当にプリペアードクエリだけを使っていますか?
'SELECT '.pg_escape_idetifier($_GET['col']).' WHERE '.pg_escape_identifier('tbl').' ORDER BY '.pg_escape_idetifier($_GET['col']) SQLクエリにはプリペアードクエリを使いましょう!と言われて久しいです。私もプリペアードクエリを積極的…
SQLインジェクション対策 総”習”編 – 第五回関西DB勉強会
第五回 関西DB勉強会でお話しさせて頂いた SQLインジェクション対策 総”習”編 の公開用資料をSlideShareにアップロードしました。私のセッションを気に入って頂けた方が多かったようで何よりです。 関西DB勉強会、面白かったです。久々にお会いできた方もいました。超満員でもう少しで入りきれないほどでした。また参加できれば、と思っています。 P…
コンピュータは数値さえ正確に扱えない
コンピュータで数値を正確に扱うのは「実は結構難しい」です。つまり「コンピューターは数値を正確に扱えない」という事です。「コンピューターが数値を正確に扱えない?!何を言ってるんだ?!」と思った方は是非読んでみてください。 (さらに…)
SQL識別子のエスケープ
SQLの識別子(テーブル名やフィールド名)はプリペアードクエリではエスケープできません。最近の開発者はSQLの"パラメーター”には注意を払うようになったので、SQLパラメーターによるSQLインジェクションはかなり少くなってきました。 この結果、相対的にSQL識別子によるSQLインジェクション脆弱性の割合が増えています。実際、私がコード検査を行っているアプリケ…
PostgreSQLでもカウンター処理を簡単に実装できる!
PostgreSQL 9.5がリリースされました。これに含まれるUPSERT機能を使えばPostgreSQLでも簡単にカウンター処理を実装できます。以前でもトリガーやルール、CTE(Common Table Expression)を使って実装できましたが、追加されたUPSERT機能を使った方が簡単です。 (さらに…)