クエリー バンド、信頼済みセッション、行レベル セキュリティ - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

Teradata Databaseは、プロキシ ユーザーの行レベル セキュリティを強制的に適用します。このサポートの概要を以下の一覧にまとめます。

  • 制約が割り当てられている永久ユーザーでもあるプロキシ ユーザーは、行レベル セキュリティで保護されているテーブルに対してDMLリクエストを実行できます。
  • 行レベル セキュリティ制約をプロキシ ユーザーでもある永久ユーザーに割り当てるには、直接割り当てる方法と、永久ユーザーに割り当てられているプロファイルによって間接的に割り当てる方法とがあります。
  • プロキシ ユーザーがアプリケーション ユーザーの場合、そのオブジェクト レベル セキュリティ権限は、SET QUERY_BANDリクエストによってセッションに関連付けられるロールでのみ定義されます。
  • 行レベル セキュリティ テーブルに対するプロキシ ユーザーのアクセスには、行レベル セキュリティ制約で保護されていないテーブルにアクセスする信頼済みセッション ユーザーの場合と同じルールが適用されます。
  • セッションで最初にアクティブになる行レベル セキュリティ制約は、ユーザーに直接割り当てられている制約、またはユーザーで定義されているプロファイルで割り当てられている制約のいずれかまたは両方によって決まります。

    ユーザーにもプロファイルにも制約値が割り当てられていない場合は、空のセットになる可能性があります。

  • Teradata Databaseは、セッションで最初にアクティブになる行レベル セキュリティ制約値を以下の要素に基づいて決定します。
    • セッションの最初の接続。
    • セッションで最初に実行するSET QUERY_BANDリクエスト
    • セッションでアクティブ トランザクションを終了するために実行するリクエスト
    • セッションでUPDATEオプションを指定して実行する後続のSET QUERY_BANDリクエスト
    • セッションでUPDATEオプションを指定しないで実行する後続のSET QUERY_BANDリクエスト

これらの各決定要素について以下の5つの箇条書き項目で詳しく説明します。

SET SESSION CONSTRAINTリクエストによって、セッションのアクティブな制約値を、接続ユーザーに直接割り振られているいずれかの制約値、またはユーザー プロファイルで割り振られている制約値に変更できます。

セッションで最初にアクティブになる行レベル セキュリティ制約値を決定する要素を以下の5つの箇条書き項目にまとめます。

  • セッションの最初の接続。

    接続ユーザーのプロファイルに割り振られている制約値のセットと、接続ユーザーに直接割り振られている制約値のセットから、制約値が取り込まれます。

    ユーザーにもプロファイルにも制約値が割り振られていない場合は、空のセットになる可能性があります。SET SESSION CONSTRAINTリクエストを実行して、セッションのアクティブな制約値を、接続ユーザーに直接割り振られているいずれかの制約値、またはユーザー プロファイルで割り振られている制約値に変更できます。

  • セッションで最初に実行するSET QUERY_BANDリクエスト。

    最初に実行するSET QUERY_BANDリクエストでも、セッションで最初にアクティブになる行レベル セキュリティ制約を定義できます。

    このリクエストを実行すると、セッションで現在アクティブになっている制約値が空のセットになります。セッションに割り当てられる新しい制約値は、クエリー バンドとしてプロキシ ユーザーが割り当てられているかどうかによって異なります。プロキシ ユーザーが割り当てられている場合は、そのプロキシ ユーザーが永久ユーザーなのか、アプリケーション ユーザーなのかによって、割り当てられる制約が異なります。

    SET QUERY_BANDリクエストの設定 結果
    プロキシ ユーザーを設定しません セッションの制約値は、接続ユーザーの制約値になります。

    SET SESSION CONSTRAINTリクエストを実行して、セッションのアクティブな制約値を、接続ユーザーに直接割り振られているいずれかの制約値、またはプロファイルで割り振られている制約値に変更できます。

    プロキシ ユーザーを設定します(ユーザーは永久ユーザー) セッションの制約値は、プロキシ ユーザーのプロファイルに割り振られている制約値とプロキシ ユーザーに直接割り振られている制約値から取り込まれます(空のセットになる可能性があります)。

    SET SESSION CONSTRAINTリクエストを実行して、セッションのアクティブな制約値を、プロキシ ユーザーに直接割り振られている制約値、またはユーザー プロファイルで割り振られている制約値に変更できます。

    プロキシ ユーザーを設定します(ユーザーはアプリケーション ユーザー) セッションに制約値が割り振られません。

    SET SESSION CONSTRAINTリクエストを実行して、セッションのアクティブな制約値を変更することはできません。それ以外の場合、Teradata Databaseはリクエストをアボートし、リクエスト側にエラーを返します。

  • トランザクションを終了するリクエストを実行する場合、セッションの制約値は、セッションにプロキシ ユーザーが割り当てられているかどうかと、クエリー バンドがセッションで指定されているか、それとも現在のトランザクションだけで指定されているかによって決まります。
    プロキシ ユーザーの割り当て 制約値
    FOR SESSION 変更されません。

    制約値は、プロキシ ユーザーに割り当てられている値のままになります。

    FOR TRANSACTION セッションの最初の接続で設定された値に戻ります。

    制約値は、接続ユーザーに割り当てられている値になります。

    セッションで現在アクティブになっている制約値に対して後続のSET QUERY_BANDリクエストを実行する場合の結果は、UPDATEオプションを指定する場合と指定しない場合とで異なります。

    SET QUERY_BANDリクエストの設定 セッションで現在アクティブになっている制約値
    UPDATEオプションを指定します セッションに現在プロキシ ユーザーが割り当てられているかどうかによって異なります。

    どのような結果になるかについては、次の表を参照してください。

    UPDATEオプションを指定しません 空のセットに設定されます。

    セッションの新しい制約値は、前のテーブルのルールで決まる制約値と同じです。

  • UPDATEオプションを指定してSET QUERY_BANDリクエストを実行する場合、セッションで現在アクティブになっている制約値がどうなるかは、セッションに現在プロキシ ユーザーが割り当てられているかどうかによって異なります。

    プロキシ ユーザーが存在している状態で新しいプロキシ ユーザーを定義する場合の結果を以下の表にまとめます。

    ユーザーのタイプ 結果
    アプリケーション UPDATEオプションを指定すると、制約値がセッションに割り振られません。

    SET SESSION CONSTRAINTリクエストを実行して、セッションのアクティブな制約値を変更することはできません。それ以外の場合、Teradata Databaseはリクエストをアボートし、リクエスト側にエラーを返します。

    永久 UPDATEオプションを指定すると、制約値がセッションに割り振られます。

    新しいプロキシ ユーザーのプロファイルに割り振られている制約とプロキシ ユーザーに直接割り振られている制約から、制約値が取り込まれます。

    空のセットになる可能性があります。

    SET SESSION CONSTRAINTリクエストを実行して、セッションのアクティブな制約値を、プロキシ ユーザーに直接割り振られている制約値、またはユーザー プロファイルで割り振られている制約値に変更できます。

  • UPDATEオプションを指定しないでSET QUERY_BANDリクエストを実行すると、セッションで現在アクティブになっている制約は、空のセットにリセットされます。

    セッションの新しい制約値は、セッションで最初に実行したSET QUERY_BANDリクエストで定義される制約値と同じです。その制約値については、この一覧の2番目の箇条書き項目を参照してください。