Cloud SQL for PostgreSQL のパラメータ化されたセキュアビューは、SQL をサポートしながら、アプリケーションにデータ セキュリティと行アクセス制御を提供します。これらのビューは、データ値の抽出(列から特定のデータ部分を取得するプロセス)をサポートし、プロンプト インジェクション攻撃に対する保護に役立ちます。パラメータ化されたセキュアなビューを使用すると、エンドユーザーがアクセスする必要があるデータのみを表示できます。
パラメータ化されたセキュアビューは PostgreSQL ビューの拡張機能であり、ビュー定義でアプリケーション固有の名前付きビュー パラメータを使用できます。この機能は、クエリと名前付きパラメータの値を受け取るインターフェースを提供します。ビューは、その値を使用してクエリを実行します。この値は、クエリの実行全体で使用されます。パラメータ化されたセキュアビューの例
パラメータ化されたセキュアビューの例を次に示します。CREATE VIEW user_specific_items WITH (security_barrier) AS
SELECT item_id, item_name, description
FROM items t
WHERE owner_id = $@app_user_id;
ビューをクエリするには、execute_parameterized_query 関数を使用するか、EXECUTE .. WITH VIEW PARAMETERS ステートメントを実行します。
ユースケース
大規模言語モデル(LLM)は、センシティブ データを公開する SQL クエリを生成する可能性があります。
パラメータ化されたセキュアビューは、データベース レベルでデータ セキュリティを管理します。特に、自然言語から変換されたクエリなど、信頼できないソースからのアドホック クエリに適しています。たとえば、パラメータ化されたセキュアビューを使用して、ユーザーが「注文を表示」などの自然言語でクエリを発行できるアプリケーションのデータ セキュリティを確保できます。
パラメータ化されたセキュアビューを使用すると、Cloud SQL for PostgreSQL がこのクエリを実行する方法に次の要件を適用できます。
- このクエリは、データベースのパラメータ化されたセキュアビューにリストされているデータベース オブジェクトと列のみを読み取ります。
- このクエリは、クエリを送信したユーザーに関連付けられているデータベース行のみを読み取ります。返された行は、ユーザーのテーブル行とデータ関係があります。
セキュリティとアクセス制御の構成の詳細については、パラメータ化されたセキュアビューを使用するをご覧ください。
パラメータ化されたセキュアなビューは、エンドユーザーがデータベース テーブルで信頼できないクエリ(自然言語クエリなど)を実行できるようにした場合に発生するセキュリティ リスクの軽減に役立ちます。セキュリティ上のリスクには、次のものがあります。
- ユーザーはプロンプト インジェクション攻撃を送信し、基盤となるモデルを操作して、アプリケーションがアクセスできるすべてのデータを公開しようとする可能性があります。
- 自然言語から SQL への変換(NL2SQL)モデルは、データ セキュリティ上の理由から適切なものよりも範囲の広い SQL クエリを生成する場合があります。このセキュリティ リスクにより、善意のユーザークエリに対しても機密データを返す可能性があります。
パラメータ化されたセキュアなビューを使用すると、信頼できないクエリがデータを取得できるテーブルと列を定義できます。これらのビューを使用すると、個々のアプリケーション ユーザーが使用できる行の範囲を制限できます。また、これらの制限により、ユーザーがクエリのフレーズに関係なく、アプリケーション ユーザーが自然言語クエリで表示できるデータを厳密に制御できます。
たとえば、顧客の注文を追跡するアプリケーションがあるとします。サポート エージェントがアプリケーションで「お客様 12345 の注文ステータスを教えて」と質問します。このシナリオでは、アプリケーションは顧客 ID に基づくセッション変数を含むパラメータ化されたセキュアビューを使用できます。パラメータ化されたセキュアビューは、顧客 ID 12345 にリンクされ、アクセス可能な行のみを返すクエリを使用します。
パラメータ化されたセキュアビューを使用すると、個々のアプリケーション ユーザーが使用できる行の範囲を制限できます。この制御により、ユーザークエリのフレーズに関係なくデータ セキュリティが確保されます。
データ セキュリティ
パラメータ化されたセキュアなビューを使用すると、アプリケーション デベロッパーは次の方法でデータ セキュリティと行アクセスを制御できます。
WITH (security barrier)句を使用して作成されたビューは、ビューが処理を完了するまで、悪意を持って選択された関数や演算子に行から値が渡されないようにすることで、行レベルのセキュリティを提供します。WITH (security barrier)句の詳細については、ルールと権限をご覧ください。
名前付きビュー パラメータを使用すると、値でパラメータ化されたデータベースの制限付きビューを表示できます。値は、エンドユーザー認証などのアプリケーション レベルのセキュリティに基づいてアプリケーションから提供されます。
パラメータ化されたビューにアクセスするクエリに対する追加の制限の適用。これにより、指定されたパラメータ値に基づいてビュー内のチェックをエスケープする攻撃を防ぐことができます。詳細については、クエリの制限事項をご覧ください。
制限事項
パラメータ化されたセキュアビューを使用するには、Cloud SQL インスタンスの
cloudsql.enable_parameterized_viewsデータベース フラグを有効にする必要があります。これには、データベースの再起動が必要です。parameterized_views拡張機能は、パラメータ化されたセキュアビューを作成するすべてのデータベースに作成する必要があります。パラメータ化されたセキュアなビューで使用される API を使用して呼び出されるユーザー定義関数でパラメータ化されたビューが参照されると、エラーが発生します。親クエリでパラメータ化されたビューを直接参照する必要があります。
- パラメータ化されたセキュアビューにクエリを実行する際には、制限があります。詳細については、クエリの制限事項をご覧ください。