PostgreSQLは非常に拡張性が高く、たとえば、関数を記述するための独自の手続き型言語を定義できます。
PostgreSQLは、特定の言語ハンドラーを呼び出さなければならないことを除いて、言語について何も知りません。 機能を実行します。
これを実装するために選択された方法は、コードを文字列として渡すことを単純化することです。
これは単なる実装の詳細であり、PostgreSQL関数が他のRDBMSよりもSQLインジェクションに対して多かれ少なかれ脆弱になることはありません。
注射から身を守る必要があるいくつかのレベルがあります:
-
関数の引数:ここでは、可能な限り文字列以外のデータ型を選択する必要があります。
-
関数内のSQLステートメント:ここでは、可能な限り動的SQLを回避する必要があり、動的SQLを使用する必要がある場合は、
%L
を使用して変数を挿入する必要があります。format
のパターン 機能。
繰り返しますが、これは関数本体が文字列として指定されているかどうかに関係なく同じです。