17.05 - 例: 注入されたSET QUERY_BANDによるプロキシ ユーザー変更の回避 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

CLIv2やJDBC、または .NETなどの標準的なアプリケーション プログラミング インターフェースを使用して、アプリケーションがSQLリクエストを信頼済みまたは信頼済みではないと指定できるようにすることができます。

クライアント ユーザーにより作成または変更されたSQLリクエストをアプリケーションが実行する場合に、プロキシー ユーザーを設定するすべてのSET QUERY_BANDリクエストが信頼済みリクエストで実行されることが必要なことがあります。

これを実行するには、信頼済みユーザーにCONNECT THROUGH WITH TRUST_ONLY権限を付与します。<Teradata Vantage™ - SQLデータ制御言語、B035-1149>を参照してください。この権限により、Vantageでは、プロキシ ユーザーを設定または削除する信頼済みユーザーにより実行されるすべてのSET QUERY_BANDリクエストが、信頼済みリクエストとして指定される必要があります。そうでない場合、リクエストは拒否され、要求元にエラーが返されます。

使用しているAPIによって、アプリケーションはユーザー入力からのリクエストに信頼済みではないというマークを付け、プロキシ ユーザーまたはプロキシ ロールを変更するSET QUERY_BANDをクライアントが注入するのを防ぎます。

この機能をJDBCで使用するには、TRUSTED_SQL=ON接続パラメータを使用してJDBC DataSourceを作成する必要があります。こうすると、DataSourceに対して実行されるすべてのリクエストは、{fn teradata_untrusted}エスケープ関数を使用してダウングレードされるまで信頼済みになります。

ユーザー入力によるSQLリクエストを含むリクエストの場合、アプリケーションはリクエストがTeradata JDBCドライバに渡される前に、SQL呼び出しの先頭に{fn teradata_untrusted}エスケープ関数を付け加えます。 このエスケープ関数はリクエストを信頼済みではない状態に設定します。 例えば、

     untrustedSQL = "{fn teradata_untrusted}"   untrustedSQL ;