このドキュメントでは、AlloyDB for PostgreSQL のパラメータ化されたセキュアなビューについて説明します。このビューは、SQL をサポートしながら、アプリケーション データのセキュリティと行のアクセス制御を提供します。これらのビューは、データ値の抽出(列から特定のデータ部分を取得するプロセス)をサポートし、プロンプト インジェクション攻撃に対する保護に役立ちます。パラメータ化されたセキュアなビューを使用すると、エンドユーザーがアクセスする必要があるデータのみを表示できます。
パラメータ化されたビューは PostgreSQL ビューの拡張機能であり、ビュー定義でアプリケーション固有の名前付きビュー パラメータを使用できます。この機能は、クエリと名前付きパラメータの値を受け取るインターフェースを提供します。ビューは、その値を使用してクエリを実行します。この値は、クエリの実行全体で使用されます。
パラメータ化された安全なビューの例を次に示します。
CREATE VIEW secure_checked_items WITH (security_barrier) AS
SELECT bag_id, timestamp, location
FROM checked_items t
WHERE customer_id = $@app_end_userid;
ビューをクエリするには、execute_parameterized_query
ストアド プロシージャを使用するか、EXECUTE .. WITH VIEW PARAMETERS
ステートメントを実行します。
ユースケース
パラメータ化されたセキュアなビューは、信頼できないソースからのアドホック クエリ(自然言語クエリから変換されたクエリなど)に対するデータベース レベルでのデータ セキュリティ管理に適しています。たとえば、旅行中のお客様のチェックイン済み荷物をデータベースで追跡するアプリケーションについて考えてみましょう。これらのユーザーは、アプリケーションにクエリを発行できます。たとえば、アプリケーション ユーザー ID が 12345 のお客様が、アプリケーションに「荷物はどこですか?」などのクエリを入力できます。
パラメータ化されたセキュアなビューを使用すると、AlloyDB がこのクエリを実行する方法に次の要件を適用できます。
- このクエリは、データベースのパラメータ化されたセキュアなビューにリストされているデータベース オブジェクトと列のみを読み取ることができます。
- このクエリは、クエリを送信したユーザーに関連付けられているデータベース行のみを読み取ることができます。返された行は、ID 列の値が
12345
のユーザーのテーブル行とデータ関係があります。
セキュリティとアクセス制御の構成の詳細については、パラメータ化されたセキュアなビューを使用してアプリケーション データへのアクセスの保護と制御を行うをご覧ください。
パラメータ化されたセキュアなビューは、エンドユーザーがデータベース テーブルで信頼できないクエリ(自然言語クエリなど)を実行できるようにした場合に発生するセキュリティ リスクの軽減に役立ちます。セキュリティ上のリスクには、次のものがあります。
- ユーザーはプロンプト インジェクション攻撃を送信し、基盤となるモデルを操作して、アプリケーションがアクセスできるすべてのデータを公開しようとする可能性があります。
- LLM は、データ セキュリティ上の理由から適切なものよりも範囲の広い SQL クエリを生成する場合があります。このセキュリティ リスクにより、善意のユーザークエリに対しても機密データを返す可能性があります。
パラメータ化されたセキュアなビューを使用すると、信頼できないクエリがデータを取得できるテーブルと列を定義できます。これらのビューを使用すると、個々のアプリケーション ユーザーが使用できる行の範囲を制限できます。また、これらの制限により、ユーザーがクエリのフレーズに関係なく、アプリケーション ユーザーが自然言語クエリで表示できるデータを厳密に制御できます。
セキュリティ メカニズム
パラメータ化されたセキュアなビューを使用すると、アプリケーション デベロッパーは次の方法でデータ セキュリティと行アクセスを制御できます。
WITH (security barrier)
オプションを使用して作成されたビューは、ビューが処理を完了するまで、悪意を持って選択された関数や演算子に行から値が渡されないようにすることで、行レベルのセキュリティを提供します。WITH (security barrier)
句の詳細については、ルールと権限をご覧ください。- 名前付きビュー パラメータを使用したパラメータ化により、エンドユーザー認証などのアプリケーション レベルのセキュリティに基づいて、アプリケーションから提供される値でパラメータ化されたデータベースの制限付きビューを表示できます。詳細については、次をご覧ください:
- パラメータ化されたビューにアクセスするクエリに対する追加の制限の適用。これにより、指定されたパラメータ値に基づいてビュー内のチェックをエスケープする攻撃を防ぐことができます。詳細については、クエリに対する適用される制限をご覧ください。
制限事項
パラメータ化されたセキュアなビューで使用される API を使用して呼び出されるユーザー定義関数でパラメータ化されたビューが参照されると、エラーが発生します。親クエリでパラメータ化されたビューを直接参照する必要があります。
パラメータ化されたビューフラグは、AlloyDB のすべてのインスタンスで個別に有効にする必要があります。プライマリ インスタンスで作成されたパラメータ化されたビュー オブジェクトは、読み取り専用レプリカとリージョン間レプリカに伝播されます。ただし、
parameterized_views.enabled
フラグの設定は自動的に複製されません。各インスタンスで手動で複製する必要があります。詳細については、始める前にをご覧ください。各レプリカ インスタンスでparameterized_views.enabled
フラグを有効にしない限り、レプリカでパラメータ化されたビューをクエリすることはできません。この制限はスタンバイ インスタンスには適用されません。