この例では、簡単な制約定義とそれに関連するUDFを作成し、機密性ラベルを使用して簡単な「読み取りなし」セキュリティ ポリシーを実装します。
この関数に関する注意点を以下にまとめます。
- この関数のSQL作成テキストでは、制約のデータを処理するために2つのパラメータを定義します。
- UserClearance
- RowClassification
- UserClearanceパラメータの入力は、行を読み取るユーザーの分類レベルに関するデータです。
- RowClassificationパラメータの入力は、読み取る行の分類レベルに関するデータです。
- この関数で定義するパラメータのデータ型はいずれもSMALLINTなので、それらのパラメータは、単一レベルの階層型分類制約にかかわっていることになります。
この単一レベルの階層型分類制約の名前は、ReadClassificationです。
- 簡単な外部関数では、UserClearanceとRowClassificationの値を比較します。
UserClearanceの値がRowClassificationの値以上であれば、リクエスト対象行に対するSELECTアクセス権が与えられます。
UserClearanceの値がRowClassificationの値より小さい場合は、リクエスト対象行に対するSELECTアクセス権が与えられません。
機密性ラベルや「読み取りなし」と「書き込みなし」のセキュリティ ポリシーの詳細は、<Teradata Vantage™ - Advanced SQL Engineセキュリティ管理ガイド、B035-1100>を参照してください。
行レベル セキュリティ制約をサポートする外部関数ルーチンの記述方法に関する詳細は、<Teradata Vantage™ - SQL外部ルーチン プログラミング、B035-1147>を参照してください。
CREATE FUNCTION SYSLIB.ReadClassification ( UserClearance SMALLINT, RowClassification SMALLINT) RETURNS CHARACTER(1) SPECIFIC SYSLIB.ReadClassification LANGUAGE C DETERMINISTIC NO SQL EXTERNAL NAME ‘cs!ReadClassification!c:\udf_ReadClassification.c’ PARAMETER STYLE TD_GENERAL;
ReadClassificationのCコードは、次のとおりです。
#define SQL_TEXT Latin_Text #include <sys/types.h> #include “sqltypes_td.h” void ReadClassification(short int *UserClearance, short int *RowClassification, char *AccessAllowed, { //Enforce no read up policy - user clearance must dominate row classification if (*UserClearance >= *RowClassification) // SELECT is allowed *AccessAllowed = ‘T’; else // SELECT is not allowed *AccessAllowed = ‘F’; return; }