CREATE FUNCTIONリクエストを使用して、Teradata Databaseがデータ行に対してセキュリティ ポリシーを強制するために実行する関数を生成します。セキュリティ制約の全セットを使用して定義されているテーブルで実行可能な4つのステートメント アクションそれぞれについて、関数を作成できます。行レベル セキュリティ ポリシーUDFのコーディング方法の詳細については、<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照してください。
- CとC++を使用して行レベル セキュリティ関数に対してコーディングできるのは、外部ルーチンのみです。
行レベル セキュリティを強制するために記述された外部ルーチンでは、Javaはサポートされていません。
- スカラー型UDFのみを行レベル セキュリティ関数として使用できます。
- 行レベル セキュリティ関数では、名前のオーバーロードはサポートされていません。
UDF関数への入力についてサーバーが要求するパラメータ型が原因で、同じ数のパラメータと対応するデータ型が、特定のステートメント アクションのセキュリティ ポリシーを実行する各UDFに対して要求されます。
セキュリティ ポリシーを実行するUDFのパラメータの間で存在する可能性がある唯一の違いは、制約がnullを許可するかどうかによって、異なるUDFのパラメータがnull標識変数を含むことも含めないこともあるという点です。
標識変数パラメータに対して、他の値は受け入れられません。
行レベル セキュリティUDFのパラメータ形式TD_GENERALは、UDFパラメータに対して標識変数パラメータがないことを指定します。
- 他のUDFの場合とは異なり、行レベル セキュリティUDFの入力パラメータ名は、それらのパラメータのソースを定義するため必須です。
セキュリティ制約ポリシーUDFは、ユーザーがSQLリクエストから呼び出すことはできません。代わりに、Teradata Databaseは、対応するステートメント アクション タイプが、制約UDFが定義されているテーブルに対して実行されている場合は常に、行レベル セキュリティ関数を自動的に呼び出します。Teradata DatabaseはUDFに対して入力パラメータ値を自動的に生成するため、ユーザーが求めるソースを認識している必要があります。
行レベル セキュリティ関数について、2つのシステム定義パラメータの名前が存在します。
- 各UDFに対する有効なシステム定義入力パラメータは、制約オブジェクトで定義されるUDFのステートメント アクションに依存します。
パラメータの名前 パラメータのソースの定義内容 CURRENT_SESSION UDFが適用される制約のセッションに対して現在設定されている値。 INPUT_ROW リクエストのオブジェクトである行の対応する制約列であること。 このような場合、システム定義パラメータ名は、Teradata Databaseからセキュリティ ポリシーUDFに提供される入力値が、以下の表で定義されるソースからの制約値であることを示します。
文 必要な入力パラメータ ステートメント アクションの結果 DELETE INPUT_ROW セッションがセキュリティ ポリシー テストに合格したかどうかを示します。 INSERT CURRENT_SESSION ターゲット行に入れられる値。 SELECT - CURRENT_SESSION
- INPUT_ROW
セッションがセキュリティ ポリシー テストに合格したかどうかを示します。 結果としてポリシー テストに合格しなかった場合、Teradata Databaseはアクションの処理を続行せず、次の行に移動し、監査行を生成しません。
UPDATE - CURRENT_SESSION
- INPUT_ROW
ターゲット行に入れられる値。
- ステートメント アクション タイプに対して制約関数を作成しない場合、そのステートメント アクションは、リクエストの実行に必要なOVERRIDE権限を持つユーザーしか実行できません。
ターゲット行の制約列に割り当てる値もリクエストに含めるか、ターゲット テーブルに割り当てる行をソース テーブルから選択する必要があります。
関数パラメータ形式の詳細については、UDFパラメータ形式を参照してください。