17.05 - 例: 「読み取りなし」行レベル セキュリティを適用する簡単な制約UDFの作成 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

この例では、簡単な制約定義とそれに関連するUDFを作成し、機密性ラベルを使用して簡単な「読み取りなし」セキュリティ ポリシーを実装します。

この関数に関する注意点を以下にまとめます。

  • この関数のSQL作成テキストでは、制約のデータを処理するために2つのパラメータを定義します。
    • UserClearance
    • RowClassification
  • UserClearanceパラメータの入力は、行を読み取るユーザーの分類レベルに関するデータです。
  • RowClassificationパラメータの入力は、読み取る行の分類レベルに関するデータです。
  • この関数で定義するパラメータのデータ型はいずれもSMALLINTなので、それらのパラメータは、単一レベルの階層型分類制約にかかわっていることになります。

    この単一レベルの階層型分類制約の名前は、ReadClassificationです。

  • 簡単な外部関数では、UserClearanceRowClassificationの値を比較します。

    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;
     }