セキュリティ制約のためにUDFセットをコーディングするときは、対応するCONSTRAINTオブジェクトの目的および構造と調和させる必要があります。 セキュリティ制約に関わる操作を参照してください。
- Teradata Vantage™ SQL外部ルーチン プログラミング、B035-1147に示すように、各セキュリティ制約UDFをコーディングしてファイルします。1つのSQL操作型に対して1つ以上のUDFを作成できますが、セキュリティCONSTRAINTオブジェクトには各タイプのUDFを1つしか指定できません。
- CREATE FUNCTION文を使用して各UDFにFUNCTIONオブジェクトを定義します。例:
CREATE FUNCTION SYSLIB.function_name [parameter_name data_type ...(, parameter_name data_type)] Returns data_type LANGUAGE C NO SQL PARAMETER STYLE style EXTERNAL NAME udf_path_name ;
説明:
構文要素 説明 SYSLIB.function_name SYSLIBはUDFを含むデータベースです。 function_nameはUDFを識別します。例えば、UpdateLevelという名前の関数では次のようになります。
- Updateは、UDFを制約するSQL操作を定義します。
- Levelは、UDFは階層(レベル)制約を強制適用するように構築されていることを示します。
parameter_name 必要なUDF入力パラメータのソースを定義するために各UDF型に1つ以上のパラメータ名が必要です。 有効なパラメータ名は次のとおりです。
- current_session: セッション セキュリティ ラベル
- input_row: アクセスされる行のセキュリティ ラベル
UDFを参照するセキュリティCONSTRAINTオブジェクトのNULLオプションが、input_rowに値NULLを設定できるかどうかを決定します。SQL操作のパラメータ名の要件:
- INSERT UDFにはcurrent_sessionが必要です。
UDFは、新しく挿入された行の制約列の値として現在のセッションのセキュリティ ラベルを使用します。
- SELECTまたはUPDATE UDFにはcurrent_sessionとinput_rowの両方が必要です。
UDFはセッションと行セキュリティ ラベルを比較してSQL操作が許可されているかどうかを判定します。許可されている場合、UDFは行に対する制約値としてセッション ラベルを使用します。
- DELETE UDFにはinput_rowが必要です。
UDFは、行のセキュリティ ラベルをチェックして、行の削除を許可するかどうかを決定します。
data_type 入力パラメータ(current_sessionまたはinput_row)のデータ型はUDFを指定するCONSTRAINTオブジェクトのデータ型と一致する必要があります。 有効なデータ型
- Smallint – 階層制約
- Byte(n) – 非階層制約
データ型の要件については、CONSTRAINTオブジェクトの作成を参照してください。
Returns data_type - INSERTまたはUPDATE UDFは行の制約値を返すので、戻り値のデータ型はUDFを指定するCONSTRAINTオブジェクトのデータ型と同一である必要があります。
- SELECTまたはDELETE UDFは操作の成功または失敗を表わすTまたはFを返すので、戻り値のデータ型はCHARでなければなりません。
LANGUAGE C UDFが記述されているプログラミング言語です。 セキュリティ制約UDFは、Cコード化されたスカラー関数でなければなりません。
NO SQL UDFは、SQL文の実行やデータベース内のSQLデータの読み取り/変更ができません。 PARAMETER STYLE style CONSTRAINTオブジェクト定義が以下の場合 - 制約列のNULLは許容されず、スタイルはTD_GENERALでなければなりません。
- 制約列のNULLは許容され、スタイルはSQLでなければなりません。
udf_path_name UDFのパス名。 例: 'CS!updatelevel!c:\cctests\updatelevel.c' - 保護モードでUDFを実行するときに発生するパフォーマンスの問題を回避するには、ALTER FUNCTION文を使用して関数に非保護モード実行を設定します。
ALTER FUNCTION SYSLIB.function_name EXECUTE NOT PROTECTED
UDFが非保護モードで正常に動作しないと、データベースが再始動する可能性があります。デプロイする前に各UDFを徹底的にテストしてください。