Cloud SQL のパラメータ化されたセキュアビューの概要

Cloud SQL for MySQL のパラメータ化されたセキュアビューは、SQL をサポートしながら、アプリケーションにデータ セキュリティと行アクセス制御を提供します。これらのビューは、データ値の抽出(列から特定のデータ部分を取得するプロセス)をサポートし、プロンプト インジェクション攻撃に対する保護に役立ちます。パラメータ化されたセキュアなビューを使用すると、エンドユーザーがアクセスする必要があるデータのみを表示できます。

パラメータ化されたセキュアビューは MySQL ビューの拡張機能であり、ビュー定義でアプリケーション固有の名前付きビュー パラメータを使用できます。この機能は、クエリと名前付きパラメータの値を受け取るインターフェースを提供します。ビューは、その値を使用してクエリを実行します。この値は、クエリの実行全体で使用されます。

パラメータ化されたセキュアビューの例

次の例は、WHERE 句にセッション変数を使用して、テーブルにパラメータ化されたセキュアビューを作成する方法を示しています。

-- Create a view with a parameter

CREATE VIEW v_orders AS
SELECT * FROM orders
WHERE customer_id = @local_customer_id AND year >= @earliest_year;

その後、ビューのパラメータを設定してクエリを実行できます。

-- Set the parameter and query

SELECT /*+ SET_VIEW_VARS(local_customer_id=5, earliest_year=2021) */ * FROM v_orders;

-- Or query through a stored procedure

CALL mysql.execute_parameterized_query(
    'SELECT * FROM db.v_orders',
    'local_customer_id = 5, earliest_year = 2021');

ユースケース

大規模言語モデル(LLM)は、センシティブ データを公開する SQL クエリを生成する可能性があります。

パラメータ化されたセキュアビューは、データベース レベルでデータ セキュリティを管理します。特に、自然言語から変換されたクエリなど、信頼できないソースからのアドホック クエリに適しています。たとえば、パラメータ化されたセキュアビューを使用して、ユーザーが「注文を表示」などの自然言語でクエリを発行できるアプリケーションのデータ セキュリティを確保できます。

パラメータ化されたセキュアビューを使用すると、Cloud SQL for MySQL がこのクエリを実行する方法に次の要件を適用できます。

  • このクエリは、データベースのパラメータ化されたセキュアビューにリストされているデータベース オブジェクトと列のみを読み取ります。
  • このクエリは、クエリを送信したユーザーに関連付けられているデータベース行のみを読み取ります。返された行は、ユーザーのテーブル行とデータ関係があります。

セキュリティとアクセス制御の構成の詳細については、パラメータ化されたセキュアビューを使用するをご覧ください。

パラメータ化されたセキュアなビューは、エンドユーザーがデータベース テーブルで信頼できないクエリ(自然言語クエリなど)を実行できるようにした場合に発生するセキュリティ リスクの軽減に役立ちます。セキュリティ上のリスクには、次のものがあります。

  • ユーザーはプロンプト インジェクション攻撃を送信し、基盤となるモデルを操作して、アプリケーションがアクセスできるすべてのデータを公開しようとする可能性があります。
  • 自然言語から SQL への変換(NL2SQL)モデルは、データ セキュリティ上の理由から適切なものよりも範囲の広い SQL クエリを生成する場合があります。このセキュリティ リスクにより、善意のユーザークエリに対しても機密データを返す可能性があります。

パラメータ化されたセキュアなビューを使用すると、信頼できないクエリがデータを取得できるテーブルと列を定義できます。これらのビューを使用すると、個々のアプリケーション ユーザーが使用できる行の範囲を制限できます。また、これらの制限により、ユーザーがクエリのフレーズに関係なく、アプリケーション ユーザーが自然言語クエリで表示できるデータを厳密に制御できます。

たとえば、顧客の注文を追跡するアプリケーションがあるとします。サポート エージェントがアプリケーションで「お客様 12345 の注文ステータスを教えて」と質問します。このシナリオでは、アプリケーションは顧客 ID に基づくセッション変数を含むパラメータ化されたセキュアビューを使用できます。パラメータ化されたセキュアビューは、顧客 ID 12345 にリンクされ、アクセス可能な行のみを返すクエリを使用します。

パラメータ化されたセキュアビューを使用すると、個々のアプリケーション ユーザーが使用できる行の範囲を制限できます。この制御により、ユーザークエリのフレーズに関係なくデータ セキュリティが確保されます。

データ セキュリティ

パラメータ化されたセキュアなビューを使用すると、アプリケーション デベロッパーは次の方法でデータ セキュリティと行アクセスを制御できます。

  • MySQL のパラメータ化されたセキュアビューは、ビューが処理を完了するまで、悪意を持って選択された関数や演算子に行から値が渡されないようにすることで、行レベルのセキュリティを提供します。
  • 名前付きビュー パラメータを使用すると、値でパラメータ化されたデータベースの制限付きビューを表示できます。値は、エンドユーザー認証などのアプリケーション レベルのセキュリティに基づいてアプリケーションから提供されます。

  • パラメータ化されたビューにアクセスするクエリに対する追加の制限の適用。これにより、指定されたパラメータ値に基づいてビュー内のチェックをエスケープする攻撃を防ぐことができます。詳細については、クエリの制限事項をご覧ください。

ユーザー管理を簡素化する

パラメータ化されたセキュアビューを使用すると、エンドユーザーごとに個別のデータベース ユーザーやデータベース ロールを作成しなくても、1 つのデータベース ロールですべてのエンドユーザーに対応できます。これにより、各エンドユーザーが自分のデータにのみアクセスするアプリケーションのユーザーと接続の管理を簡素化できます。

たとえば、ユーザーに特定の顧客の注文のみが表示されるアプリケーションでは、単一のパラメータ化されたセキュアビューを定義して、エンドユーザー ID をパラメータとして使用することで、すべてのユーザーに単一のデータベース ロール(基盤となるテーブルではなくこのビューにアクセスできるロール)で対応できます。これにより、ユーザー管理とデータベース接続が簡素化されます。

制限事項

  • パラメータ化された安全なビューは、Cloud SQL for MySQL バージョン 8.0.43 以降でのみサポートされています。以前のバージョンの MySQL でパラメータ化されたセキュアビューを作成しようとすると、Cloud SQL はエラーを返します。

  • WHEREHAVINGON 句の外で変数を指定することはできません。

  • パラメータ化されたセキュアビューで EXPLAIN を使用することはできません。

  • パラメータ化されたセキュアビューにクエリを実行する際には、制限があります。詳細については、クエリの制限事項をご覧ください。

次のステップ