信頼済みセッションは、エンド ユーザーの代わりにSQLリクエストをTeradata Databaseに発行する中間層アプリケーションと連動するように設計されています。中間層アプリケーションがエンド ユーザーにSQLリクエストの直接的な発行を許可すると(この操作のことをインジェクトSQLと呼ぶこともあります)、エンド ユーザーはアクティブなセッションIDとロール セットを、そのユーザーに意図された権限より高い任意アクセス制御権限を持つ別のプロキシ ユーザーに切り替えるSET QUERY_BANDリクエストを発行できるようになってしまいます。その結果、セキュリティ違反の可能性が生じます。
Teradata Databaseが行レベル セキュリティをテーブルに適用すれば、信頼済みセッションでは、このセキュリティに関する問題は発生しなくなります。詳細については、クエリー バンド、信頼済みセッション、行レベル セキュリティを参照してください。
アクティブなセッションIDをエンド ユーザーが変更できないようにするには、信頼済みユーザーによって実行依頼されるプロキシ ユーザー設定または削除のSET QUERY_BANDリクエストはすべて信頼済みリクエストであることを、DBAが必須にすることで対処できます。
これは、以下のステップで実現できます。
- 信頼済みユーザーにCONNECT THROUGH WITH TRUST_ONLY権限を付与します (GRANT CONNECT THROUGHリクエストの構文およびルールについては、<Teradata Vantage™ - SQLデータ制御言語、B035-1149>を参照)。
この権限が信頼済みユーザーに付与された場合、Teradata Databaseにおいては、その信頼済みユーザーによって実行されるSET QUERY_BANDリクエストのうちプロキシ ユーザーを設定または削除するものについて、すべて信頼済みリクエストとして指定されていることが必要になります。そうでなければリクエストは拒否されます。
- 使用可能なAPIを使用して、アプリケーションはSQLリクエストを信頼済みであるかまたは非信頼済みであるかのどちらかに指定します。
アプリケーションは、ProxyUserを設定するためのSET QUERY_BANDリクエストを出した時点で、そのリクエストを信頼済みに指定します。
アプリケーションは、エンド ユーザーによって作成または変更されたSQLリクエストを実行する時点で、クライアントがSET QUERY_BANDリクエストをインジェクトしてプロキシ ユーザーまたはプロキシ ロールを変更できないように、そのリクエストを非信頼済みに指定できます。
リクエストを信頼済みの指定にアップグレードするためのSQLメソッドはありません。
トランザクションのコミットまたはロールバックのどちらかを行なうと、Teradata Databaseはそのクエリー バンドとそのトランザクションのクエリー バンドで設定されたプロキシ ユーザーの両方を削除します。これをTrustOnlyフラグで制御することはできません。したがって、信頼済みセッションを使用するときは、セッション用クエリー バンドを使用すべきです。
次の表は、SET QUERY_BANDリクエストの動作をTrustOnlyフラグの設定ごとにまとめたものです。
リクエストのTrustOnlyフラグの設定値(アプリケーションが指定) | プロキシ ユーザーを設定または更新するSET QUERY_BANDリクエストの実行可能モード |
---|---|
N これは、デフォルトです。 |
次のどちらかのリクエスト タイプとして実行。 非信頼済み 信頼済み |
Y | 信頼済みリクエストとしてだけ実行。 TrustOnlyフラグをYに設定してプロキシ接続を設定した場合、プロキシ ユーザーを削除するSET QUERY_BANDリクエストは、信頼済みリクエストとして実行されない限り実行できません。 |
次の表は、SET QUERY_BANDリクエストを実行するプロシージャが、どのような場合に信頼済みまたは非信頼済みになるかをまとめたものです。
SET QUERY_BANDリクエストが含まれるプロシージャのタイプ | 場合 |
---|---|
SQL | これを呼び出したCALLリクエストが信頼済みである場合は信頼済み これを呼び出したCALLリクエストが非信頼済みである場合は非信頼済み |
外部 | オプション パーセル内のTrustedフラグがYに設定されている場合は信頼済み オプション パーセル内のTrustedフラグがNに設定されている場合は非信頼済み。 |