DEFINER許可とINVOKER許可 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

EXTERNAL SECURITY句のDEFINER許可を持つ外部ルーチンは常に、許可オブジェクトの作成者に関連したOSユーザー許可を使用します。

EXTERNAL SECURITY句のINVOKER許可を持つ外部ルーチンは、それを呼び出すデータベース ユーザーに関連したOSユーザー許可を使用します。

どちらのルーチンも外部許可を必要とします。違いは、ルーチンが実行時に使用するOSユーザー許可にあります。
  • DEFINER許可によってルーチンを定義する場合、すべて同じOSユーザー許可(許可を作成したユーザーのOSユーザー許可)が使用されます。
  • INVOKER許可によってルーチンを定義する場合、すべて異なるOSユーザー許可(ルーチンを呼び出すユーザーのOSユーザー許可)が使用されます。

以下の表にその違いのサマリーを示します。

外部ルーチンの実行時に使用するOSユーザー許可 指定する許可の種類
同じOSユーザー許可(ルーチンを実行するユーザーとは関係ない) DEFINER。
ルーチンを実行するユーザーによって指定されるOSユーザー許可 INVOKER。

INVOKER許可を定義すると、データベースはINVOKER_AUTHという2番目の許可を同じデータベースの下に作成します(次ページのレポートを参照)。

INVOKER許可はデータベースごとに1つだけしか存在できません。そのため、この許可が1つ定義されると、データベースは指定された名前で1つのエントリを作成し、さらにINVOKER_DEFAULTという名前でもう1つの複製エントリを作成します。どちらのエントリもDBC.TVMに保管されます。これら2つのINVOKERのデフォルト エントリは、名前以外は同一です。

EXTERNAL SECURITY INVOKER句をUDFに指定する場合、許可名は存在しません。データベースは、現在のデータベースのDBC.TVM内でINVOKER_DEFAULT名を検索します。データベースごとに1つの名前しかないため、正しいエントリが見つかります。

この許可のために作成した名前を指定するAUTHORIZATIONをDROPすると、データベースは両方のエントリを削除します。<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「DROP AUTHORIZATION」を参照してください。

SELECT *
FROM DBC.authorizationsV
ORDER BY databasename;

AUTHORIZATIONでDROPを使用する場合の結果