例: UDF内のEXTERNAL SECURITY句の作成および使用 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ncd1596241368722.ditamap
dita:ditavalPath
ja-JP/ncd1596241368722.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

次の外部許可オブジェクトを定義したとします。

     CREATE AUTHORIZATION DEFINER sales
     USER 'salesdept'
     PASSWORD 'secret';

さらに、次に示すCのUDFを作成します。

     CREATE FUNCTION sales_collect (
       store_number INTEGER, 
       item_no      INTEGER)
     RETURNS INTEGER
     LANGUAGE C
     NO SQL
     EXTERNAL 'cs!salecol!salecollector.c'
     PARAMETER STYLE SQL
     EXTERNAL SECURITY DEFINER sales;

この関数は、特定の店舗の特定の商品番号(item_no)の販売に関連したデータを収集し、販売された商品の数を返します。考えられるシナリオ(無理に作った感は否めませんが)としては、ネットワーク インターフェースを介して関数とストアを通信させるというものを挙げられるかもしれません。関数はDEFINERコンテキストを使って作成されます。つまり、ユーザーがそのデータベース アカウントにログオンして、この関数を呼び出すSQL要求を実行するときには、呼び出しSQL要求を実行しているユーザーに関連するログオンIDではなく、セールスの許可オブジェクトに関連したログオンIDが使用されるということです。この例の場合、OSユーザーsalesdeptは、関数が必要な情報を入手するために読み取る外部データへのアクセス権限を持っています。